hal_pca8565.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #ifndef __HAL_PCA8565_H__
  2. #define __HAL_PCA8565_H__
  3. #include "hc32_ll_usart.h"
  4. #include "hc32_ll_gpio.h"
  5. #include "hc32_ll_fcg.h"
  6. #include "hc32_ll_interrupts.h"
  7. #include "hc32_ll_tmr0.h"
  8. #include "ring_buf.h"
  9. #include "hc32_ll_aos.h"
  10. /*PCF8563的写地址*/
  11. #define PCF8563_SLAVE_ADDRESS 0xA2 //读地址为写地址加1
  12. /*寄存器定义*/
  13. #define PCF8563_ADDR_CONTROL_STATUS1 0x00 //控制/状态寄存器1
  14. //寄存器位定义
  15. #define PCF8563_ADDR_CONTROL_STATUS1_TEST_DIS 0x7F //测试模式失能(and)默认
  16. #define PCF8563_ADDR_CONTROL_STATUS1_TEST_EN 0x80 //测试模式使能(or)
  17. #define PCF8563_ADDR_CONTROL_STATUS1_STOP_DIS 0xDF //RTC source clock runs(and)默认
  18. #define PCF8563_ADDR_CONTROL_STATUS1_STOP_EN 0x20 //the RTC clock is stopped(or)
  19. #define PCF8563_ADDR_CONTROL_STATUS1_POR_DIS 0xF7 //Power-On Reset (POR) override facility is disabled(and)默认
  20. #define PCF8563_ADDR_CONTROL_STATUS1_POR_EN 0x08 //Power-On Reset (POR) override may be enabled(or)
  21. /*寄存器定义*/
  22. #define PCF8563_ADDR_CONTROL_STATUS2 0x01 //控制/状态寄存器2
  23. //寄存器位定义
  24. #define PCF8563_ADDR_CONTROL_STATUS2_TI_TP_DIS 0xEF //INT is active when TF is active(and)默认
  25. #define PCF8563_ADDR_CONTROL_STATUS2_TI_TP_EN 0x10 //(or)
  26. #define PCF8563_ADDR_CONTROL_STATUS2_AF_DIS 0xF7 //read: alarm flag inactive/write: alarm flag is cleared(and)默认
  27. #define PCF8563_ADDR_CONTROL_STATUS2_AF_EN 0x08 //read: alarm flag active/write: alarm flag remains unchanged(or)
  28. #define PCF8563_ADDR_CONTROL_STATUS2_TF_DIS 0xFB //read: timer flag inactive/write: timer flag is cleared(and)默认
  29. #define PCF8563_ADDR_CONTROL_STATUS2_TF_EN 0x04 //read: timer flag active/write: timer flag remains unchanged(or)
  30. #define PCF8563_ADDR_CONTROL_STATUS2_AIE_DIS 0xFD //alarm interrupt disabled(and)默认
  31. #define PCF8563_ADDR_CONTROL_STATUS2_AIE_EN 0x02 //alarm interrupt enabled(or)
  32. #define PCF8563_ADDR_CONTROL_STATUS2_TIE_DIS 0xFE //timer interrupt disabled(and)默认
  33. #define PCF8563_ADDR_CONTROL_STATUS2_TIE_EN 0x01 //timer interrupt enabled(or)
  34. /*寄存器定义*/
  35. #define PCF8563_ADDR_CLKOUT 0x0d //CLKOUT频率寄存器
  36. //寄存器位定义
  37. #define PCF8563_ADDR_CLKOUT_FE_DIS 0xEF //the CLKOUT output output is high-impedance(and)
  38. #define PCF8563_ADDR_CLKOUT_FE_EN 0x10 //the CLKOUT output is activated(or)默认
  39. #define PCF8563_ADDR_CLKOUT_FD_00 0xFC //frequency output 32.768 kHz(and)默认
  40. //#define PCF8563_ADDR_CLKOUT_FD_01 0x01 //frequency output 1.024 kHz
  41. //#define PCF8563_ADDR_CLKOUT_FD_10 0x10 //frequency output 32 Hz
  42. #define PCF8563_ADDR_CLKOUT_FD_11 0x02 //frequency output 1 Hz(or)
  43. /*寄存器定义*/
  44. #define PCF8563_ADDR_TIMER 0x0e //定时器控制寄存器
  45. //寄存器位定义
  46. #define PCF8563_ADDR_TIMER_TE_DIS 0x7F //timer is disabled(and)默认
  47. #define PCF8563_ADDR_TIMER_TE_EN 0x80 //timer is enabled(or)
  48. #define PCF8563_ADDR_TIMER_TD_00 0xFC //timer source clock frequency 4.096 kHz(and)
  49. //#define PCF8563_ADDR_TIMER_TD_01 0x01 //timer source clock frequency 64 Hz
  50. //#define PCF8563_ADDR_TIMER_TD_10 0x10 //timer source clock frequency 1 Hz
  51. #define PCF8563_ADDR_TIMER_TD_11 0x02 //timer source clock frequency 1/64 Hz(or)
  52. /*寄存器定义*/
  53. #define PCF8563_ADDR_TIMER_VAL 0x0f //定时器倒计数寄存器
  54. #define PCF8563_ADDR_YEAR 0x08 //年
  55. #define PCF8563_ADDR_MON 0x07 //月和世纪
  56. #define PCF8563_ADDR_WEEKDAY 0x06 //星期
  57. #define PCF8563_ADDR_DATE 0x05 //日
  58. #define PCF8563_ADDR_HOUR 0x04 //小时
  59. #define PCF8563_ADDR_MIN 0x03 //分钟
  60. #define PCF8563_ADDR_SEC 0x02 //秒和VL
  61. //寄存器定义
  62. #define PCF8563_ALARM_MIN 0x09 //分钟报警
  63. //寄存器位定义
  64. #define PCF8563_ALARM_MIN_AE_M_DIS 0x7F //minute alarm is enabled(and)
  65. #define PCF8563_ALARM_MIN_AE_M_EN 0x80 //minute alarm is disabled(or)默认
  66. //寄存器定义
  67. #define PCF8563_ALARM_HOUR 0x09 //小时报警
  68. //寄存器位定义
  69. #define PCF8563_ALARM_HOUR_AE_H_DIS 0x7F //hour alarm is enabled(and)
  70. #define PCF8563_ALARM_HOUR_AE_H_EN 0x80 //hour alarm is disabled(or)默认
  71. //寄存器定义
  72. #define PCF8563_ALARM_DATE 0x09 //日报警
  73. //寄存器位定义
  74. #define PCF8563_ALARM_DATE_AE_H_DIS 0x7F //date alarm is enabled(and)
  75. #define PCF8563_ALARM_DATE_AE_H_EN 0x80 //date alarm is disabled(or)默认
  76. //寄存器定义
  77. #define PCF8563_ALARM_WEEKDAY 0x09 //星期报警
  78. //寄存器位定义
  79. #define PCF8563_ALARM_WEEKDAY_AE_H_DIS 0x7F //weekday alarm is enabled(and)
  80. #define PCF8563_ALARM_WEEKDAY_AE_H_EN 0x80 //weekday alarm is disabled(or)默认
  81. /*计算平年闰年*/
  82. #define ISLOOP(year) (((year) % 4 == 0 && (year) % 100 != 0) || ((year) %400 == 0)) ? 1 : 0
  83. /*数据结构声明*/
  84. typedef struct
  85. {
  86. uint16_t year; //年
  87. uint8_t mon; //月
  88. uint8_t date; //日
  89. uint8_t hour; //小时
  90. uint8_t min; //分
  91. uint8_t sec; //秒
  92. const char *week; //星期
  93. } rtc_time_st; //RTC时间信息
  94. /*变量和常量声明*/
  95. extern rtc_time_st rtc_time;
  96. extern const char week_day[7][10];
  97. extern const int8_t months[12];
  98. /*Pcf8563_Rtc底层驱动函数*/
  99. unsigned char DecToBCD(unsigned char _dec);
  100. unsigned char BCDToDec(unsigned char _BCD);
  101. int Days_Count(rtc_time_st *start,rtc_time_st *stop);
  102. /*Pcf8563_Rtc用户接口函数*/
  103. void LogRtcTime(rtc_time_st *rtc_time);
  104. void rtc_init(void);
  105. void Get_Pcf8563_Rtc_Time(rtc_time_st *rtc_time);
  106. void Set_Pcf8563_Rtc_Time(uint16_t year,uint8_t mon,uint8_t date,uint8_t hour,uint8_t min,uint8_t sec,uint8_t week);
  107. void pca8565_task(void *argv);
  108. #endif