| | |
| | | #include "mk_io.h" |
| | | #include "mk_gpio.h" |
| | | #include "global_param.h" |
| | | #include "PCA9555.h" |
| | | /* Private typedef -----------------------------------------------------------*/ |
| | | /* Private define ------------------------------------------------------------*/ |
| | | /* Private macro -------------------------------------------------------------*/ |
| | |
| | | uint8_t lisid; |
| | | uint8_t lisidtemp; |
| | | |
| | | //void Accelerometer_Init() |
| | | //{ |
| | | |
| | | // LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | |
| | | // lisid=(uint16_t)lisidtemp; |
| | | |
| | | // if(lisid == 0x33) |
| | | // { |
| | | // LIS3DH_Data_Init(); |
| | | // } |
| | | // else if(lisid == 0x13) |
| | | // { |
| | | // mir3da_init(); |
| | | // } |
| | | // else |
| | | // { |
| | | // g_com_map[IMU_ENABLE]=0; |
| | | // } |
| | | // |
| | | |
| | | //} |
| | | void Accelerometer_Init() |
| | | { |
| | | lisid = mir3da_ReadOneByte(REG_CHIP_ID); |
| | | |
| | | if(lisid == 0x13) |
| | | { |
| | | mir3da_init(); |
| | | } |
| | | else |
| | | { |
| | | LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | lisid=(uint16_t)lisidtemp; |
| | | |
| | |
| | | { |
| | | g_com_map[IMU_ENABLE]=0; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | //void Accelerometer_Init() |
| | | //{ |
| | | //// lisid = mir3da_ReadOneByte(REG_CHIP_ID); |
| | | //// |
| | | // if(lisid == 0x13) |
| | | // { |
| | | // mir3da_init(); |
| | | // } |
| | | //// else |
| | | //// { |
| | | // LIS3DH_GetWHO_AM_I(&lisidtemp); |
| | | // lisid=(uint16_t)lisidtemp; |
| | | // |
| | | //// if(lisid == 0x33) |
| | | //// { |
| | | //// LIS3DH_Data_Init(); |
| | | //// } |
| | | // if(lisid == 0x13) |
| | | // { |
| | | // mir3da_init(); |
| | | // } |
| | | // else |
| | | // { |
| | | // g_com_map[IMU_ENABLE]=0; |
| | | // } |
| | | //// } |
| | | //} |
| | | void mir3da_init() |
| | | { |
| | | u8_m data_m = 0; |
| | |
| | | { |
| | | uint8_t ucErrTime=0; |
| | | // IIC2_SDA_IN(); //SDA设置为输入 |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_IN, 1); |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_IN, 0); |
| | | SDA_1; |
| | | delay_us(6); |
| | | SCL_1; |
| | |
| | | if(ucErrTime>250) |
| | | { |
| | | IIC2_Stop(); |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); |
| | | return 1; |
| | | } |
| | | } |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 1); |
| | | gpio_pin_set_dir(SDA_PIN , GPIO_DIR_OUT, 0); |
| | | SCL_0;//时钟输出0 |
| | | return 0; |
| | | } |
| | |
| | | { |
| | | unsigned char i,receive=0; |
| | | // IIC2_SDA_IN();//SDA设置为输入 |
| | | gpio_pin_set_dir(SDA_PIN,GPIO_DIR_IN,0); //设置为输入读取电平 |
| | | for(i=0; i<8; i++ ) |
| | | { |
| | | SCL_0; |
| | |
| | | if(IIC2_READ_SDA)receive++; |
| | | delay_us(5); |
| | | } |
| | | if (!ack) |
| | | if (!ack){ |
| | | IIC2_NAck();//发送nACK |
| | | else |
| | | gpio_pin_set_dir(SDA_PIN,GPIO_DIR_OUT,0); //设置为输出恢复ACK |
| | | } |
| | | else{ |
| | | IIC2_Ack(); //发送ACK |
| | | gpio_pin_set_dir(SDA_PIN,GPIO_DIR_OUT,1); //设置为输出恢复ACK |
| | | } |
| | | |
| | | return receive; |
| | | } |
| | | |
| | | //在LIS3DH里面的指定地址开始读一字节数据 |
| | | //ReadAddr :读出的地址 |
| | | //返回值 :读出的数据 |
| | | //uint8_t LIS3DH_ReadOneByte(uint16_t ReadAddr) |
| | | //{ |
| | | // uint8_t temp=0; |
| | | // IIC2_Start(); |
| | | // IIC2_Send_Byte(0X32); //发送写命令 |
| | | // IIC2_Wait_Ack(); |
| | | // IIC2_Send_Byte(ReadAddr); //发送读地址 |
| | | // IIC2_Wait_Ack(); |
| | | // IIC2_Start(); |
| | | // IIC2_Send_Byte(0X33); //发送读命令,进入接收模式 |
| | | // IIC2_Wait_Ack(); |
| | | // temp=IIC2_Read_Byte(0); |
| | | // IIC2_Stop(); //产生一个停止条件 |
| | | // return temp; |
| | | //} |
| | | uint8_t LIS3DH_ReadOneByte(uint16_t ReadAddr) |
| | | { |
| | | uint8_t temp=0; |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X32); //发送写命令 |
| | | IIC2_Send_Byte(0X4e); //发送写命令 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Send_Byte(ReadAddr); //发送读地址 |
| | | IIC2_Wait_Ack(); |
| | | IIC2_Start(); |
| | | IIC2_Send_Byte(0X33); //发送读命令,进入接收模式 |
| | | IIC2_Send_Byte(0X4f); //发送读命令,进入接收模式 |
| | | IIC2_Wait_Ack(); |
| | | temp=IIC2_Read_Byte(0); |
| | | IIC2_Stop(); //产生一个停止条件 |
| | |
| | | //在mir3da里面的指定地址开始读一字节数据 |
| | | //ReadAddr :读出的地址 |
| | | //返回值 :读出的数据 |
| | | //uint8_t mir3da_ReadOneByte(uint16_t ReadAddr) |
| | | //{ |
| | | // uint8_t temp=0; |
| | | // IIC2_Start(); |
| | | // IIC2_Send_Byte(0X4e); //发送写命令 |
| | | // IIC2_Wait_Ack(); |
| | | // IIC2_Send_Byte(ReadAddr); //发送读地址 |
| | | // IIC2_Wait_Ack(); |
| | | // IIC2_Start(); |
| | | // IIC2_Send_Byte(0X4f); //发送读命令,进入接收模式 |
| | | // IIC2_Wait_Ack(); |
| | | // temp=IIC2_Read_Byte(0); |
| | | // IIC2_Stop(); //产生一个停止条件 |
| | | // return temp; |
| | | //} |
| | | uint8_t mir3da_ReadOneByte(uint16_t ReadAddr) |
| | | { |
| | | uint8_t temp=0; |