gd32f30x_bkp.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. /*!
  2. \file gd32f30x_bkp.h
  3. \brief definitions for the BKP
  4. */
  5. /*
  6. Copyright (C) 2017 GigaDevice
  7. 2017-02-10, V1.0.2, firmware for GD32F30x
  8. */
  9. #ifndef GD32F30X_BKP_H
  10. #define GD32F30X_BKP_H
  11. #include "gd32f30x.h"
  12. /* BKP definitions */
  13. #define BKP BKP_BASE /*!< BKP base address */
  14. /* registers definitions */
  15. #define BKP_DATA0 REG16((BKP) + 0x04U) /*!< BKP data register 0 */
  16. #define BKP_DATA1 REG16((BKP) + 0x08U) /*!< BKP data register 1 */
  17. #define BKP_DATA2 REG16((BKP) + 0x0CU) /*!< BKP data register 2 */
  18. #define BKP_DATA3 REG16((BKP) + 0x10U) /*!< BKP data register 3 */
  19. #define BKP_DATA4 REG16((BKP) + 0x14U) /*!< BKP data register 4 */
  20. #define BKP_DATA5 REG16((BKP) + 0x18U) /*!< BKP data register 5 */
  21. #define BKP_DATA6 REG16((BKP) + 0x1CU) /*!< BKP data register 6 */
  22. #define BKP_DATA7 REG16((BKP) + 0x20U) /*!< BKP data register 7 */
  23. #define BKP_DATA8 REG16((BKP) + 0x24U) /*!< BKP data register 8 */
  24. #define BKP_DATA9 REG16((BKP) + 0x28U) /*!< BKP data register 9 */
  25. #define BKP_DATA10 REG16((BKP) + 0x40U) /*!< BKP data register 10 */
  26. #define BKP_DATA11 REG16((BKP) + 0x44U) /*!< BKP data register 11 */
  27. #define BKP_DATA12 REG16((BKP) + 0x48U) /*!< BKP data register 12 */
  28. #define BKP_DATA13 REG16((BKP) + 0x4CU) /*!< BKP data register 13 */
  29. #define BKP_DATA14 REG16((BKP) + 0x50U) /*!< BKP data register 14 */
  30. #define BKP_DATA15 REG16((BKP) + 0x54U) /*!< BKP data register 15 */
  31. #define BKP_DATA16 REG16((BKP) + 0x58U) /*!< BKP data register 16 */
  32. #define BKP_DATA17 REG16((BKP) + 0x5CU) /*!< BKP data register 17 */
  33. #define BKP_DATA18 REG16((BKP) + 0x60U) /*!< BKP data register 18 */
  34. #define BKP_DATA19 REG16((BKP) + 0x64U) /*!< BKP data register 19 */
  35. #define BKP_DATA20 REG16((BKP) + 0x68U) /*!< BKP data register 20 */
  36. #define BKP_DATA21 REG16((BKP) + 0x6CU) /*!< BKP data register 21 */
  37. #define BKP_DATA22 REG16((BKP) + 0x70U) /*!< BKP data register 22 */
  38. #define BKP_DATA23 REG16((BKP) + 0x74U) /*!< BKP data register 23 */
  39. #define BKP_DATA24 REG16((BKP) + 0x78U) /*!< BKP data register 24 */
  40. #define BKP_DATA25 REG16((BKP) + 0x7CU) /*!< BKP data register 25 */
  41. #define BKP_DATA26 REG16((BKP) + 0x80U) /*!< BKP data register 26 */
  42. #define BKP_DATA27 REG16((BKP) + 0x84U) /*!< BKP data register 27 */
  43. #define BKP_DATA28 REG16((BKP) + 0x88U) /*!< BKP data register 28 */
  44. #define BKP_DATA29 REG16((BKP) + 0x8CU) /*!< BKP data register 29 */
  45. #define BKP_DATA30 REG16((BKP) + 0x90U) /*!< BKP data register 30 */
  46. #define BKP_DATA31 REG16((BKP) + 0x94U) /*!< BKP data register 31 */
  47. #define BKP_DATA32 REG16((BKP) + 0x98U) /*!< BKP data register 32 */
  48. #define BKP_DATA33 REG16((BKP) + 0x9CU) /*!< BKP data register 33 */
  49. #define BKP_DATA34 REG16((BKP) + 0xA0U) /*!< BKP data register 34 */
  50. #define BKP_DATA35 REG16((BKP) + 0xA4U) /*!< BKP data register 35 */
  51. #define BKP_DATA36 REG16((BKP) + 0xA8U) /*!< BKP data register 36 */
  52. #define BKP_DATA37 REG16((BKP) + 0xACU) /*!< BKP data register 37 */
  53. #define BKP_DATA38 REG16((BKP) + 0xB0U) /*!< BKP data register 38 */
  54. #define BKP_DATA39 REG16((BKP) + 0xB4U) /*!< BKP data register 39 */
  55. #define BKP_DATA40 REG16((BKP) + 0xB8U) /*!< BKP data register 40 */
  56. #define BKP_DATA41 REG16((BKP) + 0xBCU) /*!< BKP data register 41 */
  57. #define BKP_OCTL REG16((BKP) + 0x2CU) /*!< RTC signal output control register */
  58. #define BKP_TPCTL REG16((BKP) + 0x30U) /*!< tamper pin control register */
  59. #define BKP_TPCS REG16((BKP) + 0x34U) /*!< tamper control and status register */
  60. /* bits definitions */
  61. /* BKP_DATA */
  62. #define BKP_DATA BITS(0,15) /*!< backup data */
  63. /* BKP_OCTL */
  64. #define BKP_OCTL_RCCV BITS(0,6) /*!< RTC clock calibration value */
  65. #define BKP_OCTL_COEN BIT(7) /*!< RTC clock calibration output enable */
  66. #define BKP_OCTL_ASOEN BIT(8) /*!< RTC alarm or second signal output enable */
  67. #define BKP_OCTL_ROSEL BIT(9) /*!< RTC output selection */
  68. #define BKP_OCTL_CCOSEL BIT(14) /*!< RTC clock output selection */
  69. #define BKP_OCTL_CALDIR BIT(15) /*!< RTC clock calibration direction */
  70. /* BKP_TPCTL */
  71. #define BKP_TPCTL_TPEN BIT(0) /*!< tamper detection enable */
  72. #define BKP_TPCTL_TPAL BIT(1) /*!< tamper pin active level */
  73. /* BKP_TPCS */
  74. #define BKP_TPCS_TER BIT(0) /*!< tamper event reset */
  75. #define BKP_TPCS_TIR BIT(1) /*!< tamper interrupt reset */
  76. #define BKP_TPCS_TPIE BIT(2) /*!< tamper interrupt enable */
  77. #define BKP_TPCS_TEF BIT(8) /*!< tamper event flag */
  78. #define BKP_TPCS_TIF BIT(9) /*!< tamper interrupt flag */
  79. /* constants definitions */
  80. /* BKP register */
  81. #define BKP_DATA0_9(number) REG16((BKP) + 0x04U + (number) * 0x04U)
  82. #define BKP_DATA10_41(number) REG16((BKP) + 0x40U + ((number)-10U) * 0x04U)
  83. /* get data of BKP data register */
  84. #define BKP_DATA_GET(regval) GET_BITS((uint32_t)(regval), 0, 15)
  85. /* RTC clock calibration value */
  86. #define OCTL_RCCV(regval) (BITS(0,6) & ((uint32_t)(regval) << 0))
  87. /* RTC output selection */
  88. #define RTC_OUTPUT_ALARM_PULSE ((uint16_t)0x0000U) /*!< RTC alarm pulse is selected as the RTC output */
  89. #define RTC_OUTPUT_SECOND_PULSE ((uint16_t)0x0200U) /*!< RTC second pulse is selected as the RTC output */
  90. /* RTC clock output selection */
  91. #define RTC_CLOCK_DIV_64 ((uint16_t)0x0000U) /*!< RTC clock div 64 */
  92. #define RTC_CLOCK_DIV_1 ((uint16_t)0x4000U) /*!< RTC clock div 1 */
  93. /* RTC clock calibration direction */
  94. #define RTC_CLOCK_SLOWED_DOWN ((uint16_t)0x0000U) /*!< RTC clock slow down */
  95. #define RTC_CLOCK_SPEED_UP ((uint16_t)0x8000U) /*!< RTC clock speed up */
  96. /* tamper pin active level */
  97. #define TAMPER_PIN_ACTIVE_HIGH ((uint16_t)0x0000U) /*!< the tamper pin is active high */
  98. #define TAMPER_PIN_ACTIVE_LOW ((uint16_t)0x0002U) /*!< the tamper pin is active low */
  99. /* tamper flag */
  100. #define BKP_FLAG_TAMPER BKP_TPCS_TEF /*!< tamper event flag */
  101. /* tamper interrupt flag */
  102. #define BKP_INT_FLAG_TAMPER BKP_TPCS_TIF /*!< tamper interrupt flag */
  103. /* BKP data register number */
  104. typedef enum
  105. {
  106. BKP_DATA_0 = 1, /*!< BKP data register 0 */
  107. BKP_DATA_1, /*!< BKP data register 1 */
  108. BKP_DATA_2, /*!< BKP data register 2 */
  109. BKP_DATA_3, /*!< BKP data register 3 */
  110. BKP_DATA_4, /*!< BKP data register 4 */
  111. BKP_DATA_5, /*!< BKP data register 5 */
  112. BKP_DATA_6, /*!< BKP data register 6 */
  113. BKP_DATA_7, /*!< BKP data register 7 */
  114. BKP_DATA_8, /*!< BKP data register 8 */
  115. BKP_DATA_9, /*!< BKP data register 9 */
  116. BKP_DATA_10, /*!< BKP data register 10 */
  117. BKP_DATA_11, /*!< BKP data register 11 */
  118. BKP_DATA_12, /*!< BKP data register 12 */
  119. BKP_DATA_13, /*!< BKP data register 13 */
  120. BKP_DATA_14, /*!< BKP data register 14 */
  121. BKP_DATA_15, /*!< BKP data register 15 */
  122. BKP_DATA_16, /*!< BKP data register 16 */
  123. BKP_DATA_17, /*!< BKP data register 17 */
  124. BKP_DATA_18, /*!< BKP data register 18 */
  125. BKP_DATA_19, /*!< BKP data register 19 */
  126. BKP_DATA_20, /*!< BKP data register 20 */
  127. BKP_DATA_21, /*!< BKP data register 21 */
  128. BKP_DATA_22, /*!< BKP data register 22 */
  129. BKP_DATA_23, /*!< BKP data register 23 */
  130. BKP_DATA_24, /*!< BKP data register 24 */
  131. BKP_DATA_25, /*!< BKP data register 25 */
  132. BKP_DATA_26, /*!< BKP data register 26 */
  133. BKP_DATA_27, /*!< BKP data register 27 */
  134. BKP_DATA_28, /*!< BKP data register 28 */
  135. BKP_DATA_29, /*!< BKP data register 29 */
  136. BKP_DATA_30, /*!< BKP data register 30 */
  137. BKP_DATA_31, /*!< BKP data register 31 */
  138. BKP_DATA_32, /*!< BKP data register 32 */
  139. BKP_DATA_33, /*!< BKP data register 33 */
  140. BKP_DATA_34, /*!< BKP data register 34 */
  141. BKP_DATA_35, /*!< BKP data register 35 */
  142. BKP_DATA_36, /*!< BKP data register 36 */
  143. BKP_DATA_37, /*!< BKP data register 37 */
  144. BKP_DATA_38, /*!< BKP data register 38 */
  145. BKP_DATA_39, /*!< BKP data register 39 */
  146. BKP_DATA_40, /*!< BKP data register 40 */
  147. BKP_DATA_41, /*!< BKP data register 41 */
  148. }bkp_data_register_enum;
  149. /* function declarations */
  150. /* reset BKP registers */
  151. void bkp_deinit(void);
  152. /* write BKP data register */
  153. void bkp_write_data(bkp_data_register_enum register_number, uint16_t data);
  154. /* read BKP data register */
  155. uint16_t bkp_read_data(bkp_data_register_enum register_number);
  156. /* RTC related functions */
  157. /* enable RTC clock calibration output */
  158. void bkp_rtc_calibration_output_enable(void);
  159. /* disable RTC clock calibration output */
  160. void bkp_rtc_calibration_output_disable(void);
  161. /* enable RTC alarm or second signal output */
  162. void bkp_rtc_signal_output_enable(void);
  163. /* disable RTC alarm or second signal output */
  164. void bkp_rtc_signal_output_disable(void);
  165. /* RTC output selection */
  166. void bkp_rtc_output_select(uint16_t outputsel);
  167. /* RTC clock output selection */
  168. void bkp_rtc_clock_output_select(uint16_t clocksel);
  169. /* RTC clock calibration direction */
  170. void bkp_rtc_clock_calibration_direction(uint16_t direction);
  171. /* set RTC clock calibration value */
  172. void bkp_rtc_calibration_value_set(uint8_t value);
  173. /* tamper pin related functions */
  174. /* enable tamper pin detection */
  175. void bkp_tamper_detection_enable(void);
  176. /* disable tamper pin detection */
  177. void bkp_tamper_detection_disable(void);
  178. /* set tamper pin active level */
  179. void bkp_tamper_active_level_set(uint16_t level);
  180. /* enable tamper pin interrupt */
  181. void bkp_tamper_interrupt_enable(void);
  182. /* disable tamper pin interrupt */
  183. void bkp_tamper_interrupt_disable(void);
  184. /* flag functions */
  185. /* get BKP flag state */
  186. FlagStatus bkp_flag_get(uint16_t flag);
  187. /* clear BKP flag state */
  188. void bkp_flag_clear(uint16_t flag);
  189. /* get BKP interrupt flag state */
  190. FlagStatus bkp_interrupt_flag_get(uint16_t flag);
  191. /* clear BKP interrupt flag state */
  192. void bkp_interrupt_flag_clear(uint16_t flag);
  193. #endif /* GD32F30X_BKP_H */