reg_common.h 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. ////////////////////////////////////////////////////////////////////////////////
  2. /// @file reg_common.h
  3. /// @author AE TEAM
  4. /// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE SERIES OF
  5. /// MM32 FIRMWARE LIBRARY.
  6. ////////////////////////////////////////////////////////////////////////////////
  7. /// @attention
  8. ///
  9. /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
  10. /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
  11. /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
  12. /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
  13. /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
  14. /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
  15. ///
  16. /// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
  17. ////////////////////////////////////////////////////////////////////////////////
  18. // Define to prevent recursive inclusion
  19. #ifndef __REG_COMMON_H
  20. #define __REG_COMMON_H
  21. // Files includes
  22. #include <stdint.h>
  23. #include <stdbool.h>
  24. #include "types.h"
  25. #if defined ( __CC_ARM )
  26. #pragma anon_unions
  27. #endif
  28. #ifndef HSE_STARTUP_TIMEOUT
  29. #define HSE_STARTUP_TIMEOUT (0x0500U) ///< Time out for HSE start up.
  30. #endif
  31. #ifdef CUSTOM_HSE_VAL
  32. #ifndef HSE_VALUE
  33. #define HSE_VALUE (12000000U) ///< Value of the External oscillator in Hz.
  34. #endif
  35. #else
  36. #ifndef HSE_VALUE
  37. #define HSE_VALUE (8000000U) ///< Value of the External oscillator in Hz.
  38. #endif
  39. #endif
  40. #define HSI_VALUE_PLL_ON (8000000U) ///< Value of the Internal oscillator in Hz.
  41. #define HSI_DIV6 (8000000U) ///< Value of the Internal oscillator in Hz.
  42. // Value of the Internal oscillator in Hz.
  43. #define LSI_VALUE (40000U) ///< Value of the Internal oscillator in Hz.
  44. #ifndef HSI_VALUE
  45. #define HSI_VALUE (8000000U) ///< Value of the Internal oscillator in Hz.
  46. #endif
  47. #define __MPU_PRESENT (0) ///< Cortex-M3 does not provide a MPU present or not
  48. #ifndef __NVIC_PRIO_BITS
  49. #define __NVIC_PRIO_BITS (4) ///< Cortex-M3 uses 4 Bits for the Priority Levels
  50. //#warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
  51. #endif
  52. #define __Vendor_SysTickConfig (0) ///< Set to 1 if different SysTick Config is used
  53. ////////////////////////////////////////////////////////////////////////////////
  54. /// @brief MM32 MCU Interrupt Handle
  55. ////////////////////////////////////////////////////////////////////////////////
  56. typedef enum IRQn {
  57. NonMaskableInt_IRQn = -14, ///< 2 Non Maskable Interrupt
  58. MemoryManagement_IRQn = -12, ///< 4 Cortex-M3 Memory Management Interrupt
  59. BusFault_IRQn = -11, ///< 5 Cortex-M3 Bus Fault Interrupt
  60. UsageFault_IRQn = -10, ///< 6 Cortex-M3 Usage Fault Interrupt
  61. SVCall_IRQn = -5, ///< 11 Cortex-M3 SV Call Interrupt
  62. DebugMonitor_IRQn = -4, ///< 12 Cortex-M3 Debug Monitor Interrupt
  63. PendSV_IRQn = -2, ///< 14 Cortex-M3 Pend SV Interrupt
  64. SysTick_IRQn = -1, ///< 15 Cortex-M3 System Tick Interrupt
  65. WWDG_IWDG_IRQn = 0, ///< Watchdog interrupt
  66. WWDG_IRQn = 0, ///< Watchdog interrupt
  67. PVD_IRQn = 1, ///< (PVD) Interrupt
  68. TAMPER_IRQn = 2, ///< Intrusion detection interrupted
  69. RTC_IRQn = 3, ///< Real-time clock (RTC) global interrupt
  70. FLASH_IRQn = 4, ///< Flash global interrupt
  71. RCC_CRS_IRQn = 5, ///< RCC and CRS global interrupt
  72. EXTI0_IRQn = 6, ///< EXTI line 0 interrupt
  73. EXTI1_IRQn = 7, ///< EXTI line 1 interrupt
  74. EXTI2_IRQn = 8, ///< EXTI line 2 interrupt
  75. EXTI3_IRQn = 9, ///< EXTI line 3 interrupted
  76. EXTI4_IRQn = 10, ///< EXTI line 4 interrupt
  77. DMA1_Channel1_IRQn = 11, ///< DMA1 channel 1 global interrupt
  78. DMA1_Channel2_IRQn = 12, ///< DMA1 channel 2 global interrupt
  79. DMA1_Channel3_IRQn = 13, ///< DMA1 channel 3 global interrupt
  80. DMA1_Channel4_IRQn = 14, ///< DMA1 channel 4 global interrupt
  81. DMA1_Channel5_IRQn = 15, ///< DMA1 channel 5 global interrupt
  82. DMA1_Channel6_IRQn = 16, ///< DMA1 channel 6 global interrupt
  83. DMA1_Channel7_IRQn = 17, ///< DMA1 channel 7 global interrupt
  84. ADC1_IRQn = 18, ///< ADC1 global interrupt
  85. ADC1_2_IRQn = 18, ///< ADC1&ADC2 global interrupt
  86. ADC2_IRQn = 18, ///< ADC2 global interrupt
  87. FlashCache_IRQn = 19, ///< FlashCache outage
  88. CAN1_RX_IRQn = 21, ///< CAN1 receive interrupt
  89. CAN_IRQn = 21, ///< CAN interrupt
  90. EXTI9_5_IRQn = 23, ///< EXTI line [9: 5] interrupted
  91. TIM1_BRK_IRQn = 24, ///< TIM1 disconnect interrupt
  92. TIM1_UP_IRQn = 25, ///< TIM1 update interrupt
  93. IM1_TRG_COM_IRQn = 26, ///< TIM1 trigger and communication interrupt
  94. TIM1_CC_IRQn = 27, ///< TIM1 capture compare interrupt
  95. TIM2_IRQn = 28, ///< TIM2 global interrupt
  96. TIM3_IRQn = 29, ///< TIM3 global interrupt
  97. TIM4_IRQn = 30, ///< TIM4 global interrupt
  98. I2C1_IRQn = 31, ///< I2C1 global interrupt
  99. I2C2_IRQn = 33, ///< I2C2 global interrupt
  100. SPI1_IRQn = 35, ///< SPI1 global interrupt
  101. SPI2_IRQn = 36, ///< SPI2 global interrupt
  102. UART1_IRQn = 37, ///< UART1 global interrupt
  103. UART2_IRQn = 38, ///< UART2 global interrupt
  104. UART3_IRQn = 39, ///< UART3 global interrupt
  105. EXTI15_10_IRQn = 40, ///< EXTI line [15: 10] interrupted
  106. RTCAlarm_IRQn = 41, ///< RTC alarm connected to EXTI interrupted
  107. USB_WKUP_IRQn = 42, ///< Wake-up interrupt from USB connected to EXTI
  108. TIM8_BRK_IRQn = 43, ///< TIM8 brake interruption
  109. TIM8_UP_IRQn = 44, ///< TIM8 update interrupt
  110. TIM8_TRG_COM_IRQn = 45, ///< TIM8 trigger, communication interrupt
  111. TIM8_CC_IRQn = 46, ///< TIM8 capture compare interrupt
  112. ADC3_IRQn = 47, ///< ADC3 global interrupt
  113. SDIO_IRQn = 49, ///< SDIO global interrupt
  114. TIM5_IRQn = 50, ///< TIM5 global interrupt
  115. SPI3_IRQn = 51, ///< SPI3 global interrupt
  116. UART4_IRQn = 52, ///< UART4 global interrupt
  117. UART5_IRQn = 53, ///< UART5 global interrupt
  118. TIM6_IRQn = 54, ///< TIM6 global interrupt
  119. TIM7_IRQn = 55, ///< TIM7 global interrupt
  120. DMA2_Channel1_IRQn = 56, ///< DMA2 channel 1 global interrupt
  121. DMA2_Channel2_IRQn = 57, ///< DMA2 channel 2 global interrupt
  122. DMA2_Channel3_IRQn = 58, ///< DMA2 channel 3 global interrupt
  123. DMA2_Channel4_IRQn = 59, ///< DMA2 channel 4 global interrupt
  124. DMA2_Channel5_IRQn = 60, ///< DMA2 channel 5 global interrupt
  125. ETHERNET_MAC_IRQn = 61, ///< ETHERNET global interrupt
  126. COMP1_2_IRQn = 64, ///< Comparator 1/2 interrupt connected to EXTI
  127. USB_FS_IRQn = 67, ///< USB FS global interrupt
  128. UART6_IRQn = 71, ///< UART6 global interrupt
  129. UART7_IRQn = 82, ///< UART7 global interrupt
  130. UART8_IRQn = 83, ///< UART8 global interrupt
  131. } IRQn_Type;
  132. #include <core_cm3.h>
  133. #define PERIPH_BASE (0x40000000U) ///< Peripheral base address in the alias region
  134. #define EEPROM_BASE (0x08100000U) ///< EEPROM base address in the alias region
  135. #define SRAM_BITBAND_BASE (0x22000000U) ///< Peripheral base address in the bit-band region
  136. #define PERIPH_BITBAND_BASE (0x42000000U) ///< SRAM base address in the bit-band region
  137. #define APB1PERIPH_BASE (PERIPH_BASE + 0x00000000)
  138. #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)
  139. #define AHBPERIPH_BASE (PERIPH_BASE + 0x00020000)
  140. #define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000)
  141. #define AHB3PERIPH_BASE (PERIPH_BASE + 0x20000000)
  142. ////////////////////////////////////////////////////////////////////////////////
  143. /// @brief UID type pointer Definition
  144. ////////////////////////////////////////////////////////////////////////////////
  145. #define UID_BASE (0x1FFFF7E0U) ///< Unique device ID register base address
  146. ///////////////////////////////////////////////////////////////////////////////
  147. /// @brief Nested Vectored Interrupt Controller
  148. ///////////////////////////////////////////////////////////////////////////////
  149. ////////////////////////////////////////////////////////////////////////////////
  150. /// @brief NVIC_ISER Register Bit Definition
  151. ////////////////////////////////////////////////////////////////////////////////
  152. #define NVIC_ISER_SETENA (0xFFFFFFFFU) ///< Interrupt set enable bits
  153. #define NVIC_ISER_SETENA_0 (0x00000001U) ///< bit 0
  154. #define NVIC_ISER_SETENA_1 (0x00000002U) ///< bit 1
  155. #define NVIC_ISER_SETENA_2 (0x00000004U) ///< bit 2
  156. #define NVIC_ISER_SETENA_3 (0x00000008U) ///< bit 3
  157. #define NVIC_ISER_SETENA_4 (0x00000010U) ///< bit 4
  158. #define NVIC_ISER_SETENA_5 (0x00000020U) ///< bit 5
  159. #define NVIC_ISER_SETENA_6 (0x00000040U) ///< bit 6
  160. #define NVIC_ISER_SETENA_7 (0x00000080U) ///< bit 7
  161. #define NVIC_ISER_SETENA_8 (0x00000100U) ///< bit 8
  162. #define NVIC_ISER_SETENA_9 (0x00000200U) ///< bit 9
  163. #define NVIC_ISER_SETENA_10 (0x00000400U) ///< bit 10
  164. #define NVIC_ISER_SETENA_11 (0x00000800U) ///< bit 11
  165. #define NVIC_ISER_SETENA_12 (0x00001000U) ///< bit 12
  166. #define NVIC_ISER_SETENA_13 (0x00002000U) ///< bit 13
  167. #define NVIC_ISER_SETENA_14 (0x00004000U) ///< bit 14
  168. #define NVIC_ISER_SETENA_15 (0x00008000U) ///< bit 15
  169. #define NVIC_ISER_SETENA_16 (0x00010000U) ///< bit 16
  170. #define NVIC_ISER_SETENA_17 (0x00020000U) ///< bit 17
  171. #define NVIC_ISER_SETENA_18 (0x00040000U) ///< bit 18
  172. #define NVIC_ISER_SETENA_19 (0x00080000U) ///< bit 19
  173. #define NVIC_ISER_SETENA_20 (0x00100000U) ///< bit 20
  174. #define NVIC_ISER_SETENA_21 (0x00200000U) ///< bit 21
  175. #define NVIC_ISER_SETENA_22 (0x00400000U) ///< bit 22
  176. #define NVIC_ISER_SETENA_23 (0x00800000U) ///< bit 23
  177. #define NVIC_ISER_SETENA_24 (0x01000000U) ///< bit 24
  178. #define NVIC_ISER_SETENA_25 (0x02000000U) ///< bit 25
  179. #define NVIC_ISER_SETENA_26 (0x04000000U) ///< bit 26
  180. #define NVIC_ISER_SETENA_27 (0x08000000U) ///< bit 27
  181. #define NVIC_ISER_SETENA_28 (0x10000000U) ///< bit 28
  182. #define NVIC_ISER_SETENA_29 (0x20000000U) ///< bit 29
  183. #define NVIC_ISER_SETENA_30 (0x40000000U) ///< bit 30
  184. #define NVIC_ISER_SETENA_31 (0x80000000U) ///< bit 31
  185. ////////////////////////////////////////////////////////////////////////////////
  186. /// @brief NVIC_ICER Register Bit Definition
  187. ////////////////////////////////////////////////////////////////////////////////
  188. #define NVIC_ICER_CLRENA (0xFFFFFFFFU) ///< Interrupt clear-enable bits
  189. #define NVIC_ICER_CLRENA_0 (0x00000001U) ///< bit 0
  190. #define NVIC_ICER_CLRENA_1 (0x00000002U) ///< bit 1
  191. #define NVIC_ICER_CLRENA_2 (0x00000004U) ///< bit 2
  192. #define NVIC_ICER_CLRENA_3 (0x00000008U) ///< bit 3
  193. #define NVIC_ICER_CLRENA_4 (0x00000010U) ///< bit 4
  194. #define NVIC_ICER_CLRENA_5 (0x00000020U) ///< bit 5
  195. #define NVIC_ICER_CLRENA_6 (0x00000040U) ///< bit 6
  196. #define NVIC_ICER_CLRENA_7 (0x00000080U) ///< bit 7
  197. #define NVIC_ICER_CLRENA_8 (0x00000100U) ///< bit 8
  198. #define NVIC_ICER_CLRENA_9 (0x00000200U) ///< bit 9
  199. #define NVIC_ICER_CLRENA_10 (0x00000400U) ///< bit 10
  200. #define NVIC_ICER_CLRENA_11 (0x00000800U) ///< bit 11
  201. #define NVIC_ICER_CLRENA_12 (0x00001000U) ///< bit 12
  202. #define NVIC_ICER_CLRENA_13 (0x00002000U) ///< bit 13
  203. #define NVIC_ICER_CLRENA_14 (0x00004000U) ///< bit 14
  204. #define NVIC_ICER_CLRENA_15 (0x00008000U) ///< bit 15
  205. #define NVIC_ICER_CLRENA_16 (0x00010000U) ///< bit 16
  206. #define NVIC_ICER_CLRENA_17 (0x00020000U) ///< bit 17
  207. #define NVIC_ICER_CLRENA_18 (0x00040000U) ///< bit 18
  208. #define NVIC_ICER_CLRENA_19 (0x00080000U) ///< bit 19
  209. #define NVIC_ICER_CLRENA_20 (0x00100000U) ///< bit 20
  210. #define NVIC_ICER_CLRENA_21 (0x00200000U) ///< bit 21
  211. #define NVIC_ICER_CLRENA_22 (0x00400000U) ///< bit 22
  212. #define NVIC_ICER_CLRENA_23 (0x00800000U) ///< bit 23
  213. #define NVIC_ICER_CLRENA_24 (0x01000000U) ///< bit 24
  214. #define NVIC_ICER_CLRENA_25 (0x02000000U) ///< bit 25
  215. #define NVIC_ICER_CLRENA_26 (0x04000000U) ///< bit 26
  216. #define NVIC_ICER_CLRENA_27 (0x08000000U) ///< bit 27
  217. #define NVIC_ICER_CLRENA_28 (0x10000000U) ///< bit 28
  218. #define NVIC_ICER_CLRENA_29 (0x20000000U) ///< bit 29
  219. #define NVIC_ICER_CLRENA_30 (0x40000000U) ///< bit 30
  220. #define NVIC_ICER_CLRENA_31 (0x80000000U) ///< bit 31
  221. ////////////////////////////////////////////////////////////////////////////////
  222. /// @brief NVIC_ISPR Register Bit Definition
  223. ////////////////////////////////////////////////////////////////////////////////
  224. #define NVIC_ISPR_SETPEND (0xFFFFFFFFU) ///< Interrupt set-pending bits
  225. #define NVIC_ISPR_SETPEND_0 (0x00000001U) ///< bit 0
  226. #define NVIC_ISPR_SETPEND_1 (0x00000002U) ///< bit 1
  227. #define NVIC_ISPR_SETPEND_2 (0x00000004U) ///< bit 2
  228. #define NVIC_ISPR_SETPEND_3 (0x00000008U) ///< bit 3
  229. #define NVIC_ISPR_SETPEND_4 (0x00000010U) ///< bit 4
  230. #define NVIC_ISPR_SETPEND_5 (0x00000020U) ///< bit 5
  231. #define NVIC_ISPR_SETPEND_6 (0x00000040U) ///< bit 6
  232. #define NVIC_ISPR_SETPEND_7 (0x00000080U) ///< bit 7
  233. #define NVIC_ISPR_SETPEND_8 (0x00000100U) ///< bit 8
  234. #define NVIC_ISPR_SETPEND_9 (0x00000200U) ///< bit 9
  235. #define NVIC_ISPR_SETPEND_10 (0x00000400U) ///< bit 10
  236. #define NVIC_ISPR_SETPEND_11 (0x00000800U) ///< bit 11
  237. #define NVIC_ISPR_SETPEND_12 (0x00001000U) ///< bit 12
  238. #define NVIC_ISPR_SETPEND_13 (0x00002000U) ///< bit 13
  239. #define NVIC_ISPR_SETPEND_14 (0x00004000U) ///< bit 14
  240. #define NVIC_ISPR_SETPEND_15 (0x00008000U) ///< bit 15
  241. #define NVIC_ISPR_SETPEND_16 (0x00010000U) ///< bit 16
  242. #define NVIC_ISPR_SETPEND_17 (0x00020000U) ///< bit 17
  243. #define NVIC_ISPR_SETPEND_18 (0x00040000U) ///< bit 18
  244. #define NVIC_ISPR_SETPEND_19 (0x00080000U) ///< bit 19
  245. #define NVIC_ISPR_SETPEND_20 (0x00100000U) ///< bit 20
  246. #define NVIC_ISPR_SETPEND_21 (0x00200000U) ///< bit 21
  247. #define NVIC_ISPR_SETPEND_22 (0x00400000U) ///< bit 22
  248. #define NVIC_ISPR_SETPEND_23 (0x00800000U) ///< bit 23
  249. #define NVIC_ISPR_SETPEND_24 (0x01000000U) ///< bit 24
  250. #define NVIC_ISPR_SETPEND_25 (0x02000000U) ///< bit 25
  251. #define NVIC_ISPR_SETPEND_26 (0x04000000U) ///< bit 26
  252. #define NVIC_ISPR_SETPEND_27 (0x08000000U) ///< bit 27
  253. #define NVIC_ISPR_SETPEND_28 (0x10000000U) ///< bit 28
  254. #define NVIC_ISPR_SETPEND_29 (0x20000000U) ///< bit 29
  255. #define NVIC_ISPR_SETPEND_30 (0x40000000U) ///< bit 30
  256. #define NVIC_ISPR_SETPEND_31 (0x80000000U) ///< bit 31
  257. ////////////////////////////////////////////////////////////////////////////////
  258. /// @brief NVIC_ICPR Register Bit Definition
  259. ////////////////////////////////////////////////////////////////////////////////
  260. #define NVIC_ICPR_CLRPEND (0xFFFFFFFFU) ///< Interrupt clear-pending bits
  261. #define NVIC_ICPR_CLRPEND_0 (0x00000001U) ///< bit 0
  262. #define NVIC_ICPR_CLRPEND_1 (0x00000002U) ///< bit 1
  263. #define NVIC_ICPR_CLRPEND_2 (0x00000004U) ///< bit 2
  264. #define NVIC_ICPR_CLRPEND_3 (0x00000008U) ///< bit 3
  265. #define NVIC_ICPR_CLRPEND_4 (0x00000010U) ///< bit 4
  266. #define NVIC_ICPR_CLRPEND_5 (0x00000020U) ///< bit 5
  267. #define NVIC_ICPR_CLRPEND_6 (0x00000040U) ///< bit 6
  268. #define NVIC_ICPR_CLRPEND_7 (0x00000080U) ///< bit 7
  269. #define NVIC_ICPR_CLRPEND_8 (0x00000100U) ///< bit 8
  270. #define NVIC_ICPR_CLRPEND_9 (0x00000200U) ///< bit 9
  271. #define NVIC_ICPR_CLRPEND_10 (0x00000400U) ///< bit 10
  272. #define NVIC_ICPR_CLRPEND_11 (0x00000800U) ///< bit 11
  273. #define NVIC_ICPR_CLRPEND_12 (0x00001000U) ///< bit 12
  274. #define NVIC_ICPR_CLRPEND_13 (0x00002000U) ///< bit 13
  275. #define NVIC_ICPR_CLRPEND_14 (0x00004000U) ///< bit 14
  276. #define NVIC_ICPR_CLRPEND_15 (0x00008000U) ///< bit 15
  277. #define NVIC_ICPR_CLRPEND_16 (0x00010000U) ///< bit 16
  278. #define NVIC_ICPR_CLRPEND_17 (0x00020000U) ///< bit 17
  279. #define NVIC_ICPR_CLRPEND_18 (0x00040000U) ///< bit 18
  280. #define NVIC_ICPR_CLRPEND_19 (0x00080000U) ///< bit 19
  281. #define NVIC_ICPR_CLRPEND_20 (0x00100000U) ///< bit 20
  282. #define NVIC_ICPR_CLRPEND_21 (0x00200000U) ///< bit 21
  283. #define NVIC_ICPR_CLRPEND_22 (0x00400000U) ///< bit 22
  284. #define NVIC_ICPR_CLRPEND_23 (0x00800000U) ///< bit 23
  285. #define NVIC_ICPR_CLRPEND_24 (0x01000000U) ///< bit 24
  286. #define NVIC_ICPR_CLRPEND_25 (0x02000000U) ///< bit 25
  287. #define NVIC_ICPR_CLRPEND_26 (0x04000000U) ///< bit 26
  288. #define NVIC_ICPR_CLRPEND_27 (0x08000000U) ///< bit 27
  289. #define NVIC_ICPR_CLRPEND_28 (0x10000000U) ///< bit 28
  290. #define NVIC_ICPR_CLRPEND_29 (0x20000000U) ///< bit 29
  291. #define NVIC_ICPR_CLRPEND_30 (0x40000000U) ///< bit 30
  292. #define NVIC_ICPR_CLRPEND_31 (0x80000000U) ///< bit 31
  293. ////////////////////////////////////////////////////////////////////////////////
  294. /// @brief NVIC_IABR Register Bit Definition
  295. ////////////////////////////////////////////////////////////////////////////////
  296. #define NVIC_IABR_ACTIVE (0xFFFFFFFFU) ///< Interrupt active flags
  297. #define NVIC_IABR_ACTIVE_0 (0x00000001U) ///< bit 0
  298. #define NVIC_IABR_ACTIVE_1 (0x00000002U) ///< bit 1
  299. #define NVIC_IABR_ACTIVE_2 (0x00000004U) ///< bit 2
  300. #define NVIC_IABR_ACTIVE_3 (0x00000008U) ///< bit 3
  301. #define NVIC_IABR_ACTIVE_4 (0x00000010U) ///< bit 4
  302. #define NVIC_IABR_ACTIVE_5 (0x00000020U) ///< bit 5
  303. #define NVIC_IABR_ACTIVE_6 (0x00000040U) ///< bit 6
  304. #define NVIC_IABR_ACTIVE_7 (0x00000080U) ///< bit 7
  305. #define NVIC_IABR_ACTIVE_8 (0x00000100U) ///< bit 8
  306. #define NVIC_IABR_ACTIVE_9 (0x00000200U) ///< bit 9
  307. #define NVIC_IABR_ACTIVE_10 (0x00000400U) ///< bit 10
  308. #define NVIC_IABR_ACTIVE_11 (0x00000800U) ///< bit 11
  309. #define NVIC_IABR_ACTIVE_12 (0x00001000U) ///< bit 12
  310. #define NVIC_IABR_ACTIVE_13 (0x00002000U) ///< bit 13
  311. #define NVIC_IABR_ACTIVE_14 (0x00004000U) ///< bit 14
  312. #define NVIC_IABR_ACTIVE_15 (0x00008000U) ///< bit 15
  313. #define NVIC_IABR_ACTIVE_16 (0x00010000U) ///< bit 16
  314. #define NVIC_IABR_ACTIVE_17 (0x00020000U) ///< bit 17
  315. #define NVIC_IABR_ACTIVE_18 (0x00040000U) ///< bit 18
  316. #define NVIC_IABR_ACTIVE_19 (0x00080000U) ///< bit 19
  317. #define NVIC_IABR_ACTIVE_20 (0x00100000U) ///< bit 20
  318. #define NVIC_IABR_ACTIVE_21 (0x00200000U) ///< bit 21
  319. #define NVIC_IABR_ACTIVE_22 (0x00400000U) ///< bit 22
  320. #define NVIC_IABR_ACTIVE_23 (0x00800000U) ///< bit 23
  321. #define NVIC_IABR_ACTIVE_24 (0x01000000U) ///< bit 24
  322. #define NVIC_IABR_ACTIVE_25 (0x02000000U) ///< bit 25
  323. #define NVIC_IABR_ACTIVE_26 (0x04000000U) ///< bit 26
  324. #define NVIC_IABR_ACTIVE_27 (0x08000000U) ///< bit 27
  325. #define NVIC_IABR_ACTIVE_28 (0x10000000U) ///< bit 28
  326. #define NVIC_IABR_ACTIVE_29 (0x20000000U) ///< bit 29
  327. #define NVIC_IABR_ACTIVE_30 (0x40000000U) ///< bit 30
  328. #define NVIC_IABR_ACTIVE_31 (0x80000000U) ///< bit 31
  329. ////////////////////////////////////////////////////////////////////////////////
  330. /// @brief NVIC_PRI0 Register Bit Definition
  331. ////////////////////////////////////////////////////////////////////////////////
  332. #define NVIC_IPR0_PRI_0 (0x000000FFU) ///< Priority of interrupt 0
  333. #define NVIC_IPR0_PRI_1 (0x0000FF00U) ///< Priority of interrupt 1
  334. #define NVIC_IPR0_PRI_2 (0x00FF0000U) ///< Priority of interrupt 2
  335. #define NVIC_IPR0_PRI_3 (0xFF000000U) ///< Priority of interrupt 3
  336. ////////////////////////////////////////////////////////////////////////////////
  337. /// @brief NVIC_PRI1 Register Bit Definition
  338. ////////////////////////////////////////////////////////////////////////////////
  339. #define NVIC_IPR1_PRI_4 (0x000000FFU) ///< Priority of interrupt 4
  340. #define NVIC_IPR1_PRI_5 (0x0000FF00U) ///< Priority of interrupt 5
  341. #define NVIC_IPR1_PRI_6 (0x00FF0000U) ///< Priority of interrupt 6
  342. #define NVIC_IPR1_PRI_7 (0xFF000000U) ///< Priority of interrupt 7
  343. ////////////////////////////////////////////////////////////////////////////////
  344. /// @brief NVIC_PRI2 Register Bit Definition
  345. ////////////////////////////////////////////////////////////////////////////////
  346. #define NVIC_IPR2_PRI_8 (0x000000FFU) ///< Priority of interrupt 8
  347. #define NVIC_IPR2_PRI_9 (0x0000FF00U) ///< Priority of interrupt 9
  348. #define NVIC_IPR2_PRI_10 (0x00FF0000U) ///< Priority of interrupt 10
  349. #define NVIC_IPR2_PRI_11 (0xFF000000U) ///< Priority of interrupt 11
  350. ////////////////////////////////////////////////////////////////////////////////
  351. /// @brief NVIC_PRI3 Register Bit Definition
  352. ////////////////////////////////////////////////////////////////////////////////
  353. #define NVIC_IPR3_PRI_12 (0x000000FFU) ///< Priority of interrupt 12
  354. #define NVIC_IPR3_PRI_13 (0x0000FF00U) ///< Priority of interrupt 13
  355. #define NVIC_IPR3_PRI_14 (0x00FF0000U) ///< Priority of interrupt 14
  356. #define NVIC_IPR3_PRI_15 (0xFF000000U) ///< Priority of interrupt 15
  357. ////////////////////////////////////////////////////////////////////////////////
  358. /// @brief NVIC_PRI4 Register Bit Definition
  359. ////////////////////////////////////////////////////////////////////////////////
  360. #define NVIC_IPR4_PRI_16 (0x000000FFU) ///< Priority of interrupt 16
  361. #define NVIC_IPR4_PRI_17 (0x0000FF00U) ///< Priority of interrupt 17
  362. #define NVIC_IPR4_PRI_18 (0x00FF0000U) ///< Priority of interrupt 18
  363. #define NVIC_IPR4_PRI_19 (0xFF000000U) ///< Priority of interrupt 19
  364. ////////////////////////////////////////////////////////////////////////////////
  365. /// @brief NVIC_PRI5 Register Bit Definition
  366. ////////////////////////////////////////////////////////////////////////////////
  367. #define NVIC_IPR5_PRI_20 (0x000000FFU) ///< Priority of interrupt 20
  368. #define NVIC_IPR5_PRI_21 (0x0000FF00U) ///< Priority of interrupt 21
  369. #define NVIC_IPR5_PRI_22 (0x00FF0000U) ///< Priority of interrupt 22
  370. #define NVIC_IPR5_PRI_23 (0xFF000000U) ///< Priority of interrupt 23
  371. ////////////////////////////////////////////////////////////////////////////////
  372. /// @brief NVIC_PRI6 Register Bit Definition
  373. ////////////////////////////////////////////////////////////////////////////////
  374. #define NVIC_IPR6_PRI_24 (0x000000FFU) ///< Priority of interrupt 24
  375. #define NVIC_IPR6_PRI_25 (0x0000FF00U) ///< Priority of interrupt 25
  376. #define NVIC_IPR6_PRI_26 (0x00FF0000U) ///< Priority of interrupt 26
  377. #define NVIC_IPR6_PRI_27 (0xFF000000U) ///< Priority of interrupt 27
  378. ////////////////////////////////////////////////////////////////////////////////
  379. /// @brief NVIC_PRI7 Register Bit Definition
  380. ////////////////////////////////////////////////////////////////////////////////
  381. #define NVIC_IPR7_PRI_28 (0x000000FFU) ///< Priority of interrupt 28
  382. #define NVIC_IPR7_PRI_29 (0x0000FF00U) ///< Priority of interrupt 29
  383. #define NVIC_IPR7_PRI_30 (0x00FF0000U) ///< Priority of interrupt 30
  384. #define NVIC_IPR7_PRI_31 (0xFF000000U) ///< Priority of interrupt 31
  385. ////////////////////////////////////////////////////////////////////////////////
  386. /// @brief NVIC_PRI8 Register Bit Definition
  387. ////////////////////////////////////////////////////////////////////////////////
  388. #define NVIC_IPR7_PRI_32 (0x000000FFU) ///< Priority of interrupt 32
  389. #define NVIC_IPR7_PRI_33 (0x0000FF00U) ///< Priority of interrupt 33
  390. #define NVIC_IPR7_PRI_34 (0x00FF0000U) ///< Priority of interrupt 34
  391. #define NVIC_IPR7_PRI_35 (0xFF000000U) ///< Priority of interrupt 35
  392. ////////////////////////////////////////////////////////////////////////////////
  393. /// @brief NVIC_PRI9 Register Bit Definition
  394. ////////////////////////////////////////////////////////////////////////////////
  395. #define NVIC_IPR7_PRI_36 (0x000000FFU) ///< Priority of interrupt 36
  396. #define NVIC_IPR7_PRI_37 (0x0000FF00U) ///< Priority of interrupt 37
  397. #define NVIC_IPR7_PRI_38 (0x00FF0000U) ///< Priority of interrupt 38
  398. #define NVIC_IPR7_PRI_39 (0xFF000000U) ///< Priority of interrupt 39
  399. ////////////////////////////////////////////////////////////////////////////////
  400. /// @brief NVIC_PRI10 Register Bit Definition
  401. ////////////////////////////////////////////////////////////////////////////////
  402. #define NVIC_IPR7_PRI_40 (0x000000FFU) ///< Priority of interrupt 40
  403. #define NVIC_IPR7_PRI_41 (0x0000FF00U) ///< Priority of interrupt 41
  404. #define NVIC_IPR7_PRI_42 (0x00FF0000U) ///< Priority of interrupt 42
  405. #define NVIC_IPR7_PRI_43 (0xFF000000U) ///< Priority of interrupt 43
  406. ////////////////////////////////////////////////////////////////////////////////
  407. /// @brief NVIC_PRI11 Register Bit Definition
  408. ////////////////////////////////////////////////////////////////////////////////
  409. #define NVIC_IPR7_PRI_44 (0x000000FFU) ///< Priority of interrupt 44
  410. #define NVIC_IPR7_PRI_45 (0x0000FF00U) ///< Priority of interrupt 45
  411. #define NVIC_IPR7_PRI_46 (0x00FF0000U) ///< Priority of interrupt 46
  412. #define NVIC_IPR7_PRI_47 (0xFF000000U) ///< Priority of interrupt 47
  413. ////////////////////////////////////////////////////////////////////////////////
  414. /// @brief SCB_CPUID Register Bit Definition
  415. ////////////////////////////////////////////////////////////////////////////////
  416. #define SCB_CPUID_REVISION (0x0000000FU) ///< Implementation defined revision number
  417. #define SCB_CPUID_PARTNO (0x0000FFF0U) ///< Number of processor within family
  418. #define SCB_CPUID_Constant (0x000F0000U) ///< Reads as 0x0F
  419. #define SCB_CPUID_VARIANT (0x00F00000U) ///< Implementation defined variant number
  420. #define SCB_CPUID_IMPLEMENTER (0xFF000000U) ///< Implementer code. ARM is 0x41
  421. ////////////////////////////////////////////////////////////////////////////////
  422. /// @brief SCB_ICSR Register Bit Definition
  423. ////////////////////////////////////////////////////////////////////////////////
  424. #define SCB_ICSR_VECTACTIVE (0x000001FFU) ///< Active ISR number field
  425. #define SCB_ICSR_RETTOBASE (0x00000800U) ///< All active exceptions minus the IPSR_current_exception yields the empty set
  426. #define SCB_ICSR_VECTPENDING (0x003FF000U) ///< Pending ISR number field
  427. #define SCB_ICSR_ISRPENDING (0x00400000U) ///< Interrupt pending flag
  428. #define SCB_ICSR_ISRPREEMPT (0x00800000U) ///< It indicates that a pending interrupt becomes active in the next running cycle
  429. #define SCB_ICSR_PENDSTCLR (0x02000000U) ///< Clear pending SysTick bit
  430. #define SCB_ICSR_PENDSTSET (0x04000000U) ///< Set pending SysTick bit
  431. #define SCB_ICSR_PENDSVCLR (0x08000000U) ///< Clear pending pendSV bit
  432. #define SCB_ICSR_PENDSVSET (0x10000000U) ///< Set pending pendSV bit
  433. #define SCB_ICSR_NMIPENDSET (0x80000000U) ///< Set pending NMI bit
  434. ////////////////////////////////////////////////////////////////////////////////
  435. /// @brief SCB_VTOR Register Bit Definition
  436. ////////////////////////////////////////////////////////////////////////////////
  437. #define SCB_VTOR_TBLOFF (0x1FFFFF80U) ///< Vector table base offset field
  438. #define SCB_VTOR_TBLBASE (0x20000000U) ///< Table base in code(0) or RAM(1)
  439. ////////////////////////////////////////////////////////////////////////////////
  440. /// @brief SCB_AIRCR Register Bit Definition
  441. ////////////////////////////////////////////////////////////////////////////////
  442. #define SCB_AIRCR_VECTRESET (0x00000001U) ///< System Reset bit
  443. #define SCB_AIRCR_VECTCLRACTIVE (0x00000002U) ///< Clear active vector bit
  444. #define SCB_AIRCR_SYSRESETREQ (0x00000004U) ///< Requests chip control logic to generate a reset
  445. #define SCB_AIRCR_PRIGROUP (0x00000700U) ///< PRIGROUP[2:0] bits (Priority group)
  446. #define SCB_AIRCR_PRIGROUP_0 (0x00000100U) ///< Bit 0
  447. #define SCB_AIRCR_PRIGROUP_1 (0x00000200U) ///< Bit 1
  448. #define SCB_AIRCR_PRIGROUP_2 (0x00000400U) ///< Bit 2
  449. #define SCB_AIRCR_PRIGROUP0 (0x00000000U) ///< Priority group=0 (7 bits of pre-emption priority, 1 bit of subpriority)
  450. #define SCB_AIRCR_PRIGROUP1 (0x00000100U) ///< Priority group=1 (6 bits of pre-emption priority, 2 bits of subpriority)
  451. #define SCB_AIRCR_PRIGROUP2 (0x00000200U) ///< Priority group=2 (5 bits of pre-emption priority, 3 bits of subpriority)
  452. #define SCB_AIRCR_PRIGROUP3 (0x00000300U) ///< Priority group=3 (4 bits of pre-emption priority, 4 bits of subpriority)
  453. #define SCB_AIRCR_PRIGROUP4 (0x00000400U) ///< Priority group=4 (3 bits of pre-emption priority, 5 bits of subpriority)
  454. #define SCB_AIRCR_PRIGROUP5 (0x00000500U) ///< Priority group=5 (2 bits of pre-emption priority, 6 bits of subpriority)
  455. #define SCB_AIRCR_PRIGROUP6 (0x00000600U) ///< Priority group=6 (1 bit of pre-emption priority, 7 bits of subpriority)
  456. #define SCB_AIRCR_PRIGROUP7 (0x00000700U) ///< Priority group=7 (no pre-emption priority, 8 bits of subpriority)
  457. #define SCB_AIRCR_ENDIANESS (0x00008000U) ///< Data endianness bit
  458. #define SCB_AIRCR_VECTKEY (0xFFFF0000U) ///< Register key (VECTKEY) - Reads as 0xFA05 (VECTKEYSTAT)
  459. ////////////////////////////////////////////////////////////////////////////////
  460. /// @brief SCB_SCR Register Bit Definition
  461. ////////////////////////////////////////////////////////////////////////////////
  462. #define SCB_SCR_SLEEPONEXIT (0x02U) ///< Sleep on exit bit
  463. #define SCB_SCR_SLEEPDEEP (0x04U) ///< Sleep deep bit
  464. #define SCB_SCR_SEVONPEND (0x10U) ///< Wake up from WFE
  465. ////////////////////////////////////////////////////////////////////////////////
  466. /// @brief SCB_CCR Register Bit Definition
  467. ////////////////////////////////////////////////////////////////////////////////
  468. #define SCB_CCR_NONBASETHRDENA (0x0001U) ///< Thread mode can be entered from any level in Handler mode by controlled return value
  469. #define SCB_CCR_USERSETMPEND (0x0002U) ///< Enables user code to write the Software Trigger Interrupt register to trigger (pend) a Main exception
  470. #define SCB_CCR_UNALIGN_TRP (0x0008U) ///< Trap for unaligned access
  471. #define SCB_CCR_DIV_0_TRP (0x0010U) ///< Trap on Divide by 0
  472. #define SCB_CCR_BFHFNMIGN (0x0100U) ///< Handlers running at priority -1 and -2
  473. #define SCB_CCR_STKALIGN (0x0200U) ///< On exception entry, the SP used prior to the exception is adjusted to be 8-byte aligned
  474. ////////////////////////////////////////////////////////////////////////////////
  475. /// @brief SCB_SHPR Register Bit Definition
  476. ////////////////////////////////////////////////////////////////////////////////
  477. #define SCB_SHPR_PRI_N (0x000000FFU) ///< Priority of system handler 4,8, and 12. Mem Manage, reserved and Debug Monitor
  478. #define SCB_SHPR_PRI_N1 (0x0000FF00U) ///< Priority of system handler 5,9, and 13. Bus Fault, reserved and reserved
  479. #define SCB_SHPR_PRI_N2 (0x00FF0000U) ///< Priority of system handler 6,10, and 14. Usage Fault, reserved and PendSV
  480. #define SCB_SHPR_PRI_N3 (0xFF000000U) ///< Priority of system handler 7,11, and 15. Reserved, SVCall and SysTick
  481. ////////////////////////////////////////////////////////////////////////////////
  482. /// @brief SCB_SHCSR Register Bit Definition
  483. ////////////////////////////////////////////////////////////////////////////////
  484. #define SCB_SHCSR_MEMFAULTACT (0x00000001U) ///< MemManage is active
  485. #define SCB_SHCSR_BUSFAULTACT (0x00000002U) ///< BusFault is active
  486. #define SCB_SHCSR_USGFAULTACT (0x00000008U) ///< UsageFault is active
  487. #define SCB_SHCSR_SVCALLACT (0x00000080U) ///< SVCall is active
  488. #define SCB_SHCSR_MONITORACT (0x00000100U) ///< Monitor is active
  489. #define SCB_SHCSR_PENDSVACT (0x00000400U) ///< PendSV is active
  490. #define SCB_SHCSR_SYSTICKACT (0x00000800U) ///< SysTick is active
  491. #define SCB_SHCSR_USGFAULTPENDED (0x00001000U) ///< Usage Fault is pended
  492. #define SCB_SHCSR_MEMFAULTPENDED (0x00002000U) ///< MemManage is pended
  493. #define SCB_SHCSR_BUSFAULTPENDED (0x00004000U) ///< Bus Fault is pended
  494. #define SCB_SHCSR_SVCALLPENDED (0x00008000U) ///< SVCall is pended
  495. #define SCB_SHCSR_MEMFAULTENA (0x00010000U) ///< MemManage enable
  496. #define SCB_SHCSR_BUSFAULTENA (0x00020000U) ///< Bus Fault enable
  497. #define SCB_SHCSR_USGFAULTENA (0x00040000U) ///< UsageFault enable
  498. ////////////////////////////////////////////////////////////////////////////////
  499. /// @brief SCB_CFSR Register Bit Definition
  500. ////////////////////////////////////////////////////////////////////////////////
  501. ///< MFSR
  502. #define SCB_CFSR_IACCVIOL (0x00000001U) ///< Instruction access violation
  503. #define SCB_CFSR_DACCVIOL (0x00000002U) ///< Data access violation
  504. #define SCB_CFSR_MUNSTKERR (0x00000008U) ///< Unstacking error
  505. #define SCB_CFSR_MSTKERR (0x00000010U) ///< Stacking error
  506. #define SCB_CFSR_MMARVALID (0x00000080U) ///< Memory Manage Address Register address valid flag
  507. ///< BFSR
  508. #define SCB_CFSR_IBUSERR (0x00000100U) ///< Instruction bus error flag
  509. #define SCB_CFSR_PRECISERR (0x00000200U) ///< Precise data bus error
  510. #define SCB_CFSR_IMPRECISERR (0x00000400U) ///< Imprecise data bus error
  511. #define SCB_CFSR_UNSTKERR (0x00000800U) ///< Unstacking error
  512. #define SCB_CFSR_STKERR (0x00001000U) ///< Stacking error
  513. #define SCB_CFSR_BFARVALID (0x00008000U) ///< Bus Fault Address Register address valid flag
  514. ///< UFSR
  515. #define SCB_CFSR_UNDEFINSTR (0x00010000U) ///< The processor attempt to excecute an undefined instruction
  516. #define SCB_CFSR_INVSTATE (0x00020000U) ///< Invalid combination of EPSR and instruction
  517. #define SCB_CFSR_INVPC (0x00040000U) ///< Attempt to load EXC_RETURN into pc illegally
  518. #define SCB_CFSR_NOCP (0x00080000U) ///< Attempt to use a coprocessor instruction
  519. #define SCB_CFSR_UNALIGNED (0x01000000U) ///< Fault occurs when there is an attempt to make an unaligned memory access
  520. #define SCB_CFSR_DIVBYZERO (0x02000000U) ///< Fault occurs when SDIV or DIV instruction is used with a divisor of 0
  521. ////////////////////////////////////////////////////////////////////////////////
  522. /// @brief SCB_HFSR Register Bit Definition
  523. ////////////////////////////////////////////////////////////////////////////////
  524. #define SCB_HFSR_VECTTBL (0x00000002U) ///< Fault occures because of vector table read on exception processing
  525. #define SCB_HFSR_FORCED (0x40000000U) ///< Hard Fault activated when a configurable Fault was received and cannot activate
  526. #define SCB_HFSR_DEBUGEVT (0x80000000U) ///< Fault related to debug
  527. ////////////////////////////////////////////////////////////////////////////////
  528. /// @brief SCB_DFSR Register Bit Definition
  529. ////////////////////////////////////////////////////////////////////////////////
  530. #define SCB_DFSR_HALTED (0x01U) ///< Halt request flag
  531. #define SCB_DFSR_BKPT (0x02U) ///< BKPT flag
  532. #define SCB_DFSR_DWTTRAP (0x04U) ///< Data Watchpoint and Trace (DWT) flag
  533. #define SCB_DFSR_VCATCH (0x08U) ///< Vector catch flag
  534. #define SCB_DFSR_EXTERNAL (0x10U) ///< External debug request flag
  535. ////////////////////////////////////////////////////////////////////////////////
  536. /// @brief SCB_MMFAR Register Bit Definition
  537. ////////////////////////////////////////////////////////////////////////////////
  538. #define SCB_MMFAR_ADDRESS (0xFFFFFFFFU) ///< Mem Manage fault address field
  539. ////////////////////////////////////////////////////////////////////////////////
  540. /// @brief SCB_BFAR Register Bit Definition
  541. ////////////////////////////////////////////////////////////////////////////////
  542. #define SCB_BFAR_ADDRESS (0xFFFFFFFFU) ///< Bus fault address field
  543. ////////////////////////////////////////////////////////////////////////////////
  544. /// @brief SCB_AFSR Register Bit Definition
  545. ////////////////////////////////////////////////////////////////////////////////
  546. #define SCB_AFSR_IMPDEF (0xFFFFFFFFU) ///< Implementation defined
  547. #endif
  548. /// @}
  549. /// @}
  550. /// @}
  551. ////////////////////////////////////////////////////////////////////////////////
  552. ////////////////////////////////////////////////////////////////////////////////