gd32f30x_rtc.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*!
  2. \file gd32f30x_rtc.h
  3. \brief definitions for the RTC
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-02-10, V1.0.1, firmware for GD32F30x
  8. */
  9. #ifndef GD32F30X_RTC_H
  10. #define GD32F30X_RTC_H
  11. #include "gd32f30x.h"
  12. /* RTC definitions */
  13. #define RTC RTC_BASE
  14. /* registers definitions */
  15. #define RTC_INTEN REG32(RTC + 0x00U) /*!< interrupt enable register */
  16. #define RTC_CTL REG32(RTC + 0x04U) /*!< control register */
  17. #define RTC_PSCH REG32(RTC + 0x08U) /*!< prescaler high register */
  18. #define RTC_PSCL REG32(RTC + 0x0CU) /*!< prescaler low register */
  19. #define RTC_DIVH REG32(RTC + 0x10U) /*!< divider high register */
  20. #define RTC_DIVL REG32(RTC + 0x14U) /*!< divider low register */
  21. #define RTC_CNTH REG32(RTC + 0x18U) /*!< counter high register */
  22. #define RTC_CNTL REG32(RTC + 0x1CU) /*!< counter low register */
  23. #define RTC_ALRMH REG32(RTC + 0x20U) /*!< alarm high register */
  24. #define RTC_ALRML REG32(RTC + 0x24U) /*!< alarm low register */
  25. /* bits definitions */
  26. /* RTC_INTEN */
  27. #define RTC_INTEN_SCIE BIT(0) /*!< second interrupt enable */
  28. #define RTC_INTEN_ALRMIE BIT(1) /*!< alarm interrupt enable */
  29. #define RTC_INTEN_OVIE BIT(2) /*!< overflow interrupt enable */
  30. /* RTC_CTL */
  31. #define RTC_CTL_SCIF BIT(0) /*!< second interrupt flag */
  32. #define RTC_CTL_ALRMIF BIT(1) /*!< alarm interrupt flag */
  33. #define RTC_CTL_OVIF BIT(2) /*!< overflow interrupt flag */
  34. #define RTC_CTL_RSYNF BIT(3) /*!< registers synchronized flag */
  35. #define RTC_CTL_CMF BIT(4) /*!< configuration mode flag */
  36. #define RTC_CTL_LWOFF BIT(5) /*!< last write operation finished flag */
  37. /* RTC_PSC */
  38. #define RTC_PSCH_PSC BITS(0, 3) /*!< prescaler high value */
  39. #define RTC_PSCL_PSC BITS(0, 15) /*!< prescaler low value */
  40. /* RTC_DIV */
  41. #define RTC_DIVH_DIV BITS(0, 3) /*!< divider high value */
  42. #define RTC_DIVL_DIV BITS(0, 15) /*!< divider low value */
  43. /* RTC_CNT */
  44. #define RTC_CNTH_CNT BITS(0, 15) /*!< counter high value */
  45. #define RTC_CNTL_CNT BITS(0, 15) /*!< counter low value */
  46. /* RTC_ALRM */
  47. #define RTC_ALRMH_ALRM BITS(0, 15) /*!< alarm high value */
  48. #define RTC_ALRML_ALRM BITS(0, 15) /*!< alarm low value */
  49. /* constants definitions */
  50. #define RTC_HIGH_VALUE 0x000F0000U /*!< RTC high value */
  51. #define RTC_LOW_VALUE 0x0000FFFFU /*!< RTC low value */
  52. /* RTC interrupt enable or disable definitions */
  53. #define RTC_INT_SECOND RTC_INTEN_SCIE /*!< second interrupt enable */
  54. #define RTC_INT_ALARM RTC_INTEN_ALRMIE /*!< alarm interrupt enable */
  55. #define RTC_INT_OVERFLOW RTC_INTEN_OVIE /*!< overflow interrupt enable */
  56. /* RTC flag definitions */
  57. #define RTC_FLAG_SECOND RTC_CTL_SCIF /*!< second interrupt flag */
  58. #define RTC_FLAG_ALARM RTC_CTL_ALRMIF /*!< alarm interrupt flag */
  59. #define RTC_FLAG_OVERFLOW RTC_CTL_OVIF /*!< overflow interrupt flag */
  60. #define RTC_FLAG_RSYN RTC_CTL_RSYNF /*!< registers synchronized flag */
  61. #define RTC_FLAG_LWOF RTC_CTL_LWOFF /*!< last write operation finished flag */
  62. /* function declarations */
  63. /* enable RTC interrupt */
  64. void rtc_interrupt_enable(uint32_t interrupt);
  65. /* disable RTC interrupt */
  66. void rtc_interrupt_disable(uint32_t interrupt);
  67. /* enter RTC configuration mode */
  68. void rtc_configuration_mode_enter(void);
  69. /* exit RTC configuration mode */
  70. void rtc_configuration_mode_exit(void);
  71. /* wait RTC last write operation finished flag set */
  72. void rtc_lwoff_wait(void);
  73. /* wait RTC registers synchronized flag set */
  74. void rtc_register_sync_wait(void);
  75. /* get RTC counter value */
  76. uint32_t rtc_counter_get(void);
  77. /* set RTC counter value */
  78. void rtc_counter_set(uint32_t cnt);
  79. /* set RTC prescaler value */
  80. void rtc_prescaler_set(uint32_t psc);
  81. /* set RTC alarm value */
  82. void rtc_alarm_config(uint32_t alarm);
  83. /* get RTC divider value */
  84. uint32_t rtc_divider_get(void);
  85. /* get RTC flag status */
  86. FlagStatus rtc_flag_get(uint32_t flag);
  87. /* clear RTC flag status */
  88. void rtc_flag_clear(uint32_t flag);
  89. #endif /* GD32F30X_RTC_H */