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;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值