AT32 SC7A20H模块驱动示例代码详解
采用IIC方式与SC7A20H模块通信
底层驱动:
void SL_SC7A20H_Driver_Init(void)
{
uint8_t i=0;
uint8_t id1=0;
uint8_t id2=0;
i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0x0F, &id1, 1, 0xFFFFFFF);
printf("0x%X\n",id1);
i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0x70, &id2, 1, 0xFFFFFFF);
printf("0x%X\n",id2);
if ((id1 != 0x11) || (id2 != 0x28))
{
printf("error\n");
}
uint8_t t1 = 0x47;
i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x20, &t1, 1, 0xFFFFFFF);
//50Hz+正常模式xyz使能
i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x21, 0X00, 1, 0xFFFFFFF);
//关闭滤波器,手册上面没有滤波器截止频率设置说明,开启后无法测量静止状态下的重力加 速度
i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x22, 0X00, 1, 0xFFFFFFF);
//关闭中断
uint8_t t2 = 0x88;
i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0x23, &t2, 1, 0xFFFFFFF);
//读取完成再更新,小端模式,、2g+正常模式,高精度模式
}
unsigned char SL_SC7A20H_Read_FIFO_Buf(signed short *x_buf,signed short *y_buf,signed short *z_buf)
{
unsigned char i=0;
unsigned char sc7a20_data[7];
unsigned char SL_FIFO_ACCEL_NUM;
uint8_t t3=0x4F;
i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0x2F, &SL_FIFO_ACCEL_NUM, 1, 0xFFFFFFF);
if (SL_FIFO_ACCEL_NUM & 0x40)
SL_FIFO_ACCEL_NUM = 32;
else
SL_FIFO_ACCEL_NUM = SL_FIFO_ACCEL_NUM&0x1f;
//for(i=0;i<SL_FIFO_ACCEL_NUM;i++)
for(i=0;i<3;i++)
{
i2c_memory_read(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x31, 0xA8, &sc7a20_data[1], 6, 0xFFFFFFF);
x_buf[i] =(signed short int)(((unsigned char)sc7a20_data[2] * 256 ) + (unsigned char)sc7a20_data[1]);
y_buf[i] =(signed short int)(((unsigned char)sc7a20_data[4] * 256 ) + (unsigned char)sc7a20_data[3]);
z_buf[i] =(signed short int)(((unsigned char)sc7a20_data[6] * 256 ) + (unsigned char)sc7a20_data[5]);
printf("x_buf[%d]: 0x%04X, y_buf[%d]: 0x%04X, z_buf[%d]: 0x%04X\n", i, (unsigned short)x_buf[i], i, (unsigned short)y_buf[i], i, (unsigned short)z_buf[i]);
}
i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0X2E, 0X00, 1, 0xFFFFFFF);
i2c_memory_write(&hi2cx, I2C_MEM_ADDR_WIDIH_8, 0x30, 0X2E, &t3, 1, 0xFFFFFFF);
return SL_FIFO_ACCEL_NUM;
}
作者:@chao( ˝ᗢ̈˝ )