void CEnc28J60::writeOp(uint8_t op, uint8_t address, uint8_t data) { uint8_t dat = 0; ENC28J60_CSL(); // issue write command dat = op | (address & ADDR_MASK); spi_read_write(dat); // write data dat = data; spi_read_write(dat); ENC28J60_CSH(); }
void CEnc28J60::writeBuffer(uint8_t* data,uint32_t len) { ENC28J60_CSL(); // issue write command spi_read_write(ENC28J60_WRITE_BUF_MEM); while(len) { len--; spi_read_write(*data); data++; } ENC28J60_CSH(); }
void CEnc28J60::readBuffer(uint8_t* data,uint32_t len) { ENC28J60_CSL(); // issue read command spi_read_write(ENC28J60_READ_BUF_MEM); while(len) { len--; // read data *data = (uint8_t)spi_read_write(0); data++; } *data='\0'; ENC28J60_CSH(); }
uint8_t CEnc28J60::readOp(uint8_t op, uint8_t address) { uint8_t dat = 0; ENC28J60_CSL(); dat = op | (address & ADDR_MASK); spi_read_write(dat); dat = spi_read_write(0xFF); // do dummy read if needed (for mac and mii, see datasheet page 29) if(address & 0x80) { dat = spi_read_write(0xFF); } // release CS ENC28J60_CSH(); return dat; }
int stm_calibration_cmd(void) { uint16_t hub_status; int id_chk_cnt = 0; int cal_try_cnt = 0; uint16_t gyrocal_bit = 1<<SPI_APIF_HUB_GYRCAL; int16_t gyro_offset[3]; int8_t accel_offset[3]; uint8_t tx_buffer[10]={0,}; uint8_t rx_buffer[10]={0,}; printk("STM %s(%d)\n",__func__,__LINE__); usleep(120000); do{ spi_read_write(SPI_APIF_REG_HUBID|0x80,tx_buffer, rx_buffer, 3); } while (rx_buffer[2] != HUB_ID && ++id_chk_cnt < HUB_ID_TRY_CNT); printk("STM Device ID : %x, cnt : %d \n", rx_buffer[2], id_chk_cnt); spi_read_write(SPI_APIF_REG_FACTORYCAL,tx_buffer, rx_buffer, 2); usleep(900000); do { spi_read_write(SPI_APIF_REG_HUBSTAT|0x80,tx_buffer, rx_buffer, 4); memcpy(&hub_status, rx_buffer+2, 2); usleep(10000); } while (++cal_try_cnt < HUB_ID_TRY_CNT && ((hub_status & gyrocal_bit) == 0)); if ( hub_status & gyrocal_bit) { spi_read_write(SPI_APIF_REG_GYROCALVALUE|0x80,tx_buffer, rx_buffer, 8); memcpy(gyro_offset, rx_buffer+2, 6); spi_read_write(SPI_APIF_REG_ACCELCALVALUE|0x80,tx_buffer, rx_buffer, 8); memcpy(accel_offset, rx_buffer+2, 3); printk("STM Gryoscope calibrated at %dth attempt, gyro offset : (%d,%d,%d), accel offset : (%d,%d,%d)\n", cal_try_cnt, gyro_offset[0], gyro_offset[1], gyro_offset[2], accel_offset[0], accel_offset[1], accel_offset[2]); } else { printk("STM Gryoscope calibration failed \n"); return STM_NOK; } printk( "STM calibration cmd send.\n"); return STM_OK; }