yincheng.zhong
2 天以前 2ebb8217f43b69f491620423ea4d5d5944d1f91d
keil/include/drivers/lis3dh_driver.c
@@ -165,19 +165,75 @@
}
//void delay_us(uint32_t nTimer)
//{
//    uint32_t i=0;
//    for(i=0;i<nTimer;i++){
//        __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
//      __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
//      __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
//        __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
//      __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
//      __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
//        __NOP();__NOP();__NOP();__NOP();
//    }
//}
static void delay_us(uint32_t nTimer)
{
    uint32_t i=0;
    for(i=0; i<nTimer; i++) {
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
    }
}
AxesRaw_t lis2dhdata;
//OLED初始化IIC
@@ -198,7 +254,7 @@
    io_pin_mux_set(SCL_PIN, IO_FUNC0);
    gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1);
      //io_open_drain_set(SDA_PIN, 1);
    //io_open_drain_set(SDA_PIN, 1);
    io_pull_set(SDA_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL2);//输出高阻态
    gpio_pin_set_dir(SCL_PIN , GPIO_DIR_OUT, 1);
@@ -212,18 +268,37 @@
void Accelerometer_Init()
{
    LIS3DH_GetWHO_AM_I(&lisidtemp);
    lisid=(uint16_t)lisidtemp;
//    LIS3DH_GetWHO_AM_I(&lisidtemp);
//    lisid=(uint16_t)lisidtemp;
    if(lisid == 0x33)
//    if(lisid == 0x33)
//    {
//        LIS3DH_Data_Init();
//    }
//    else
//    {
//        g_com_map[IMU_ENABLE]=0;
//    }
    lisid = mir3da_ReadOneByte(REG_CHIP_ID);
    if(lisid == 0x13)
    {
        LIS3DH_Data_Init();
        mir3da_init();
    }
    else
    {
        g_com_map[IMU_ENABLE]=0;
    }
        LIS3DH_GetWHO_AM_I(&lisidtemp);
        lisid=(uint16_t)lisidtemp;
        if(lisid == 0x33)
        {
            LIS3DH_Data_Init();
        }
        else
        {
            g_com_map[IMU_ENABLE]=0;
        }
    }
}
void mir3da_init()
@@ -484,11 +559,18 @@
    return acc_g;
}
void  IIC2_SDA_OUT()
{
    gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1);
}
void  IIC2_SDA_IN()
{
    gpio_pin_set_dir(SDA_PIN,GPIO_DIR_IN,1); //SDA设置为输入等待接收端的应答信号
}
//产生IIC起始信号
void IIC2_Start(void)
{
//      IIC2_SDA_OUT();     //sda线输出
    IIC2_SDA_OUT();     //sda线输出
    SDA_1;
//      delay_us(10);
    SCL_1;
@@ -500,7 +582,7 @@
//产生IIC停止信号
void IIC2_Stop(void)
{
//      IIC2_SDA_OUT();//sda线输出
    IIC2_SDA_OUT();//sda线输出
    SCL_0;
//      delay_us(10);
    SDA_0;//STOP:when CLK is high DATA change form low to high
@@ -515,16 +597,14 @@
//等待应答信号到来
//返回值:1,接收应答失败
//        0,接收应答成功
uint8_t IIC2_Wait_Ack(void)
{
    uint8_t ucErrTime=0;
//  IIC2_SDA_IN();      //SDA设置为输入
    gpio_pin_set_dir(SDA_PIN , GPIO_DIR_IN, 1);
    IIC2_SDA_IN();
    SDA_1;
    delay_us(6);
    delay_us(15);
    SCL_1;
    delay_us(6);
    delay_us(15);
    while(IIC2_READ_SDA)
    {
@@ -535,7 +615,6 @@
            return 1;
        }
    }
    gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1);
    SCL_0;//时钟输出0
    return 0;
}
@@ -543,7 +622,7 @@
void IIC2_Ack(void)
{
    SCL_0;
//   IIC2_SDA_OUT();
    IIC2_SDA_OUT();
    SDA_0;
    delay_us(10);
    SCL_1;
@@ -554,7 +633,7 @@
void IIC2_NAck(void)
{
    SCL_0;
//   IIC2_SDA_OUT();
    IIC2_SDA_OUT();
    SDA_1;
    delay_us(10);
    SCL_1;
@@ -570,7 +649,7 @@
void IIC2_Send_Byte(uint8_t txd)
{
    uint8_t t;
//      IIC2_SDA_OUT();
    IIC2_SDA_OUT();
    SCL_0;//拉低时钟开始数据传输
    for(t=0; t<8; t++)
    {
@@ -595,7 +674,7 @@
uint8_t IIC2_Read_Byte(unsigned char ack)
{
    unsigned char i,receive=0;
//   IIC2_SDA_IN();//SDA设置为输入
    IIC2_SDA_IN();//SDA设置为输入
    for(i=0; i<8; i++ )
    {
        SCL_0;