42#define CHIP_NAME "CHIPSEA CS1237"
43#define MANUFACTURER_NAME "CHIPSEA"
44#define SUPPLY_VOLTAGE_MIN 3.0f
45#define SUPPLY_VOLTAGE_MAX 5.5f
46#define MAX_CURRENT 2.34f
47#define TEMPERATURE_MIN -40.0f
48#define TEMPERATURE_MAX 85.0f
49#define DRIVER_VERSION 1000
54#define CS1237_COMMAND_READ 0x56
55#define CS1237_COMMAND_WRITE 0x65
66static uint8_t a_cs1237_check_ready(
cs1237_handle_t *handle, uint8_t *ready)
69 uint16_t timeout = 500;
77 handle->
debug_print(
"cs1237: dout gpio read failed.\n");
106static uint8_t a_cs1237_read_data(
cs1237_handle_t *handle, int32_t *data)
113 if (a_cs1237_check_ready(handle, &ready) != 0)
119 handle->
debug_print(
"cs1237: data is not ready.\n");
124 for (i = 0; i < 24; i++)
128 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
135 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
145 handle->
debug_print(
"cs1237: dout gpio read failed.\n");
158 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
165 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
173 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
180 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
188 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
195 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
201 if ((raw & 0x800000U) != 0)
206 *data = (int32_t)(raw);
221static uint8_t a_cs1237_write_config(
cs1237_handle_t *handle, uint8_t command, uint8_t configuration)
229 if (a_cs1237_read_data(handle, &data) != 0)
236 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
243 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
251 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
258 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
265 for (i = 0; i < 7; i++)
269 handle->
debug_print(
"cs1237: dout gpio write failed.\n");
276 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
283 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
294 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
301 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
307 config = configuration;
308 for (i = 0; i < 8; i++)
312 handle->
debug_print(
"cs1237: dout gpio write failed.\n");
319 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
326 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
337 handle->
debug_print(
"cs1237: dout gpio read failed.\n");
344 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
351 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
370static uint8_t a_cs1237_read_config(
cs1237_handle_t *handle, uint8_t command, uint8_t *configuration)
378 if (a_cs1237_read_data(handle, &data) != 0)
385 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
392 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
400 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
407 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
414 for (i = 0; i < 7; i++)
418 handle->
debug_print(
"cs1237: dout gpio write failed.\n");
425 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
432 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
443 handle->
debug_print(
"cs1237: dout gpio read failed.\n");
450 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
457 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
464 for (i = 0; i < 8; i++)
468 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
475 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
485 handle->
debug_print(
"cs1237: dout gpio read failed.\n");
498 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
505 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
510 *configuration = config;
527 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
548 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
676 config |= !enable << 6;
938 config |= channel << 0;
1032 res = a_cs1237_power_down(handle);
1064 res = a_cs1237_wake_up(handle);
1100 handle->
debug_print(
"cs1237: can't be temperature channel.\n");
1105 res = a_cs1237_read_data(handle, raw);
1111 *mv = (double)(*raw) *
1147 handle->
debug_print(
"cs1237: not temperature channel.\n");
1151 if (handle->
pga != 1)
1159 handle->
debug_print(
"cs1237: temperature raw can't be 0.\n");
1164 res = a_cs1237_read_data(handle, raw);
1201 handle->
debug_print(
"cs1237: sclk_gpio_init is null.\n");
1207 handle->
debug_print(
"cs1237: sclk_gpio_deinit is null.\n");
1213 handle->
debug_print(
"cs1237: sclk_gpio_write is null.\n");
1219 handle->
debug_print(
"cs1237: dout_gpio_init is null.\n");
1225 handle->
debug_print(
"cs1237: dout_gpio_deinit is null.\n");
1231 handle->
debug_print(
"cs1237: dout_gpio_write is null.\n");
1237 handle->
debug_print(
"cs1237: dout_gpio_read is null.\n");
1243 handle->
debug_print(
"cs1237: delay_us is null.\n");
1249 handle->
debug_print(
"cs1237: delay_ms is null.\n");
1257 handle->
debug_print(
"cs1237: sclk gpio init failed.\n");
1264 handle->
debug_print(
"cs1237: dout gpio init failed.\n");
1273 handle->
debug_print(
"cs1237: sclk gpio write failed.\n");
1281 handle->
debug_print(
"cs1237: dout gpio read failed.\n");
1318 res = a_cs1237_power_down(handle);
1327 handle->
debug_print(
"cs1237: sclk gpio deinit failed.\n");
1334 handle->
debug_print(
"cs1237: dout gpio deinit failed.\n");
1369 res = a_cs1237_write_config(handle, command, config);
1403 res = a_cs1237_read_config(handle, command, config);
1436 res = a_cs1237_read_data(handle, data);
#define SUPPLY_VOLTAGE_MAX
#define CS1237_COMMAND_READ
chip command definition
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define CS1237_COMMAND_WRITE
#define CHIP_NAME
chip information definition
driver cs1237 header file
uint8_t cs1237_set_adc_rate(cs1237_handle_t *handle, cs1237_adc_rate_t rate)
set adc rate
uint8_t cs1237_read_temperature(cs1237_handle_t *handle, int32_t *raw, float *degrees)
read temperature
uint8_t cs1237_set_reference_voltage_output(cs1237_handle_t *handle, cs1237_bool_t enable)
enable or disable reference voltage output
uint8_t cs1237_get_channel(cs1237_handle_t *handle, cs1237_channel_t *channel)
get adc channel
struct cs1237_handle_s cs1237_handle_t
cs1237 handle structure definition
uint8_t cs1237_get_temperature_calibration_point(cs1237_handle_t *handle, int32_t *temperature_raw, float *temperature_deg)
get temperature calibration point
uint8_t cs1237_deinit(cs1237_handle_t *handle)
close the chip
uint8_t cs1237_get_reference_voltage(cs1237_handle_t *handle, float *volt)
get reference voltage
uint8_t cs1237_info(cs1237_info_t *info)
get chip's information
cs1237_bool_t
cs1237 bool enumeration definition
uint8_t cs1237_read(cs1237_handle_t *handle, int32_t *raw, double *mv)
read voltage
uint8_t cs1237_set_reference_voltage(cs1237_handle_t *handle, float volt)
set reference voltage
uint8_t cs1237_wake_up(cs1237_handle_t *handle)
wake up
uint8_t cs1237_get_pga(cs1237_handle_t *handle, cs1237_pga_t *pga)
get adc pga
#define CS1237_COMMAND_DATA_DELAY
cs1237 command data delay definition
uint8_t cs1237_get_adc_rate(cs1237_handle_t *handle, cs1237_adc_rate_t *rate)
get adc rate
uint8_t cs1237_set_pga(cs1237_handle_t *handle, cs1237_pga_t pga)
set adc pga
uint8_t cs1237_get_reference_voltage_output(cs1237_handle_t *handle, cs1237_bool_t *enable)
get reference voltage output status
uint8_t cs1237_power_down(cs1237_handle_t *handle)
power down
cs1237_pga_t
cs1237 pga enumeration definition
uint8_t cs1237_set_temperature_calibration_point(cs1237_handle_t *handle, int32_t temperature_raw, float temperature_deg)
set temperature calibration point
cs1237_adc_rate_t
cs1237 adc rate enumeration definition
struct cs1237_info_s cs1237_info_t
cs1237 information structure definition
uint8_t cs1237_set_channel(cs1237_handle_t *handle, cs1237_channel_t channel)
set adc channel
uint8_t cs1237_init(cs1237_handle_t *handle)
initialize the chip
cs1237_channel_t
cs1237 channel enumeration definition
@ CS1237_CHANNEL_SHORT_CIRCUIT
@ CS1237_CHANNEL_TEMPERATURE
uint8_t cs1237_get_command(cs1237_handle_t *handle, uint8_t command, uint8_t *config)
get command
uint8_t cs1237_get_data(cs1237_handle_t *handle, int32_t *data)
get data
uint8_t cs1237_set_command(cs1237_handle_t *handle, uint8_t command, uint8_t config)
set command
float reference_voltage_v
void(* delay_ms)(uint32_t ms)
uint8_t(* sclk_gpio_deinit)(void)
uint8_t(* dout_gpio_init)(void)
uint8_t(* dout_gpio_write)(uint8_t level)
void(* debug_print)(const char *const fmt,...)
void(* delay_us)(uint32_t us)
uint8_t(* sclk_gpio_init)(void)
uint8_t(* dout_gpio_deinit)(void)
uint8_t(* dout_gpio_read)(uint8_t *level)
uint8_t(* sclk_gpio_write)(uint8_t level)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v