Exemple #1
0
	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();
	}
Exemple #2
0
	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();
	}
Exemple #3
0
	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();
	}
Exemple #4
0
	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;
}