gd32f3x0_rtc.h 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. /*!
  2. \file gd32f3x0_rtc.h
  3. \brief definitions for the RTC
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-06-06, V1.0.0, firmware for GD32F3x0
  8. */
  9. #ifndef GD32F3X0_RTC_H
  10. #define GD32F3X0_RTC_H
  11. #include "gd32f3x0.h"
  12. /* RTC definitions */
  13. #define RTC RTC_BASE
  14. /* registers definitions */
  15. #define RTC_TIME REG32((RTC) + 0x00U) /*!< RTC time of day register */
  16. #define RTC_DATE REG32((RTC) + 0x04U) /*!< RTC date register */
  17. #define RTC_CTL REG32((RTC) + 0x08U) /*!< RTC control register */
  18. #define RTC_STAT REG32((RTC) + 0x0CU) /*!< RTC status register */
  19. #define RTC_PSC REG32((RTC) + 0x10U) /*!< RTC time prescaler register */
  20. #define RTC_ALRM0TD REG32((RTC) + 0x1CU) /*!< RTC alarm 0 time and date register */
  21. #define RTC_WPK REG32((RTC) + 0x24U) /*!< RTC write protection key register */
  22. #define RTC_SS REG32((RTC) + 0x28U) /*!< RTC sub second register */
  23. #define RTC_SHIFTCTL REG32((RTC) + 0x2CU) /*!< RTC shift function control register */
  24. #define RTC_TTS REG32((RTC) + 0x30U) /*!< RTC time of timestamp register */
  25. #define RTC_DTS REG32((RTC) + 0x34U) /*!< RTC date of timestamp register */
  26. #define RTC_SSTS REG32((RTC) + 0x38U) /*!< RTC sub second of timestamp register */
  27. #define RTC_HRFC REG32((RTC) + 0x3CU) /*!< RTC high resolution frequency compensation registor */
  28. #define RTC_TAMP REG32((RTC) + 0x40U) /*!< RTC tamper register */
  29. #define RTC_ALRM0SS REG32((RTC) + 0x44U) /*!< RTC alarm 0 sub second register */
  30. #define RTC_BKP0 REG32((RTC) + 0x50U) /*!< RTC backup 0 register */
  31. #define RTC_BKP1 REG32((RTC) + 0x54U) /*!< RTC backup 1 register */
  32. #define RTC_BKP2 REG32((RTC) + 0x58U) /*!< RTC backup 2 register */
  33. #define RTC_BKP3 REG32((RTC) + 0x5CU) /*!< RTC backup 3 register */
  34. #define RTC_BKP4 REG32((RTC) + 0x60U) /*!< RTC backup 4 register */
  35. /* bits definitions */
  36. /* RTC_TIME */
  37. #define RTC_TIME_SCU BITS(0,3) /*!< second units in BCD code */
  38. #define RTC_TIME_SCT BITS(4,6) /*!< second tens in BCD code */
  39. #define RTC_TIME_MNU BITS(8,11) /*!< minute units in BCD code */
  40. #define RTC_TIME_MNT BITS(12,14) /*!< minute tens in BCD code */
  41. #define RTC_TIME_HRU BITS(16,19) /*!< hour units in BCD code */
  42. #define RTC_TIME_HRT BITS(20,21) /*!< hour tens in BCD code */
  43. #define RTC_TIME_PM BIT(22) /*!< AM/PM notation */
  44. /* RTC_DATE */
  45. #define RTC_DATE_DAYU BITS(0,3) /*!< date units in BCD code */
  46. #define RTC_DATE_DAYT BITS(4,5) /*!< date tens in BCD code */
  47. #define RTC_DATE_MONU BITS(8,11) /*!< month units in BCD code */
  48. #define RTC_DATE_MONT BIT(12) /*!< month tens in BCD code */
  49. #define RTC_DATE_DOW BITS(13,15) /*!< day of week units */
  50. #define RTC_DATE_YRU BITS(16,19) /*!< year units in BCD code */
  51. #define RTC_DATE_YRT BITS(20,23) /*!< year tens in BCD code */
  52. /* RTC_CTL */
  53. #define RTC_CTL_TSEG BIT(3) /*!< valid event edge of time-stamp */
  54. #define RTC_CTL_REFEN BIT(4) /*!< reference clock detection function enable */
  55. #define RTC_CTL_BPSHAD BIT(5) /*!< shadow registers bypass control */
  56. #define RTC_CTL_CS BIT(6) /*!< display format of clock system */
  57. #define RTC_CTL_ALRM0EN BIT(8) /*!< alarm function enable */
  58. #define RTC_CTL_TSEN BIT(11) /*!< time-stamp function enable */
  59. #define RTC_CTL_ALRM0IE BIT(12) /*!< RTC alarm interrupt enable */
  60. #define RTC_CTL_TSIE BIT(15) /*!< time-stamp interrupt enable */
  61. #define RTC_CTL_A1H BIT(16) /*!< add 1 hour(summer time change) */
  62. #define RTC_CTL_S1H BIT(17) /*!< subtract 1 hour(winter time change) */
  63. #define RTC_CTL_DSM BIT(18) /*!< daylight saving mark */
  64. #define RTC_CTL_COS BIT(19) /*!< calibration output selection */
  65. #define RTC_CTL_OPOL BIT(20) /*!< output polarity */
  66. #define RTC_CTL_OS BITS(21,22) /*!< output selection */
  67. #define RTC_CTL_COEN BIT(23) /*!< calibration output enable */
  68. /* RTC_STAT */
  69. #define RTC_STAT_ALRM0WF BIT(0) /*!< alarm configuration can be write flag */
  70. #define RTC_STAT_SOPF BIT(3) /*!< shift function operation pending flag */
  71. #define RTC_STAT_YCM BIT(4) /*!< year configuration mark status flag */
  72. #define RTC_STAT_RSYNF BIT(5) /*!< register synchronization flag */
  73. #define RTC_STAT_INITF BIT(6) /*!< initialization state flag */
  74. #define RTC_STAT_INITM BIT(7) /*!< enter initialization mode */
  75. #define RTC_STAT_ALRM0F BIT(8) /*!< alarm occurs flag */
  76. #define RTC_STAT_TSF BIT(11) /*!< time-stamp flag */
  77. #define RTC_STAT_TSOVRF BIT(12) /*!< time-stamp overflow flag */
  78. #define RTC_STAT_TP0F BIT(13) /*!< RTC tamp 0 detected flag */
  79. #define RTC_STAT_TP1F BIT(14) /*!< RTC tamp 1 detected flag */
  80. #define RTC_STAT_SCPF BIT(16) /*!< recalibration pending flag */
  81. /* RTC_PSC */
  82. #define RTC_PSC_FACTOR_S BITS(0,14) /*!< synchronous prescaler factor */
  83. #define RTC_PSC_FACTOR_A BITS(16,22) /*!< asynchronous prescaler factor */
  84. /* RTC_ALRM0TD */
  85. #define RTC_ALRM0TD_SCU BITS(0,3) /*!< second units in BCD code */
  86. #define RTC_ALRM0TD_SCT BITS(4,6) /*!< second tens in BCD code */
  87. #define RTC_ALRM0TD_MSKS BIT(7) /*!< alarm second mask bit */
  88. #define RTC_ALRM0TD_MNU BITS(8,11) /*!< minutes units in BCD code */
  89. #define RTC_ALRM0TD_MNT BITS(12,14) /*!< minutes tens in BCD code */
  90. #define RTC_ALRM0TD_MSKM BIT(15) /*!< alarm minutes mask bit */
  91. #define RTC_ALRM0TD_HRU BITS(16,19) /*!< hour units in BCD code */
  92. #define RTC_ALRM0TD_HRT BITS(20,21) /*!< hour units in BCD code */
  93. #define RTC_ALRM0TD_PM BIT(22) /*!< AM/PM flag */
  94. #define RTC_ALRM0TD_MSKH BIT(23) /*!< alarm hour mask bit */
  95. #define RTC_ALRM0TD_DAYU BITS(24,27) /*!< date units or week day in BCD code */
  96. #define RTC_ALRM0TD_DAYT BITS(28,29) /*!< date tens in BCD code */
  97. #define RTC_ALRM0TD_DOWS BIT(30) /*!< day of week selection */
  98. #define RTC_ALRM0TD_MSKD BIT(31) /*!< alarm date mask bit */
  99. /* RTC_WPK */
  100. #define RTC_WPK_WPK BITS(0,7) /*!< key for write protection */
  101. /* RTC_SS */
  102. #define RTC_SS_SSC BITS(0,15) /*!< sub second value */
  103. /* RTC_SHIFTCTL */
  104. #define RTC_SHIFTCTL_SFS BITS(0,14) /*!< subtract a fraction of a second */
  105. #define RTC_SHIFTCTL_A1S BIT(31) /*!< one second add */
  106. /* RTC_TTS */
  107. #define RTC_TTS_SCU BITS(0,3) /*!< second units in BCD code */
  108. #define RTC_TTS_SCT BITS(4,6) /*!< second units in BCD code */
  109. #define RTC_TTS_MNU BITS(8,11) /*!< minute units in BCD code */
  110. #define RTC_TTS_MNT BITS(12,14) /*!< minute tens in BCD code */
  111. #define RTC_TTS_HRU BITS(16,19) /*!< hour units in BCD code */
  112. #define RTC_TTS_HRT BITS(20,21) /*!< hour tens in BCD code */
  113. #define RTC_TTS_PM BIT(22) /*!< AM/PM notation */
  114. /* RTC_DTS */
  115. #define RTC_DTS_DAYU BITS(0,3) /*!< date units in BCD code */
  116. #define RTC_DTS_DAYT BITS(4,5) /*!< date tens in BCD code */
  117. #define RTC_DTS_MONU BITS(8,11) /*!< month units in BCD code */
  118. #define RTC_DTS_MONT BIT(12) /*!< month tens in BCD code */
  119. #define RTC_DTS_DOW BITS(13,15) /*!< day of week units */
  120. /* RTC_SSTS */
  121. #define RTC_SSTS_SSC BITS(0,15) /*!< timestamp sub second units */
  122. /* RTC_HRFC */
  123. #define RTC_HRFC_CMSK BITS(0,8) /*!< calibration mask number */
  124. #define RTC_HRFC_CWND16 BIT(13) /*!< calibration window select 16 seconds */
  125. #define RTC_HRFC_CWND8 BIT(14) /*!< calibration window select 16 seconds */
  126. #define RTC_HRFC_FREQI BIT(15) /*!< increase RTC frequency by 488.5ppm */
  127. /* RTC_TAMP */
  128. #define RTC_TAMP_TP0EN BIT(0) /*!< tamper 0 detection enable */
  129. #define RTC_TAMP_TP0EG BIT(1) /*!< tamper 0 event trigger edge for RTC tamp 0 input */
  130. #define RTC_TAMP_TPIE BIT(2) /*!< tamper detection interrupt enable */
  131. #define RTC_TAMP_TP1EN BIT(3) /*!< tamper 1 detection enable */
  132. #define RTC_TAMP_TP1EG BIT(4) /*!< tamper 1 event trigger edge for RTC tamp 1 input */
  133. #define RTC_TAMP_TPTS BIT(7) /*!< make tamper function used for timestamp function */
  134. #define RTC_TAMP_FREQ BITS(8,10) /*!< sample frequency of tamper event detection */
  135. #define RTC_TAMP_FLT BITS(11,12) /*!< RTC tamp x filter count setting */
  136. #define RTC_TAMP_PRCH BITS(13,14) /*!< precharge duration time of RTC tamp x */
  137. #define RTC_TAMP_DISPU BIT(15) /*!< RTC tamp x pull up disable bit */
  138. #define RTC_TAMP_PC13VAL BIT(18) /*!< alarm output type control/PC13 output value */
  139. #define RTC_TAMP_PC13MDE BIT(19) /*!< PC13 mode */
  140. #define RTC_TAMP_PC14VAL BIT(20) /*!< PC14 output value */
  141. #define RTC_TAMP_PC14MDE BIT(21) /*!< PC14 mode */
  142. #define RTC_TAMP_PC15VAL BIT(22) /*!< PC15 output value */
  143. #define RTC_TAMP_PC15MDE BIT(23) /*!< PC15 mode */
  144. /* RTC_ALRM0SS */
  145. #define RTC_ALRM0SS_SSC BITS(0,14) /*!< alarm sub second value */
  146. #define RTC_ALRM0SS_MASKSSC BITS(24,27) /*!< mask control bit of SS */
  147. /* RTC_BKP0 */
  148. #define RTC_BKP0_DATA BITS(0,31) /*!< backup domain registers */
  149. /* RTC_BKP1 */
  150. #define RTC_BKP1_DATA BITS(0,31) /*!< backup domain registers */
  151. /* RTC_BKP2 */
  152. #define RTC_BKP2_DATA BITS(0,31) /*!< backup domain registers */
  153. /* RTC_BKP3 */
  154. #define RTC_BKP3_DATA BITS(0,31) /*!< backup domain registers */
  155. /* RTC_BKP4 */
  156. #define RTC_BKP4_DATA BITS(0,31) /*!< backup domain registers */
  157. /* constants definitions */
  158. /* structure for initialization of the RTC */
  159. typedef struct
  160. {
  161. uint8_t rtc_year; /*!< RTC year value: 0x0 - 0x99(BCD format) */
  162. uint8_t rtc_month; /*!< RTC month value */
  163. uint8_t rtc_date; /*!< RTC date value: 0x1 - 0x31(BCD format) */
  164. uint8_t rtc_day_of_week; /*!< RTC weekday value */
  165. uint8_t rtc_hour; /*!< RTC hour value */
  166. uint8_t rtc_minute; /*!< RTC minute value: 0x0 - 0x59(BCD format) */
  167. uint8_t rtc_second; /*!< RTC second value: 0x0 - 0x59(BCD format) */
  168. uint16_t rtc_factor_asyn; /*!< RTC asynchronous prescaler value: 0x0 - 0x7F */
  169. uint16_t rtc_factor_syn; /*!< RTC synchronous prescaler value: 0x0 - 0x7FFF */
  170. uint32_t rtc_am_pm; /*!< RTC AM/PM value */
  171. uint32_t rtc_display_format; /*!< RTC time notation */
  172. }rtc_parameter_struct;
  173. /* structure for RTC alarm configuration */
  174. typedef struct
  175. {
  176. uint32_t rtc_alarm_mask; /*!< RTC alarm mask */
  177. uint32_t rtc_weekday_or_date; /*!< specify RTC alarm is on date or weekday */
  178. uint8_t rtc_alarm_day; /*!< RTC alarm date or weekday value*/
  179. uint8_t rtc_alarm_hour; /*!< RTC alarm hour value */
  180. uint8_t rtc_alarm_minute; /*!< RTC alarm minute value: 0x0 - 0x59(BCD format) */
  181. uint8_t rtc_alarm_second; /*!< RTC alarm second value: 0x0 - 0x59(BCD format) */
  182. uint32_t rtc_am_pm; /*!< RTC alarm AM/PM value */
  183. }rtc_alarm_struct;
  184. /* structure for RTC time-stamp configuration */
  185. typedef struct
  186. {
  187. uint8_t rtc_timestamp_month; /*!< RTC time-stamp month value */
  188. uint8_t rtc_timestamp_date; /*!< RTC time-stamp date value: 0x1 - 0x31(BCD format) */
  189. uint8_t rtc_timestamp_day; /*!< RTC time-stamp weekday value */
  190. uint8_t rtc_timestamp_hour; /*!< RTC time-stamp hour value */
  191. uint8_t rtc_timestamp_minute; /*!< RTC time-stamp minute value: 0x0 - 0x59(BCD format) */
  192. uint8_t rtc_timestamp_second; /*!< RTC time-stamp second value: 0x0 - 0x59(BCD format) */
  193. uint32_t rtc_am_pm; /*!< RTC time-stamp AM/PM value */
  194. }rtc_timestamp_struct;
  195. /* structure for RTC tamper configuration */
  196. typedef struct
  197. {
  198. uint32_t rtc_tamper_source; /*!< RTC tamper source */
  199. uint32_t rtc_tamper_trigger; /*!< RTC tamper trigger */
  200. uint32_t rtc_tamper_filter; /*!< RTC tamper consecutive samples needed during a voltage level detection */
  201. uint32_t rtc_tamper_sample_frequency; /*!< RTC tamper sampling frequency during a voltage level detection */
  202. ControlStatus rtc_tamper_precharge_enable; /*!< RTC tamper precharge feature during a voltage level detection */
  203. uint32_t rtc_tamper_precharge_time; /*!< RTC tamper precharge duration if precharge feature is enabled */
  204. ControlStatus rtc_tamper_with_timestamp; /*!< RTC tamper time-stamp feature */
  205. }rtc_tamper_struct;
  206. /* time register value */
  207. #define TIME_SC(regval) (BITS(0,6) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_TIME_SC bit field */
  208. #define GET_TIME_SC(regval) GET_BITS((regval),0,6) /*!< get value of RTC_TIME_SC bit field */
  209. #define TIME_MN(regval) (BITS(8,14) & ((uint32_t)(regval) << 8U)) /*!< write value to RTC_TIME_MN bit field */
  210. #define GET_TIME_MN(regval) GET_BITS((regval),8,14) /*!< get value of RTC_TIME_MN bit field */
  211. #define TIME_HR(regval) (BITS(16,21) & ((uint32_t)(regval) << 16U)) /*!< write value to RTC_TIME_HR bit field */
  212. #define GET_TIME_HR(regval) GET_BITS((regval),16,21) /*!< get value of RTC_TIME_HR bit field */
  213. #define RTC_AM ((uint32_t)0x00000000U) /*!< AM format */
  214. #define RTC_PM RTC_TIME_PM /*!< PM format */
  215. /* date register value */
  216. #define DATE_DAY(regval) (BITS(0,5) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_DATE_DAY bit field */
  217. #define GET_DATE_DAY(regval) GET_BITS((regval),0,5) /*!< get value of RTC_DATE_DAY bit field */
  218. #define DATE_MON(regval) (BITS(8,12) & ((uint32_t)(regval) << 8U)) /*!< write value to RTC_DATE_MON bit field */
  219. #define GET_DATE_MON(regval) GET_BITS((regval),8,12) /*!< get value of RTC_DATE_MON bit field */
  220. #define RTC_JAN ((uint8_t)0x01U) /*!< Janurary */
  221. #define RTC_FEB ((uint8_t)0x02U) /*!< February */
  222. #define RTC_MAR ((uint8_t)0x03U) /*!< March */
  223. #define RTC_APR ((uint8_t)0x04U) /*!< April */
  224. #define RTC_MAY ((uint8_t)0x05U) /*!< May */
  225. #define RTC_JUN ((uint8_t)0x06U) /*!< June */
  226. #define RTC_JUL ((uint8_t)0x07U) /*!< July */
  227. #define RTC_AUG ((uint8_t)0x08U) /*!< August */
  228. #define RTC_SEP ((uint8_t)0x09U) /*!< September */
  229. #define RTC_OCT ((uint8_t)0x10U) /*!< October */
  230. #define RTC_NOV ((uint8_t)0x11U) /*!< November */
  231. #define RTC_DEC ((uint8_t)0x12U) /*!< December */
  232. #define DATE_DOW(regval) (BITS(13,15) & ((uint32_t)(regval) << 13U)) /*!< write value to RTC_DATE_DOW bit field */
  233. #define GET_DATE_DOW(regval) GET_BITS((regval),13,15) /*!< get value of RTC_DATE_DOW bit field */
  234. #define RTC_MONDAY ((uint8_t)0x01U) /*!< Monday */
  235. #define RTC_TUESDAY ((uint8_t)0x02U) /*!< Tuesday */
  236. #define RTC_WEDSDAY ((uint8_t)0x03U) /*!< Wednesday */
  237. #define RTC_THURSDAY ((uint8_t)0x04U) /*!< Thursday */
  238. #define RTC_FRIDAY ((uint8_t)0x05U) /*!< Friday */
  239. #define RTC_SATURDAY ((uint8_t)0x06U) /*!< Saturday */
  240. #define RTC_SUNDAY ((uint8_t)0x07U) /*!< Sunday */
  241. #define DATE_YR(regval) (BITS(16,23) & ((uint32_t)(regval) << 16U)) /*!< write value to RTC_DATE_YR bit field */
  242. #define GET_DATE_YR(regval) GET_BITS((regval),16,23) /*!< get value of RTC_DATE_YR bit field */
  243. /* ctl register value */
  244. #define CTL_OS(regval) (BITS(21,22) & ((uint32_t)(regval) << 21U)) /*!< write value to RTC_CTL_OS bit field */
  245. #define RTC_OS_DISABLE CTL_OS(0) /*!< disable output RTC_ALARM */
  246. #define RTC_OS_ENABLE CTL_OS(1) /*!< enable alarm flag output */
  247. #define RTC_CALIBRATION_512HZ RTC_CTL_COEN /*!< calibration output of 512Hz is enable */
  248. #define RTC_CALIBRATION_1HZ RTC_CTL_COEN | RTC_CTL_COS /*!< calibration output of 1Hz is enable */
  249. #define RTC_ALARM_HIGH RTC_CTL_OS_ENABLE /*!< enable alarm flag output with high level */
  250. #define RTC_ALARM_LOW RTC_CTL_OS_ENABLE | RTC_CTL_OPOL /*!< enable alarm flag output with low level*/
  251. #define RTC_24HOUR ((uint32_t)0x00000000U) /*!< 24-hour format */
  252. #define RTC_12HOUR RTC_CTL_CS /*!< 12-hour format */
  253. #define RTC_TIMESTAMP_RISING_EDGE ((uint32_t)0x00000000U) /*!< rising edge is valid event edge for time-stamp event */
  254. #define RTC_TIMESTAMP_FALLING_EDGE RTC_CTL_TSEG /*!< falling edge is valid event edge for time-stamp event */
  255. /* psc register value */
  256. #define PSC_FACTOR_S(regval) (BITS(0,14) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_PSC_FACTOR_S bit field */
  257. #define GET_PSC_FACTOR_S(regval) GET_BITS((regval),0,14) /*!< get value of RTC_PSC_FACTOR_S bit field */
  258. #define PSC_FACTOR_A(regval) (BITS(16,22) & ((uint32_t)(regval) << 16U)) /*!< write value to RTC_PSC_FACTOR_A bit field */
  259. #define GET_PSC_FACTOR_A(regval) GET_BITS((regval),16,22) /*!< get value of RTC_PSC_FACTOR_A bit field */
  260. /* alrm0td register value */
  261. #define ALRM0TD_SC(regval) (BITS(0,6) & ((uint32_t)(regval)<< 0U)) /*!< write value to RTC_ALRM0TD_SC bit field */
  262. #define GET_ALRM0TD_SC(regval) GET_BITS((regval),0,6) /*!< get value of RTC_ALRM0TD_SC bit field */
  263. #define ALRM0TD_MN(regval) (BITS(8,14) & ((uint32_t)(regval) << 8U)) /*!< write value to RTC_ALRM0TD_MN bit field */
  264. #define GET_ALRM0TD_MN(regval) GET_BITS((regval),8,14) /*!< get value of RTC_ALRM0TD_MN bit field */
  265. #define ALRM0TD_HR(regval) (BITS(16,21) & ((uint32_t)(regval) << 16U)) /*!< write value to RTC_ALRM0TD_HR bit field */
  266. #define GET_ALRM0TD_HR(regval) GET_BITS((regval),16,21) /*!< get value of RTC_ALRM0TD_HR bit field */
  267. #define ALRM0TD_DAY(regval) (BITS(24,29) & ((uint32_t)(regval) << 24U)) /*!< write value to RTC_ALRM0TD_DAY bit field */
  268. #define GET_ALRM0TD_DAY(regval) GET_BITS((regval),24,29) /*!< get value of RTC_ALRM0TD_DAY bit field */
  269. #define RTC_ALARM_NONE_MASK ((uint32_t)0x00000000U) /*!< alarm none mask */
  270. #define RTC_ALARM_DATE_MASK RTC_ALRM0TD_MSKD /*!< alarm date mask */
  271. #define RTC_ALARM_HOUR_MASK RTC_ALRM0TD_MSKH /*!< alarm hour mask */
  272. #define RTC_ALARM_MINUTE_MASK RTC_ALRM0TD_MSKM /*!< alarm minute mask */
  273. #define RTC_ALARM_SECOND_MASK RTC_ALRM0TD_MSKS /*!< alarm second mask */
  274. #define RTC_ALARM_ALL_MASK (RTC_ALRM0TD_MSKD|RTC_ALRM0TD_MSKH|RTC_ALRM0TD_MSKM|RTC_ALRM0TD_MSKS) /*!< alarm all mask */
  275. #define RTC_ALARM_DATE_SELECTED ((uint32_t)0x00000000U) /*!< alarm date format selected */
  276. #define RTC_ALARM_WEEKDAY_SELECTED RTC_ALRM0TD_DOWS /*!< alarm weekday format selected */
  277. /* wpk register value */
  278. #define WPK_WPK(regval) (BITS(0,7) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_WPK_WPK bit field */
  279. /* ss register value */
  280. #define SS_SSC(regval) (BITS(0,15) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_SS_SSC bit field */
  281. /* shiftctl register value */
  282. #define SHIFTCTL_SFS(regval) (BITS(0,14) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_SHIFTCTL_SFS bit field */
  283. #define RTC_SHIFT_ADD1S_RESET ((uint32_t)0x00000000U) /*!< not add 1 second */
  284. #define RTC_SHIFT_ADD1S_SET RTC_SHIFTCTL_A1S /*!< add one second to the clock */
  285. /* tts register value */
  286. #define TTS_SC(regval) (BITS(0,6) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_TTS_SC bit field */
  287. #define GET_TTS_SC(regval) GET_BITS((regval),0,6) /*!< get value of RTC_TTS_SC bit field */
  288. #define TTS_MN(regval) (BITS(8,14) & ((uint32_t)(regval) << 8U)) /*!< write value to RTC_TTS_MN bit field */
  289. #define GET_TTS_MN(regval) GET_BITS((regval),8,14) /*!< get value of RTC_TTS_MN bit field */
  290. #define TTS_HR(regval) (BITS(16,21) & ((uint32_t)(regval) << 16U)) /*!< write value to RTC_TTS_HR bit field */
  291. #define GET_TTS_HR(regval) GET_BITS((regval),16,21) /*!< get value of RTC_TTS_HR bit field */
  292. /* dts register value */
  293. #define DTS_DAY(regval) (BITS(0,5) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_DTS_DAY bit field */
  294. #define GET_DTS_DAY(regval) GET_BITS((regval),0,5) /*!< get value of RTC_DTS_DAY bit field */
  295. #define DTS_MON(regval) (BITS(8,12) & ((uint32_t)(regval) << 8U)) /*!< write value to RTC_DTS_MON bit field */
  296. #define GET_DTS_MON(regval) GET_BITS((regval),8,11) /*!< get value of RTC_DTS_MON bit field */
  297. #define DTS_DOW(regval) (BITS(13,15) & ((uint32_t)(regval) << 13U)) /*!< write value to RTC_DTS_DOW bit field */
  298. #define GET_DTS_DOW(regval) GET_BITS((regval),13,15) /*!< get value of RTC_DTS_DOW bit field */
  299. /* ssts register value */
  300. #define SSTS_SSC(regval) (BITS(0,15) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_SSTS_SSC bit field */
  301. /* hrfc register value */
  302. #define HRFC_CMSK(regval) (BITS(0,8) & ((uint32_t)(regval) << 0U)) /*!< write value to RTC_HRFC_CMSK bit field */
  303. #define RTC_CALIBRATION_WINDOW_32S ((uint32_t)0x00000000U) /*!< 2exp20 RTCCLK cycles, 32s if RTCCLK = 32768 Hz */
  304. #define RTC_CALIBRATION_WINDOW_16S RTC_HRFC_CWND16 /*!< 2exp19 RTCCLK cycles, 16s if RTCCLK = 32768 Hz */
  305. #define RTC_CALIBRATION_WINDOW_8S RTC_HRFC_CWND8 /*!< 2exp18 RTCCLK cycles, 8s if RTCCLK = 32768 Hz */
  306. #define RTC_CALIBRATION_PLUS_SET RTC_HRFC_FREQI /*!< increase RTC frequency by 488.5ppm */
  307. #define RTC_CALIBRATION_PLUS_RESET ((uint32_t)0x00000000U) /*!< no effect */
  308. /* tamp register value */
  309. #define TAMP_FREQ(regval) (BITS(8,10) & ((uint32_t)(regval) << 8U)) /*!< write value to RTC_TAMP_FREQ bit field */
  310. #define RTC_FREQ_DIV32768 TAMP_FREQ(0) /*!< sample once every 32768 RTCCLK(1Hz if RTCCLK=32.768KHz) */
  311. #define RTC_FREQ_DIV16384 TAMP_FREQ(1) /*!< sample once every 16384 RTCCLK(2Hz if RTCCLK=32.768KHz) */
  312. #define RTC_FREQ_DIV8192 TAMP_FREQ(2) /*!< sample once every 8192 RTCCLK(4Hz if RTCCLK=32.768KHz) */
  313. #define RTC_FREQ_DIV4096 TAMP_FREQ(3) /*!< sample once every 4096 RTCCLK(8Hz if RTCCLK=32.768KHz) */
  314. #define RTC_FREQ_DIV2048 TAMP_FREQ(4) /*!< sample once every 2048 RTCCLK(16Hz if RTCCLK=32.768KHz) */
  315. #define RTC_FREQ_DIV1024 TAMP_FREQ(5) /*!< sample once every 1024 RTCCLK(32Hz if RTCCLK=32.768KHz) */
  316. #define RTC_FREQ_DIV512 TAMP_FREQ(6) /*!< sample once every 512 RTCCLK(64Hz if RTCCLK=32.768KHz) */
  317. #define RTC_FREQ_DIV256 TAMP_FREQ(7) /*!< sample once every 256 RTCCLK(128Hz if RTCCLK=32.768KHz) */
  318. #define TAMP_FLT(regval) (BITS(11,12) & ((uint32_t)(regval) << 11U)) /*!< write value to RTC_TAMP_FLT bit field */
  319. #define RTC_FLT_EDGE TAMP_FLT(0) /*!< detecting tamper event using edge mode. precharge duration is disabled automatically */
  320. #define RTC_FLT_2S TAMP_FLT(1) /*!< detecting tamper event using level mode.2 consecutive valid level samples will make a effective tamper event */
  321. #define RTC_FLT_4S TAMP_FLT(2) /*!< detecting tamper event using level mode.4 consecutive valid level samples will make an effective tamper event */
  322. #define RTC_FLT_8S TAMP_FLT(3) /*!< detecting tamper event using level mode.8 consecutive valid level samples will make a effective tamper event */
  323. #define TAMP_PRCH(regval) (BITS(13,14) & ((uint32_t)(regval) << 13U)) /*!< write value to RTC_TAMP_PRCH bit field */
  324. #define RTC_PRCH_1C TAMP_PRCH(0) /*!< 1 RTC clock prechagre time before each sampling */
  325. #define RTC_PRCH_2C TAMP_PRCH(1) /*!< 2 RTC clock prechagre time before each sampling */
  326. #define RTC_PRCH_4C TAMP_PRCH(2) /*!< 4 RTC clock prechagre time before each sampling */
  327. #define RTC_PRCH_8C TAMP_PRCH(3) /*!< 8 RTC clock prechagre time before each sampling */
  328. #define RTC_TAMPER0 RTC_TAMP_TP0EN /*!< tamper 0 detection enable */
  329. #define RTC_TAMPER1 RTC_TAMP_TP1EN /*!< tamper 1 detection enable */
  330. #define RTC_TAMPER_TRIGGER_EDGE_RISING ((uint32_t)0x00000000U) /*!< tamper detection is in rising edge mode */
  331. #define RTC_TAMPER_TRIGGER_EDGE_FALLING RTC_TAMP_TP0EG /*!< tamper detection is in falling edge mode */
  332. #define RTC_TAMPER_TRIGGER_LEVEL_LOW ((uint32_t)0x00000000U) /*!< tamper detection is in low level mode */
  333. #define RTC_TAMPER_TRIGGER_LEVEL_HIGH RTC_TAMP_TP0EG /*!< tamper detection is in high level mode */
  334. #define RTC_TAMPER_TRIGGER_POS ((uint32_t)0x00000001U) /* shift position of trigger relative to source */
  335. #define RTC_ALARM_OUTPUT_OD ((uint32_t)0x00000000U) /*!< RTC alarm output open-drain mode */
  336. #define RTC_ALARM_OUTPUT_PP RTC_TAMP_PC13VAL /*!< RTC alarm output push-pull mode */
  337. /* alrm0ss register value */
  338. #define ALRM0SS_SSC(regval) (BITS(0,14) & ((uint32_t)(regval)<< 0U)) /*!< write value to RTC_ALRM0SS_SSC bit field */
  339. #define ALRM0SS_MASKSSC(regval) (BITS(24,27) & ((uint32_t)(regval) << 24U)) /*!< write value to RTC_ALRM0SS_MASKSSC bit field */
  340. #define RTC_MASKSSC_0_14 ALRM0SS_MASKSSC(0) /*!< mask alarm subsecond configuration */
  341. #define RTC_MASKSSC_1_14 ALRM0SS_MASKSSC(1) /*!< mask RTC_ALRM0SS_SSC[14:1], and RTC_ALRM0SS_SSC[0] is to be compared */
  342. #define RTC_MASKSSC_2_14 ALRM0SS_MASKSSC(2) /*!< mask RTC_ALRM0SS_SSC[14:2], and RTC_ALRM0SS_SSC[1:0] is to be compared */
  343. #define RTC_MASKSSC_3_14 ALRM0SS_MASKSSC(3) /*!< mask RTC_ALRM0SS_SSC[14:3], and RTC_ALRM0SS_SSC[2:0] is to be compared */
  344. #define RTC_MASKSSC_4_14 ALRM0SS_MASKSSC(4) /*!< mask RTC_ALRM0SS_SSC[14:4], and RTC_ALRM0SS_SSC[3:0] is to be compared */
  345. #define RTC_MASKSSC_5_14 ALRM0SS_MASKSSC(5) /*!< mask RTC_ALRM0SS_SSC[14:5], and RTC_ALRM0SS_SSC[4:0] is to be compared */
  346. #define RTC_MASKSSC_6_14 ALRM0SS_MASKSSC(6) /*!< mask RTC_ALRM0SS_SSC[14:6], and RTC_ALRM0SS_SSC[5:0] is to be compared */
  347. #define RTC_MASKSSC_7_14 ALRM0SS_MASKSSC(7) /*!< mask RTC_ALRM0SS_SSC[14:7], and RTC_ALRM0SS_SSC[6:0] is to be compared */
  348. #define RTC_MASKSSC_8_14 ALRM0SS_MASKSSC(8) /*!< mask RTC_ALRM0SS_SSC[14:8], and RTC_ALRM0SS_SSC[7:0] is to be compared */
  349. #define RTC_MASKSSC_9_14 ALRM0SS_MASKSSC(9) /*!< mask RTC_ALRM0SS_SSC[14:9], and RTC_ALRM0SS_SSC[8:0] is to be compared */
  350. #define RTC_MASKSSC_10_14 ALRM0SS_MASKSSC(10) /*!< mask RTC_ALRM0SS_SSC[14:10], and RTC_ALRM0SS_SSC[9:0] is to be compared */
  351. #define RTC_MASKSSC_11_14 ALRM0SS_MASKSSC(11) /*!< mask RTC_ALRM0SS_SSC[14:11], and RTC_ALRM0SS_SSC[10:0] is to be compared */
  352. #define RTC_MASKSSC_12_14 ALRM0SS_MASKSSC(12) /*!< mask RTC_ALRM0SS_SSC[14:12], and RTC_ALRM0SS_SSC[11:0] is to be compared */
  353. #define RTC_MASKSSC_13_14 ALRM0SS_MASKSSC(13) /*!< mask RTC_ALRM0SS_SSC[14:13], and RTC_ALRM0SS_SSC[12:0] is to be compared */
  354. #define RTC_MASKSSC_14 ALRM0SS_MASKSSC(14) /*!< mask RTC_ALRM0SS_SSC[14], and RTC_ALRM0SS_SSC[13:0] is to be compared */
  355. #define RTC_MASKSSC_NONE ALRM0SS_MASKSSC(15) /*!< mask none, and RTC_ALRM0SS_SSC[14:0] is to be compared */
  356. /* RTC interrupt source */
  357. #define RTC_INT_TIMESTAMP RTC_CTL_TSIE /*!< time-stamp interrupt enable */
  358. #define RTC_INT_ALARM RTC_CTL_ALRM0IE /*!< RTC alarm interrupt enable */
  359. #define RTC_INT_TAMP RTC_TAMP_TPIE /*!< tamper detection interrupt enable */
  360. /* write protect key */
  361. #define RTC_UNLOCK_KEY1 ((uint8_t)0xCAU) /*!< RTC unlock key1 */
  362. #define RTC_UNLOCK_KEY2 ((uint8_t)0x53U) /*!< RTC unlock key2 */
  363. #define RTC_LOCK_KEY ((uint8_t)0xFFU) /*!< RTC lock key */
  364. /* registers reset value */
  365. #define RTC_REGISTER_RESET ((uint32_t)0x00000000U) /*!< RTC common register reset value */
  366. #define RTC_DATE_RESET ((uint32_t)0x00002101U) /*!< RTC_DATE register reset value */
  367. #define RTC_STAT_RESET ((uint32_t)0x00000007U) /*!< RTC_STAT register reset value */
  368. #define RTC_PSC_RESET ((uint32_t)0x007F00FFU) /*!< RTC_PSC register reset value */
  369. /* RTC timeout value */
  370. #define RTC_INITM_TIMEOUT ((uint32_t)0x00004000U) /*!< initialization state flag timeout */
  371. #define RTC_RSYNF_TIMEOUT ((uint32_t)0x00008000U) /*!< register synchronization flag timeout */
  372. #define RTC_HRFC_TIMEOUT ((uint32_t)0x00001000U) /*!< recalibration pending flag timeout */
  373. #define RTC_SHIFTCTL_TIMEOUT ((uint32_t)0x00001000U) /*!< shift function operation pending flag timeout */
  374. #define RTC_ALRM0WF_TIMEOUT ((uint32_t)0x00008000U) /*!< alarm configuration can be write flag timeout */
  375. /* RTC flag */
  376. #define RTC_FLAG_RECALIBRATION RTC_STAT_SCPF /*!< recalibration pending flag */
  377. #define RTC_FLAG_TAMP1 RTC_STAT_TP1F /*!< tamper 1 event flag */
  378. #define RTC_FLAG_TAMP0 RTC_STAT_TP0F /*!< tamper 0 event flag */
  379. #define RTC_FLAG_TIMESTAMP_OVERFLOW RTC_STAT_TSOVRF /*!< time-stamp overflow event flag */
  380. #define RTC_FLAG_TIMESTAMP RTC_STAT_TSF /*!< time-stamp event flag */
  381. #define RTC_FLAG_ALARM0 RTC_STAT_ALRM0F /*!< alarm event flag */
  382. #define RTC_FLAG_INIT RTC_STAT_INITF /*!< init mode event flag */
  383. #define RTC_FLAG_RSYN RTC_STAT_RSYNF /*!< registers synchronized flag */
  384. #define RTC_FLAG_YCM RTC_STAT_YCM /*!< year parameter configured event flag */
  385. #define RTC_FLAG_SHIFT RTC_STAT_SOPF /*!< shift operation pending flag */
  386. #define RTC_FLAG_ALARM0_WRITTEN RTC_STAT_ALRM0WF /*!< alarm written available flag */
  387. /* function declarations */
  388. /* reset most of the RTC registers */
  389. ErrStatus rtc_deinit(void);
  390. /* initialize RTC registers */
  391. ErrStatus rtc_init(rtc_parameter_struct* rtc_initpara_struct);
  392. /* enter RTC init mode */
  393. ErrStatus rtc_init_mode_enter(void);
  394. /* exit RTC init mode */
  395. void rtc_init_mode_exit(void);
  396. /* wait until RTC_TIME and RTC_DATE registers are synchronized with APB clock, and the shadow registers are updated */
  397. ErrStatus rtc_register_sync_wait(void);
  398. /* get current time and date */
  399. void rtc_current_time_get(rtc_parameter_struct* rtc_initpara_struct);
  400. /* get current subsecond value */
  401. uint32_t rtc_subsecond_get(void);
  402. /* configure RTC alarm */
  403. void rtc_alarm_config(rtc_alarm_struct* rtc_alarm_time);
  404. /* configure subsecond of RTC alarm */
  405. void rtc_alarm_subsecond_config(uint32_t mask_subsecond, uint32_t subsecond);
  406. /* get RTC alarm */
  407. void rtc_alarm_get(rtc_alarm_struct* rtc_alarm_time);
  408. /* get RTC alarm subsecond */
  409. uint32_t rtc_alarm_subsecond_get(void);
  410. /* enable RTC alarm */
  411. void rtc_alarm_enable(void);
  412. /* disable RTC alarm */
  413. ErrStatus rtc_alarm_disable(void);
  414. /* enable RTC time-stamp */
  415. void rtc_timestamp_enable(uint32_t edge);
  416. /* disable RTC time-stamp */
  417. void rtc_timestamp_disable(void);
  418. /* get RTC timestamp time and date */
  419. void rtc_timestamp_get(rtc_timestamp_struct* rtc_timestamp);
  420. /* get RTC time-stamp subsecond */
  421. uint32_t rtc_timestamp_subsecond_get(void);
  422. /* enable RTC tamper */
  423. void rtc_tamper_enable(rtc_tamper_struct* rtc_tamper);
  424. /* disable RTC tamper */
  425. void rtc_tamper_disable(uint32_t source);
  426. /* enable specified RTC interrupt */
  427. void rtc_interrupt_enable(uint32_t interrupt);
  428. /* disble specified RTC interrupt */
  429. void rtc_interrupt_disable(uint32_t interrupt);
  430. /* check specified flag */
  431. FlagStatus rtc_flag_get(uint32_t flag);
  432. /* clear specified flag */
  433. void rtc_flag_clear(uint32_t flag);
  434. /* configure RTC alternate output source */
  435. void rtc_alter_output_config(uint32_t source, uint32_t mode);
  436. /* configure RTC calibration register */
  437. ErrStatus rtc_calibration_config(uint32_t window, uint32_t plus, uint32_t minus);
  438. /* ajust the daylight saving time by adding or substracting one hour from the current time */
  439. void rtc_hour_adjust(uint32_t operation);
  440. /* ajust RTC second or subsecond value of current time */
  441. ErrStatus rtc_second_ajust(uint32_t add, uint32_t minus);
  442. /* enable RTC bypass shadow registers function */
  443. void rtc_bypass_shadow_enable(void);
  444. /* disable RTC bypass shadow registers function */
  445. void rtc_bypass_shadow_disable(void);
  446. /* enable RTC reference clock detection function */
  447. ErrStatus rtc_refclock_detection_enable(void);
  448. /* disable RTC reference clock detection function */
  449. ErrStatus rtc_refclock_detection_disable(void);
  450. #endif /* GD32F3X0_RTC_H */