generated from hulk/gd32e23x_template
在board_config.h文件中添加#define SOFTWARE_IIC选项用以选择使用软件IIC还是硬件IIC,如果注释掉该行则为硬件IIC方式。并完整实现软件IIC功能。
This commit is contained in:
@@ -12,7 +12,12 @@ void ldc1612_set_conversion_time(uint8_t channel, uint16_t result) {
|
||||
uint8_t data[2] = {0};
|
||||
data[0] = (result >> 8) & 0xFF;
|
||||
data[1] = result & 0xFF;
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, SET_CONVERSION_TIME_REG_START + channel, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, SET_CONVERSION_TIME_REG_START + channel, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** @brief set conversion offset.
|
||||
@@ -23,7 +28,12 @@ void ldc1612_set_conversion_offset(uint8_t channel, uint16_t result) {
|
||||
uint8_t data[2] = {0};
|
||||
data[0] = (result >> 8) & 0xFF;
|
||||
data[1] = result & 0xFF;
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, SET_CONVERSION_OFFSET_REG_START + channel, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, SET_CONVERSION_OFFSET_REG_START + channel, data);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/** @brief Before conversion,wait LC sensor stabilize for a short time.
|
||||
@@ -34,7 +44,11 @@ void ldc1612_set_LC_stabilize_time(uint8_t channel, uint16_t result) {
|
||||
uint8_t data[2] = {0};
|
||||
data[0] = (result >> 8) & 0xFF;
|
||||
data[1] = result & 0xFF;
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, SET_LC_STABILIZE_REG_START + channel, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, SET_LC_STABILIZE_REG_START + channel, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** @brief set input frequency divide and fref divide.
|
||||
@@ -65,8 +79,11 @@ void ldc1612_set_freq_divide(uint8_t channel) {
|
||||
data[0] = (value >> 8) & 0xFF;
|
||||
data[1] = value & 0xFF;
|
||||
// printf("\tFIN_DIV: %d, FREF_DIV: %d\r\n", fin_div, freq_div);
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, SET_FREQ_REG_START + channel, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, SET_FREQ_REG_START + channel, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** @brief Error output config.
|
||||
@@ -77,7 +94,11 @@ void ldc1612_set_error_config(uint16_t value) {
|
||||
data[0] = (value >> 8) & 0xFF;
|
||||
data[1] = value & 0xFF;
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, ERROR_CONFIG_REG, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, ERROR_CONFIG_REG, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** @brief mux config.
|
||||
@@ -88,7 +109,11 @@ void ldc1612_set_mux_config(uint16_t value) {
|
||||
data[0] = (value >> 8) & 0xFF;
|
||||
data[1] = value & 0xFF;
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, MUL_CONFIG_REG, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, MUL_CONFIG_REG, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** @brief reset sensor.
|
||||
@@ -98,7 +123,12 @@ void ldc1612_reset_sensor(void) {
|
||||
uint8_t data[2] = {0};
|
||||
data[0] = 0x80;
|
||||
data[1] = 0x00;
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, SENSOR_RESET_REG, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, SENSOR_RESET_REG, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** @brief set drive current of sensor.
|
||||
@@ -109,7 +139,11 @@ void ldc1612_set_drive_current(uint8_t channel, uint16_t value) {
|
||||
data[0] = (value >> 8) & 0xFF;
|
||||
data[1] = value & 0xFF;
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, SET_DRIVER_CURRENT_REG + channel, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, SET_DRIVER_CURRENT_REG + channel, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/** @brief Main config part of sensor.Contains select channel、start conversion、sleep mode、sensor activation mode、INT pin disable ..
|
||||
@@ -120,7 +154,11 @@ void ldc1612_set_sensor_config(uint16_t value) {
|
||||
data[0] = (value >> 8) & 0xFF;
|
||||
data[1] = value & 0xFF;
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_write_16bits(LDC1612_ADDR, SENSOR_CONFIG_REG, data);
|
||||
#else
|
||||
i2c_write_16bits(LDC1612_ADDR, SENSOR_CONFIG_REG, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ldc1612_single_ch0_config(void) {
|
||||
@@ -141,23 +179,41 @@ void ldc1612_single_ch0_config(void) {
|
||||
|
||||
void ldc1612_iic_get_sensor_infomation(void) {
|
||||
uint8_t data[2] = {0};
|
||||
// ldc1612_iic_read_16bits(READ_MANUFACTURER_ID, data);
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_read_16bits(LDC1612_ADDR, READ_MANUFACTURER_ID, data);
|
||||
#else
|
||||
i2c_read_16bits(LDC1612_ADDR, READ_MANUFACTURER_ID, data);
|
||||
#endif
|
||||
printf("\tManufacturer: 0x%x", (data[0] << 8) | data[1]);
|
||||
// ldc1612_iic_read_16bits(READ_DEVICE_ID, data);
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_read_16bits(LDC1612_ADDR, READ_DEVICE_ID, data);
|
||||
#else
|
||||
i2c_read_16bits(LDC1612_ADDR, READ_DEVICE_ID, data);
|
||||
#endif
|
||||
printf("\tDevice: 0x%x", (data[0] << 8) | data[1]);
|
||||
}
|
||||
|
||||
uint16_t ldc1612_get_manufacturer_id(void) {
|
||||
uint8_t data[2] = {0};
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_read_16bits(LDC1612_ADDR, READ_MANUFACTURER_ID, data);
|
||||
#else
|
||||
i2c_read_16bits(LDC1612_ADDR, READ_MANUFACTURER_ID, data);
|
||||
#endif
|
||||
return (data[0] << 8) | data[1];
|
||||
}
|
||||
|
||||
uint16_t ldc1612_get_deveice_id(void) {
|
||||
uint8_t data[2] = {0};
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_read_16bits(LDC1612_ADDR, READ_DEVICE_ID, data);
|
||||
#else
|
||||
i2c_read_16bits(LDC1612_ADDR, READ_DEVICE_ID, data);
|
||||
#endif
|
||||
return (data[0] << 8) | data[1];
|
||||
}
|
||||
|
||||
@@ -169,11 +225,18 @@ uint32_t ldc1612_get_raw_channel_result(uint8_t channel) {
|
||||
uint32_t raw_value = 0;
|
||||
uint8_t value[2] = {0};
|
||||
|
||||
// ldc1612_iic_read_16bits(CONVERTION_RESULT_REG_START + channel, value);
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_read_16bits(LDC1612_ADDR, CONVERTION_RESULT_REG_START + channel, value);
|
||||
#else
|
||||
i2c_read_16bits(LDC1612_ADDR, CONVERTION_RESULT_REG_START + channel, value);
|
||||
#endif
|
||||
raw_value |= (uint32_t) ((value[0] << 8) | value[1]) << 16;
|
||||
// ldc1612_iic_read_16bits(CONVERTION_RESULT_REG_START + channel + 1, value);
|
||||
|
||||
#ifdef SOFTWARE_IIC
|
||||
soft_i2c_read_16bits(LDC1612_ADDR, CONVERTION_RESULT_REG_START + channel + 1, value);
|
||||
#else
|
||||
i2c_read_16bits(LDC1612_ADDR, CONVERTION_RESULT_REG_START + channel + 1, value);
|
||||
#endif
|
||||
raw_value |= (uint32_t) ((value[0] << 8) | value[1]);
|
||||
return ldc1612_parse_raw_result(raw_value);
|
||||
}
|
||||
|
Reference in New Issue
Block a user