|
@@ -6,6 +6,15 @@
|
|
|
|
|
|
|
|
|
#define CPS135B_ADDR (0x6D)
|
|
|
+
|
|
|
+static uint8_t iic_error_count = 0;
|
|
|
+static uint8_t iic_exception = 0;
|
|
|
+static uint8_t iic_exception2 = 0;
|
|
|
+static float cps_pressure = 0;
|
|
|
+static float cps_temperature = 0;
|
|
|
+static uint32_t ret_status = 0;
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* @prototype I2C_ParaInit(void)
|
|
|
*
|
|
@@ -19,8 +28,8 @@ void I2C0_ParaInit(void)
|
|
|
I2C_ConfigType i2cConfig;
|
|
|
|
|
|
/*初始化引脚功能为I2C.*/
|
|
|
- //GPIO_SetFunc(I2C0_SCL_PORT, I2C0_SCL_PIN, GPIO_FUN3);
|
|
|
- //GPIO_SetFunc(I2C0_SDA_PORT, I2C0_SDA_PIN, GPIO_FUN3);
|
|
|
+ GPIO_SetFunc(GPIOA, GPIO_PIN0, GPIO_FUN3);//I2C0_SCL
|
|
|
+ GPIO_SetFunc(GPIOA, GPIO_PIN1, GPIO_FUN3);//I2C0_sda
|
|
|
|
|
|
/*清零结构体变量.*/
|
|
|
memset(&i2cConfig, 0x00, sizeof(i2cConfig));
|
|
@@ -138,18 +147,28 @@ uint8_t cps135b_gd(float* pressure, float* temperature)
|
|
|
void PressureSensor_Init(void)
|
|
|
{
|
|
|
I2C0_ParaInit();
|
|
|
+ iic_error_count = 0;
|
|
|
+ cps_pressure = 0;
|
|
|
+ cps_temperature = 0;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
uint8_t PressureSensor_MR(void)
|
|
|
{
|
|
|
- uint32_t status = I2C_HW_STATUS_ERROR_NULL;
|
|
|
+
|
|
|
uint8_t buffer[2];
|
|
|
buffer[0] = 0x30;
|
|
|
buffer[1] = 0x0A;
|
|
|
|
|
|
- status = I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, buffer, 2, ENABLE);//发送读取地址
|
|
|
+ //反复几次出现问题,直接返回异常
|
|
|
+ if(iic_exception2 > 3){
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
|
|
|
- if(I2C_HW_STATUS_ERROR_NULL == status){
|
|
|
+ ret_status = I2C_HW_STATUS_ERROR_NULL;
|
|
|
+ ret_status = I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, buffer, 2, ENABLE);//发送读取地址
|
|
|
+
|
|
|
+ if(I2C_HW_STATUS_ERROR_NULL == ret_status){
|
|
|
return 0;
|
|
|
}else{
|
|
|
return 1;
|
|
@@ -157,43 +176,73 @@ uint8_t PressureSensor_MR(void)
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-uint8_t PressureSensor_Getvalue(float* pressure)
|
|
|
+uint8_t PressureSensor_Read(void)
|
|
|
{
|
|
|
- uint32_t status = I2C_HW_STATUS_ERROR_NULL;
|
|
|
uint32_t tmp = 0;
|
|
|
uint8_t reg_addr = 0x06;
|
|
|
- uint8_t data[3];
|
|
|
+ uint8_t data[5];
|
|
|
|
|
|
- status |= I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, ®_addr, 1, DISABLE);//发送读取地址
|
|
|
- status |= I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, data, 3);//读取数据
|
|
|
+ if(iic_exception2 > 3){
|
|
|
+ //反复几次出现问题,直接返回异常
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
|
|
|
- if(I2C_HW_STATUS_ERROR_NULL == status){
|
|
|
+ ret_status = I2C_HW_STATUS_ERROR_NULL;
|
|
|
+ ret_status |= I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, ®_addr, 1, DISABLE);//发送读取地址
|
|
|
+ ret_status |= I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, data, 5);//读取数据
|
|
|
+
|
|
|
+ if(I2C_HW_STATUS_ERROR_NULL == ret_status){
|
|
|
|
|
|
tmp = (uint32_t)data[0]<<16;
|
|
|
tmp += (uint32_t)data[1]<<8;
|
|
|
tmp += data[2];
|
|
|
|
|
|
- *pressure = (1.0*tmp)/256;
|
|
|
+ cps_pressure = (1.0*tmp)/256/1000; //kPa
|
|
|
|
|
|
- return 0;
|
|
|
+ tmp = 0;
|
|
|
+ tmp += (uint32_t)data[3]<<8;
|
|
|
+ tmp += data[4];
|
|
|
+
|
|
|
+
|
|
|
+ if(data[3] <= 128){
|
|
|
+ cps_temperature = 1.0*tmp/256;
|
|
|
+ }else{
|
|
|
+ cps_temperature = 1.0*(tmp-65535)/256;
|
|
|
+ }
|
|
|
+
|
|
|
+ iic_error_count = 0;
|
|
|
+ iic_exception =0;
|
|
|
|
|
|
}else{
|
|
|
- return 1;
|
|
|
+
|
|
|
+ iic_error_count++;
|
|
|
}
|
|
|
|
|
|
+ if(iic_error_count >= 3){
|
|
|
+ iic_exception =1;
|
|
|
+
|
|
|
+ PressureSensor_DeInit();
|
|
|
+ PressureSensor_Init();
|
|
|
+
|
|
|
+ iic_exception2++;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return iic_exception;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
-uint8_t PressureSensor_Getvalue2(float* pressure, float* temperature)
|
|
|
+
|
|
|
+
|
|
|
+uint8_t PressureSensor_Getvalue(float* pressure)
|
|
|
{
|
|
|
uint32_t status = I2C_HW_STATUS_ERROR_NULL;
|
|
|
uint32_t tmp = 0;
|
|
|
uint8_t reg_addr = 0x06;
|
|
|
- uint8_t data[5];
|
|
|
+ uint8_t data[3];
|
|
|
|
|
|
status |= I2C_MasterTransmitPoll(I2C0, CPS135B_ADDR, ®_addr, 1, DISABLE);//发送读取地址
|
|
|
- status |= I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, data, 5);//读取数据
|
|
|
+ status |= I2C_MasterReceivePoll(I2C0, CPS135B_ADDR, data, 3);//读取数据
|
|
|
|
|
|
if(I2C_HW_STATUS_ERROR_NULL == status){
|
|
|
|
|
@@ -203,22 +252,20 @@ uint8_t PressureSensor_Getvalue2(float* pressure, float* temperature)
|
|
|
|
|
|
*pressure = (1.0*tmp)/256;
|
|
|
|
|
|
- tmp = 0;
|
|
|
- tmp += (uint32_t)data[3]<<8;
|
|
|
- tmp += data[4];
|
|
|
-
|
|
|
-
|
|
|
- if(data[3] <= 128){
|
|
|
- *temperature = 1.0*tmp/256;
|
|
|
- }else{
|
|
|
- *temperature = 1.0*(tmp-65535)/256;
|
|
|
- }
|
|
|
-
|
|
|
return 0;
|
|
|
|
|
|
}else{
|
|
|
return 1;
|
|
|
}
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+uint8_t PressureSensor_Getvalue2(float* pressure, float* temperature)
|
|
|
+{
|
|
|
+ *pressure = cps_pressure;
|
|
|
+ *temperature = cps_temperature;
|
|
|
+
|
|
|
+ return iic_exception;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -239,5 +286,11 @@ uint8_t PressureSensor_Print(void)
|
|
|
void PressureSensor_DeInit(void)
|
|
|
{
|
|
|
|
|
|
+ I2C_DeInit(I2C0);
|
|
|
+}
|
|
|
+
|
|
|
+void PressureSensor_Release(void)
|
|
|
+{
|
|
|
|
|
|
+ I2C_DeInit(I2C0);
|
|
|
}
|