42#define CHIP_NAME "Titan Micro Electronics TM1622"
43#define MANUFACTURER_NAME "Titan Micro Electronics"
44#define SUPPLY_VOLTAGE_MIN 2.7f
45#define SUPPLY_VOLTAGE_MAX 5.2f
46#define MAX_CURRENT 4.5f
47#define TEMPERATURE_MIN -20.0f
48#define TEMPERATURE_MAX 85.0f
49#define DRIVER_VERSION 1000
54#define TM1622_COMMAND_SYS_DIS 0x00
55#define TM1622_COMMAND_SYS_EN 0x01
56#define TM1622_COMMAND_LCD_OFF 0x02
57#define TM1622_COMMAND_LCD_ON 0x03
58#define TM1622_COMMAND_TIMER_DIS 0x04
59#define TM1622_COMMAND_WDT_DIS 0x05
60#define TM1622_COMMAND_TIMER_EN 0x06
61#define TM1622_COMMAND_WDT_EN 0x07
62#define TM1622_COMMAND_TONE_OFF 0x08
63#define TM1622_COMMAND_TONE_ON 0x09
64#define TM1622_COMMAND_CLR_TIMER 0x0D
65#define TM1622_COMMAND_CLR_WDT 0x0F
66#define TM1622_COMMAND_RC_32K 0x18
67#define TM1622_COMMAND_EXT_32K 0x1C
68#define TM1622_COMMAND_TONE_4K 0x40
69#define TM1622_COMMAND_TONE_2K 0x60
70#define TM1622_COMMAND_IRQ_DIS 0x80
71#define TM1622_COMMAND_IRQ_EN 0x88
72#define TM1622_COMMAND_F1 0xA0
73#define TM1622_COMMAND_F2 0xA1
74#define TM1622_COMMAND_F4 0xA2
75#define TM1622_COMMAND_F8 0xA3
76#define TM1622_COMMAND_F16 0xA4
77#define TM1622_COMMAND_F32 0xA5
78#define TM1622_COMMAND_F64 0xA6
79#define TM1622_COMMAND_F128 0xA7
80#define TM1622_COMMAND_TOPT 0xE0
81#define TM1622_COMMAND_TNORMAL 0xE3
93static uint8_t a_tm1622_write_bits(
tm1622_handle_t *handle, uint32_t data, uint8_t len)
98 for (i = 0; i < len; i++)
103 handle->
debug_print(
"tm1622: wr gpio write failed.\n");
108 if ((data & (1 << (len - 1 - i))) != 0)
113 handle->
debug_print(
"tm1622: data gpio write failed.\n");
123 handle->
debug_print(
"tm1622: data gpio write failed.\n");
132 handle->
debug_print(
"tm1622: wr gpio write failed.\n");
152static uint8_t a_tm1622_read_bits(
tm1622_handle_t *handle, uint32_t *data, uint8_t len)
159 for (i = 0; i < len; i++)
164 handle->
debug_print(
"tm1622: rd gpio write failed.\n");
172 handle->
debug_print(
"tm1622: data gpio read failed.\n");
182 handle->
debug_print(
"tm1622: rd gpio write failed.\n");
201static uint8_t a_tm1622_write_command(
tm1622_handle_t *handle, uint16_t cmd)
208 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
213 res = a_tm1622_write_bits(handle, (uint32_t)(0x04), 3);
218 res = a_tm1622_write_bits(handle, (uint32_t)(cmd << 1), 9);
226 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
245static uint8_t a_tm1622_write_ram(
tm1622_handle_t *handle, uint8_t addr, uint8_t *data, uint8_t len)
253 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
258 res = a_tm1622_write_bits(handle, (uint32_t)(0x05), 3);
263 res = a_tm1622_write_bits(handle, (uint32_t)(addr & 0x3F), 6);
269 for (i = 0; i < len; i++)
271 res = a_tm1622_write_bits(handle, (uint32_t)((data[i] >> 0) & 0x0F), 4);
276 res = a_tm1622_write_bits(handle, (uint32_t)((data[i] >> 4) & 0x0F), 4);
285 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
304static uint8_t a_tm1622_read_ram(
tm1622_handle_t *handle, uint8_t addr, uint8_t *data, uint8_t len)
312 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
317 res = a_tm1622_write_bits(handle, (uint32_t)(0x06), 3);
322 res = a_tm1622_write_bits(handle, (uint32_t)(addr & 0x3F), 6);
328 for (i = 0; i < len; i++)
332 res = a_tm1622_read_bits(handle, &output, 4);
337 data[i] = (uint8_t)(output & 0xF);
338 res = a_tm1622_read_bits(handle, &output, 4);
343 data[i] |= (uint8_t)(output & 0xF) << 4;
348 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
367static uint8_t a_tm1622_read_modify_write(
tm1622_handle_t *handle, uint8_t addr,
368 void (*and_or)(uint8_t addr, uint8_t lsb_msb, uint8_t input, uint8_t *output), uint8_t len)
377 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
382 res = a_tm1622_write_bits(handle, (uint32_t)(0x05), 3);
387 res = a_tm1622_write_bits(handle, (uint32_t)(addr & 0x3F), 6);
393 for (i = 0; i < len; i++)
396 uint8_t output_lsb = 0;
398 uint8_t output_msb = 0;
400 res = a_tm1622_read_bits(handle, &data, 4);
405 input_lsb = (uint8_t)(data & 0xF);
408 and_or(i, 0, input_lsb, &output_lsb);
410 res = a_tm1622_write_bits(handle, (uint32_t)(output_lsb & 0x0F), 4);
416 res = a_tm1622_read_bits(handle, &data, 4);
421 input_msb = (uint8_t)(data & 0xF);
424 and_or(i, 1, input_msb, &output_msb);
426 res = a_tm1622_write_bits(handle, (uint32_t)(output_msb & 0x0F), 4);
435 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
1051 handle->
debug_print(
"tm1622: data_gpio_init is null.\n");
1057 handle->
debug_print(
"tm1622: data_gpio_deinit is null.\n");
1063 handle->
debug_print(
"tm1622: data_gpio_write is null.\n");
1069 handle->
debug_print(
"tm1622: data_gpio_read is null.\n");
1075 handle->
debug_print(
"tm1622: wr_gpio_init is null.\n");
1081 handle->
debug_print(
"tm1622: wr_gpio_deinit is null.\n");
1087 handle->
debug_print(
"tm1622: wr_gpio_write is null.\n");
1093 handle->
debug_print(
"tm1622: rd_gpio_init is null.\n");
1099 handle->
debug_print(
"tm1622: rd_gpio_deinit is null.\n");
1105 handle->
debug_print(
"tm1622: rd_gpio_write is null.\n");
1111 handle->
debug_print(
"tm1622: cs_gpio_init is null.\n");
1117 handle->
debug_print(
"tm1622: cs_gpio_deinit is null.\n");
1123 handle->
debug_print(
"tm1622: cs_gpio_write is null.\n");
1129 handle->
debug_print(
"tm1622: delay_us is null.\n");
1135 handle->
debug_print(
"tm1622: delay_ms is null.\n");
1143 handle->
debug_print(
"tm1622: data gpio init failed.\n");
1150 handle->
debug_print(
"tm1622: wr gpio init failed.\n");
1158 handle->
debug_print(
"tm1622: rd gpio init failed.\n");
1167 handle->
debug_print(
"tm1622: cs gpio init failed.\n");
1177 handle->
debug_print(
"tm1622: cs gpio write failed.\n");
1188 handle->
debug_print(
"tm1622: wr gpio write failed.\n");
1199 handle->
debug_print(
"tm1622: rd gpio write failed.\n");
1210 handle->
debug_print(
"tm1622: data gpio write failed.\n");
1256 handle->
debug_print(
"tm1622: data gpio deinit failed.\n");
1263 handle->
debug_print(
"tm1622: wr gpio deinit failed.\n");
1270 handle->
debug_print(
"tm1622: rd gpio deinit failed.\n");
1277 handle->
debug_print(
"tm1622: cs gpio deinit failed.\n");
1312 if (addr + len > 32)
1314 handle->
debug_print(
"tm1622: addr + len > 32.\n");
1319 res = a_tm1622_write_ram(handle, addr * 2, data, len);
1352 memset(buf, 0,
sizeof(uint8_t) * 32);
1353 res = a_tm1622_write_ram(handle, 0, buf, 32);
1386 res = a_tm1622_write_command(handle, cmd);
1421 res = a_tm1622_write_ram(handle, addr, data, len);
1456 res = a_tm1622_read_ram(handle, addr, data, len);
1491 res = a_tm1622_read_modify_write(handle, addr, and_or, len);
#define TM1622_COMMAND_TIMER_EN
#define TM1622_COMMAND_TIMER_DIS
#define TM1622_COMMAND_EXT_32K
#define TM1622_COMMAND_IRQ_DIS
#define TM1622_COMMAND_SYS_DIS
chip command definition
#define TM1622_COMMAND_WDT_EN
#define TM1622_COMMAND_IRQ_EN
#define TM1622_COMMAND_LCD_ON
#define TM1622_COMMAND_TOPT
#define TM1622_COMMAND_F2
#define TM1622_COMMAND_TONE_2K
#define TM1622_COMMAND_F4
#define SUPPLY_VOLTAGE_MAX
#define TM1622_COMMAND_TONE_4K
#define TM1622_COMMAND_F16
#define TM1622_COMMAND_F8
#define TM1622_COMMAND_SYS_EN
#define TM1622_COMMAND_TONE_ON
#define TM1622_COMMAND_RC_32K
#define TM1622_COMMAND_CLR_TIMER
#define TM1622_COMMAND_F32
#define TM1622_COMMAND_TONE_OFF
#define TM1622_COMMAND_TNORMAL
#define MANUFACTURER_NAME
#define TM1622_COMMAND_LCD_OFF
#define SUPPLY_VOLTAGE_MIN
#define TM1622_COMMAND_F1
#define TM1622_COMMAND_F128
#define TM1622_COMMAND_CLR_WDT
#define CHIP_NAME
chip information definition
#define TM1622_COMMAND_F64
#define TM1622_COMMAND_WDT_DIS
driver tm1622 header file
tm1622_clock_t
tm1622 clock enumeration definition
uint8_t tm1622_clear_timer(tm1622_handle_t *handle)
clear timer
uint8_t tm1622_set_lcd_bias(tm1622_handle_t *handle, tm1622_bool_t enable)
enable or disable lcd bias
uint8_t tm1622_clear_segment(tm1622_handle_t *handle)
clear segment
uint8_t tm1622_write_segment(tm1622_handle_t *handle, uint8_t addr, uint8_t *data, uint8_t len)
write segment
uint8_t tm1622_clear_watchdog(tm1622_handle_t *handle)
clear watchdog
tm1622_freq_t
tm1622 freq enumeration definition
uint8_t tm1622_set_tone_freq(tm1622_handle_t *handle, tm1622_tone_freq_t freq)
set tone freq
tm1622_tone_freq_t
tm1622 tone freq enumeration definition
tm1622_mode_t
tm1622 mode enumeration definition
uint8_t tm1622_set_watchdog(tm1622_handle_t *handle, tm1622_bool_t enable)
enable or disable watchdog
struct tm1622_handle_s tm1622_handle_t
tm1622 handle structure definition
uint8_t tm1622_set_timer(tm1622_handle_t *handle, tm1622_bool_t enable)
enable or disable timer
struct tm1622_info_s tm1622_info_t
tm1622 information structure definition
uint8_t tm1622_set_clock(tm1622_handle_t *handle, tm1622_clock_t clk)
set clock
tm1622_bool_t
tm1622 bool enumeration definition
uint8_t tm1622_deinit(tm1622_handle_t *handle)
close the chip
uint8_t tm1622_set_freq(tm1622_handle_t *handle, tm1622_freq_t freq)
set freq
uint8_t tm1622_init(tm1622_handle_t *handle)
initialize the chip
uint8_t tm1622_set_tone(tm1622_handle_t *handle, tm1622_bool_t enable)
enable or disable tone
#define TM1622_COMMAND_DATA_DELAY
tm1622 command data delay definition
uint8_t tm1622_set_oscillator(tm1622_handle_t *handle, tm1622_bool_t enable)
enable or disable oscillator
uint8_t tm1622_set_irq(tm1622_handle_t *handle, tm1622_bool_t enable)
enable or disable irq
uint8_t tm1622_set_mode(tm1622_handle_t *handle, tm1622_mode_t mode)
set mode
uint8_t tm1622_info(tm1622_info_t *info)
get chip's information
uint8_t tm1622_read_modify_write(tm1622_handle_t *handle, uint8_t addr, void(*and_or)(uint8_t addr, uint8_t lsb_msb, uint8_t input, uint8_t *output), uint8_t len)
read modify write
uint8_t tm1622_get_data(tm1622_handle_t *handle, uint8_t addr, uint8_t *data, uint8_t len)
get data
uint8_t tm1622_set_command(tm1622_handle_t *handle, uint16_t cmd)
set command
uint8_t tm1622_set_data(tm1622_handle_t *handle, uint8_t addr, uint8_t *data, uint8_t len)
set data
uint8_t(* data_gpio_write)(uint8_t level)
void(* delay_ms)(uint32_t ms)
uint8_t(* rd_gpio_write)(uint8_t level)
uint8_t(* wr_gpio_deinit)(void)
uint8_t(* cs_gpio_deinit)(void)
uint8_t(* data_gpio_init)(void)
void(* debug_print)(const char *const fmt,...)
uint8_t(* data_gpio_read)(uint8_t *level)
uint8_t(* rd_gpio_deinit)(void)
void(* delay_us)(uint32_t us)
uint8_t(* wr_gpio_init)(void)
uint8_t(* cs_gpio_init)(void)
uint8_t(* data_gpio_deinit)(void)
uint8_t(* cs_gpio_write)(uint8_t level)
uint8_t(* wr_gpio_write)(uint8_t level)
uint8_t(* rd_gpio_init)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v