42#define CHIP_NAME "EPSON RX8025T"
43#define MANUFACTURER_NAME "EPSON"
44#define SUPPLY_VOLTAGE_MIN 1.6f
45#define SUPPLY_VOLTAGE_MAX 5.5f
46#define MAX_CURRENT 0.90f
47#define TEMPERATURE_MIN -40.0f
48#define TEMPERATURE_MAX 85.0f
49#define DRIVER_VERSION 1000
54#define RX8025T_REG_SEC 0x00
55#define RX8025T_REG_MIN 0x01
56#define RX8025T_REG_HOUR 0x02
57#define RX8025T_REG_WEEK 0x03
58#define RX8025T_REG_DAY 0x04
59#define RX8025T_REG_MONTH 0x05
60#define RX8025T_REG_YEAR 0x06
61#define RX8025T_REG_RAM 0x07
62#define RX8025T_REG_MIN_ALARM 0x08
63#define RX8025T_REG_HOUR_ALARM 0x09
64#define RX8025T_REG_WEEK_DAY_ALARM 0x0A
65#define RX8025T_REG_TIMER_COUNTER_0 0x0B
66#define RX8025T_REG_TIMER_COUNTER_1 0x0C
67#define RX8025T_REG_EXTENSION 0x0D
68#define RX8025T_REG_FLAG 0x0E
69#define RX8025T_REG_CONTROL 0x0F
74#define RX8025T_ADDRESS 0x64
86static uint8_t a_rx8025t_iic_write(
rx8025t_handle_t *handle, uint8_t reg, uint8_t data)
107static uint8_t a_rx8025t_iic_multiple_write(
rx8025t_handle_t *handle, uint8_t reg, uint8_t *buf, uint8_t len)
128static uint8_t a_rx8025t_iic_multiple_read(
rx8025t_handle_t *handle, uint8_t reg, uint8_t *buf, uint8_t len)
144static uint8_t a_rx8025t_hex2bcd(uint8_t val)
161static uint8_t a_rx8025t_bcd2hex(uint8_t val)
166 val = (val >> 4) & 0x0F;
179static uint8_t a_week_convert(uint8_t data)
183 for (i = 0; i < 8; i++)
185 if (((data >> i) & 0x1) != 0)
222 handle->
debug_print(
"rx8025t: read control failed.\n");
227 prev |= interval << 6;
231 handle->
debug_print(
"rx8025t: write control failed.\n");
267 handle->
debug_print(
"rx8025t: read control failed.\n");
304 handle->
debug_print(
"rx8025t: read control failed.\n");
313 handle->
debug_print(
"rx8025t: write control failed.\n");
349 handle->
debug_print(
"rx8025t: read control failed.\n");
386 handle->
debug_print(
"rx8025t: read control failed.\n");
395 handle->
debug_print(
"rx8025t: write control failed.\n");
431 handle->
debug_print(
"rx8025t: read control failed.\n");
468 handle->
debug_print(
"rx8025t: read control failed.\n");
477 handle->
debug_print(
"rx8025t: write control failed.\n");
513 handle->
debug_print(
"rx8025t: read control failed.\n");
549 handle->
debug_print(
"rx8025t: read control failed.\n");
558 handle->
debug_print(
"rx8025t: write control failed.\n");
593 handle->
debug_print(
"rx8025t: read control failed.\n");
601 handle->
debug_print(
"rx8025t: write control failed.\n");
637 handle->
debug_print(
"rx8025t: read flag failed.\n");
674 handle->
debug_print(
"rx8025t: read extension failed.\n");
683 handle->
debug_print(
"rx8025t: write extension failed.\n");
719 handle->
debug_print(
"rx8025t: read extension failed.\n");
756 handle->
debug_print(
"rx8025t: read extension failed.\n");
765 handle->
debug_print(
"rx8025t: write extension failed.\n");
801 handle->
debug_print(
"rx8025t: read extension failed.\n");
838 handle->
debug_print(
"rx8025t: read extension failed.\n");
847 handle->
debug_print(
"rx8025t: write extension failed.\n");
883 handle->
debug_print(
"rx8025t: read extension failed.\n");
920 handle->
debug_print(
"rx8025t: read extension failed.\n");
929 handle->
debug_print(
"rx8025t: write extension failed.\n");
965 handle->
debug_print(
"rx8025t: read extension failed.\n");
1002 handle->
debug_print(
"rx8025t: read extension failed.\n");
1011 handle->
debug_print(
"rx8025t: write extension failed.\n");
1047 handle->
debug_print(
"rx8025t: read extension failed.\n");
1084 handle->
debug_print(
"rx8025t: read extension failed.\n");
1093 handle->
debug_print(
"rx8025t: write extension failed.\n");
1129 handle->
debug_print(
"rx8025t: read extension failed.\n");
1163 if (counter > 0x0FFF)
1165 handle->
debug_print(
"rx8025t: counter > 0x0FFF.\n");
1170 buf[0] = (counter >> 0) & 0xFF;
1171 buf[1] = (counter >> 8) & 0xFF;
1175 handle->
debug_print(
"rx8025t: write timer counter failed.\n");
1211 handle->
debug_print(
"rx8025t: read timer counter failed.\n");
1215 *counter = (uint16_t)(((uint16_t)buf[1]) << 8) | buf[0];
1249 handle->
debug_print(
"rx8025t: write raw failed.\n");
1285 handle->
debug_print(
"rx8025t: read raw failed.\n");
1327 if ((t->
year < 2000) || (t->
year > 2099))
1329 handle->
debug_print(
"rx8025t: year can't be over 2099 or less than 2000.\n");
1335 handle->
debug_print(
"rx8025t: month can't be zero or over than 12.\n");
1339 if ((t->
week == 0) || (t->
week > 7))
1341 handle->
debug_print(
"rx8025t: week can't be zero or over than 7.\n");
1345 if ((t->
date == 0) || (t->
date > 31))
1347 handle->
debug_print(
"rx8025t: date can't be zero or over than 31.\n");
1353 handle->
debug_print(
"rx8025t: hour can't be over than 23.\n");
1359 handle->
debug_print(
"rx8025t: minute can't be over than 59.\n");
1365 handle->
debug_print(
"rx8025t: second can't be over than 59.\n");
1373 handle->
debug_print(
"rx8025t: write second failed.\n");
1380 handle->
debug_print(
"rx8025t: write minute failed.\n");
1387 handle->
debug_print(
"rx8025t: write hour failed.\n");
1402 handle->
debug_print(
"rx8025t: write week failed.\n");
1409 handle->
debug_print(
"rx8025t: write date failed.\n");
1416 handle->
debug_print(
"rx8025t: write century and month failed.\n");
1420 year = t->
year - 2000;
1421 res = a_rx8025t_iic_write(handle,
RX8025T_REG_YEAR, a_rx8025t_hex2bcd((uint8_t)year));
1424 handle->
debug_print(
"rx8025t: write year failed.\n");
1463 memset(buf, 0,
sizeof(uint8_t) * 7);
1464 res = a_rx8025t_iic_multiple_read(handle,
RX8025T_REG_SEC, (uint8_t *)buf, 7);
1467 handle->
debug_print(
"rx8025t: multiple read failed.\n");
1471 t->
year = a_rx8025t_bcd2hex(buf[6]) + 2000;
1472 t->
month = a_rx8025t_bcd2hex(buf[5] & 0x1F);
1473 t->
week = a_week_convert(buf[3] & 0x7F);
1478 t->
date = a_rx8025t_bcd2hex(buf[4] & 0x3F);
1479 t->
hour = a_rx8025t_bcd2hex(buf[2] & 0x3F);
1480 t->
minute = a_rx8025t_bcd2hex(buf[1] & 0x7F);
1481 t->
second = a_rx8025t_bcd2hex(buf[0] & 0x7F);
1512 handle->
debug_print(
"rx8025t: minute can't be over than 59.\n");
1520 handle->
debug_print(
"rx8025t: write minute alarm failed.\n");
1556 handle->
debug_print(
"rx8025t: read minute alarm failed.\n");
1560 *minute = a_rx8025t_bcd2hex(prev & 0x7F);
1591 handle->
debug_print(
"rx8025t: hour can't be over than 23.\n");
1599 handle->
debug_print(
"rx8025t: write hour alarm failed.\n");
1635 handle->
debug_print(
"rx8025t: read hour alarm failed.\n");
1639 *hour = a_rx8025t_bcd2hex(prev & 0x3F);
1668 if ((date == 0) || (date > 31))
1670 handle->
debug_print(
"rx8025t: date can't be zero or over than 31.\n");
1678 handle->
debug_print(
"rx8025t: week day alarm failed.\n");
1714 handle->
debug_print(
"rx8025t: read day alarm failed.\n");
1718 *date = a_rx8025t_bcd2hex(prev & 0x3F);
1748 if ((week == 0) || (week > 7))
1750 handle->
debug_print(
"rx8025t: week can't be zero or over than 7.\n");
1766 handle->
debug_print(
"rx8025t: week day alarm failed.\n");
1802 handle->
debug_print(
"rx8025t: read day alarm failed.\n");
1806 *week = a_week_convert(prev & 0x7F);
1841 handle->
debug_print(
"rx8025t: write flag failed.\n");
1877 handle->
debug_print(
"rx8025t: read minute alarm failed.\n");
1882 prev |= enable << 7;
1886 handle->
debug_print(
"rx8025t: write minute alarm failed.\n");
1922 handle->
debug_print(
"rx8025t: read minute alarm failed.\n");
1959 handle->
debug_print(
"rx8025t: read hour alarm failed.\n");
1964 prev |= enable << 7;
1968 handle->
debug_print(
"rx8025t: write hour alarm failed.\n");
2004 handle->
debug_print(
"rx8025t: read hour alarm failed.\n");
2041 handle->
debug_print(
"rx8025t: read week day alarm failed.\n");
2046 prev |= enable << 7;
2050 handle->
debug_print(
"rx8025t: write week day alarm failed.\n");
2086 handle->
debug_print(
"rx8025t: read week day alarm failed.\n");
2122 handle->
debug_print(
"rx8025t: read flag failed.\n");
2129 handle->
debug_print(
"rx8025t: write flag failed.\n");
2133 if ((prev & (1 << 5)) != 0)
2140 if ((prev & (1 << 4)) != 0)
2147 if ((prev & (1 << 3)) != 0)
2154 if ((prev & (1 << 1)) != 0)
2161 if ((prev & (1 << 0)) != 0)
2194 handle->
debug_print(
"rx8025t: iic_init is null.\n");
2200 handle->
debug_print(
"rx8025t: iic_deinit is null.\n");
2206 handle->
debug_print(
"rx8025t: iic_write is null.\n");
2212 handle->
debug_print(
"rx8025t: iic_read is null.\n");
2218 handle->
debug_print(
"rx8025t: delay_ms is null.\n");
2225 handle->
debug_print(
"rx8025t: iic init failed.\n");
2257 handle->
debug_print(
"rx8025t: iic deinit failed.\n");
#define RX8025T_REG_WEEK_DAY_ALARM
#define RX8025T_REG_CONTROL
#define RX8025T_REG_MONTH
#define RX8025T_REG_TIMER_COUNTER_0
#define SUPPLY_VOLTAGE_MAX
#define RX8025T_ADDRESS
chip address definition
#define RX8025T_REG_SEC
chip register definition
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define RX8025T_REG_EXTENSION
#define RX8025T_REG_MIN_ALARM
#define RX8025T_REG_HOUR_ALARM
#define CHIP_NAME
chip information definition
driver rx8025t header file
uint8_t rx8025t_get_square_wave_frequency(rx8025t_handle_t *handle, rx8025t_square_wave_frequency_t *freq)
get square wave frequency
uint8_t rx8025t_set_time(rx8025t_handle_t *handle, rx8025t_time_t *t)
set the current time
uint8_t rx8025t_get_flag(rx8025t_handle_t *handle, uint8_t *flag)
get flag
uint8_t rx8025t_set_update_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable update interrupt
uint8_t rx8025t_set_timer_counter(rx8025t_handle_t *handle, uint16_t counter)
set timer counter
uint8_t rx8025t_stop(rx8025t_handle_t *handle)
stop
uint8_t rx8025t_info(rx8025t_info_t *info)
get chip's information
uint8_t rx8025t_get_temperature_compensation_interval(rx8025t_handle_t *handle, rx8025t_temperature_compensation_interval_t *interval)
get the temperature compensation interval
uint8_t rx8025t_set_minute_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable minute alarm mask
rx8025t_update_select_t
rx8025t update select enumeration definition
uint8_t rx8025t_get_update_select(rx8025t_handle_t *handle, rx8025t_update_select_t *select)
get update select
uint8_t rx8025t_get_minute_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get minute alarm mask status
uint8_t rx8025t_get_update_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get update interrupt status
uint8_t rx8025t_set_ram(rx8025t_handle_t *handle, uint8_t data)
set ram
uint8_t rx8025t_set_timer_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable timer interrupt
rx8025t_square_wave_frequency_t
rx8025t square wave frequency enumeration definition
uint8_t rx8025t_set_hour_alarm(rx8025t_handle_t *handle, uint8_t hour)
set hour alarm
uint8_t rx8025t_set_alarm_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable alarm interrupt
uint8_t rx8025t_start(rx8025t_handle_t *handle)
start
uint8_t rx8025t_init(rx8025t_handle_t *handle)
initialize the chip
uint8_t rx8025t_get_test(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get test status
uint8_t rx8025t_clear_flag(rx8025t_handle_t *handle)
clear flag
rx8025t_alarm_t
rx8025t alarm enumeration definition
uint8_t rx8025t_get_alarm_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get alarm interrupt status
uint8_t rx8025t_get_date_alarm(rx8025t_handle_t *handle, uint8_t *date)
get date alarm
uint8_t rx8025t_get_hour_alarm(rx8025t_handle_t *handle, uint8_t *hour)
get hour alarm
uint8_t rx8025t_set_update_select(rx8025t_handle_t *handle, rx8025t_update_select_t select)
set update select
uint8_t rx8025t_get_ram(rx8025t_handle_t *handle, uint8_t *data)
get ram
struct rx8025t_time_s rx8025t_time_t
rx8025t time structure definition
uint8_t rx8025t_get_timer_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get timer interrupt status
uint8_t rx8025t_set_week_alarm(rx8025t_handle_t *handle, uint8_t week)
set week alarm
uint8_t rx8025t_get_timer(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get timer status
uint8_t rx8025t_get_timer_counter(rx8025t_handle_t *handle, uint16_t *counter)
get timer counter
uint8_t rx8025t_set_test(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable test
uint8_t rx8025t_get_alarm_day_week(rx8025t_handle_t *handle, rx8025t_alarm_t *alarm)
get alarm day week
uint8_t rx8025t_set_hour_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable hour alarm mask
rx8025t_timer_clock_t
rx8025t timer clock enumeration definition
uint8_t rx8025t_set_timer_clock(rx8025t_handle_t *handle, rx8025t_timer_clock_t clk)
set timer clock
uint8_t rx8025t_get_time(rx8025t_handle_t *handle, rx8025t_time_t *t)
get the current time
uint8_t rx8025t_get_week_alarm(rx8025t_handle_t *handle, uint8_t *week)
get week alarm
uint8_t rx8025t_get_hour_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get hour alarm mask status
uint8_t rx8025t_set_square_wave_frequency(rx8025t_handle_t *handle, rx8025t_square_wave_frequency_t freq)
set square wave frequency
uint8_t rx8025t_set_week_day_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable week day alarm mask
uint8_t rx8025t_set_temperature_compensation_interval(rx8025t_handle_t *handle, rx8025t_temperature_compensation_interval_t interval)
set the temperature compensation interval
uint8_t rx8025t_set_alarm_day_week(rx8025t_handle_t *handle, rx8025t_alarm_t alarm)
set alarm day week
uint8_t rx8025t_irq_handler(rx8025t_handle_t *handle)
irq handler
uint8_t rx8025t_get_timer_clock(rx8025t_handle_t *handle, rx8025t_timer_clock_t *clk)
get timer clock
rx8025t_bool_t
rx8025t bool enumeration definition
uint8_t rx8025t_set_minute_alarm(rx8025t_handle_t *handle, uint8_t minute)
set minute alarm
uint8_t rx8025t_set_timer(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable timer
rx8025t_temperature_compensation_interval_t
rx8025t temperature compensation interval enumeration definition
uint8_t rx8025t_get_minute_alarm(rx8025t_handle_t *handle, uint8_t *minute)
get minute alarm
uint8_t rx8025t_get_week_day_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t *enable)
get week day alarm mask status
struct rx8025t_handle_s rx8025t_handle_t
rx8025t handle structure definition
uint8_t rx8025t_set_date_alarm(rx8025t_handle_t *handle, uint8_t date)
set date alarm
uint8_t rx8025t_deinit(rx8025t_handle_t *handle)
close the chip
struct rx8025t_info_s rx8025t_info_t
rx8025t information structure definition
@ RX8025T_STATUS_VOLTAGE_DETECTION
@ RX8025T_STATUS_VOLTAGE_LOW
uint8_t rx8025t_set_reg(rx8025t_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
set the chip register
uint8_t rx8025t_get_reg(rx8025t_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
get the chip register
void(* delay_ms)(uint32_t ms)
void(* receive_callback)(uint8_t type)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v