Ref_DataStructs.txt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /**************************** Data Structures ***********************************************/
  2. /** \brief Union type to access the Application Program Status Register (APSR).
  3. */
  4. typedef union
  5. {
  6. struct
  7. {
  8. #if (__CORTEX_M != 0x04)
  9. uint32_t _reserved0:27; ///< bit: 0..26 Reserved
  10. #else
  11. uint32_t _reserved0:16; ///< bit: 0..15 Reserved
  12. uint32_t GE:4; ///< bit: 16..19 Greater than or Equal flags
  13. uint32_t _reserved1:7; ///< bit: 20..26 Reserved
  14. #endif
  15. uint32_t Q:1; ///< bit: 27 Saturation condition flag
  16. uint32_t V:1; ///< bit: 28 Overflow condition code flag
  17. uint32_t C:1; ///< bit: 29 Carry condition code flag
  18. uint32_t Z:1; ///< bit: 30 Zero condition code flag
  19. uint32_t N:1; ///< bit: 31 Negative condition code flag
  20. } b; ///< Structure used for bit access
  21. uint32_t w; ///< Type used for word access
  22. } APSR_Type;
  23. /**************************************************************************************************/
  24. /** \brief Union type to access the Interrupt Program Status Register (IPSR).
  25. */
  26. typedef union
  27. {
  28. struct
  29. {
  30. uint32_t ISR:9; ///< bit: 0.. 8 Exception number
  31. uint32_t _reserved0:23; ///< bit: 9..31 Reserved
  32. } b; ///< Structure used for bit access
  33. uint32_t w; ///< Type used for word access
  34. } IPSR_Type;
  35. /**************************************************************************************************/
  36. /** \brief Union type to access the Special-Purpose Program Status Registers (xPSR).
  37. */
  38. typedef union
  39. {
  40. struct
  41. {
  42. uint32_t ISR:9; ///< bit: 0.. 8 Exception number
  43. #if (__CORTEX_M != 0x04)
  44. uint32_t _reserved0:15; ///< bit: 9..23 Reserved
  45. #else
  46. uint32_t _reserved0:7; ///< bit: 9..15 Reserved
  47. uint32_t GE:4; ///< bit: 16..19 Greater than or Equal flags
  48. uint32_t _reserved1:4; ///< bit: 20..23 Reserved
  49. #endif
  50. uint32_t T:1; ///< bit: 24 Thumb bit (read 0)
  51. uint32_t IT:2; ///< bit: 25..26 saved IT state (read 0)
  52. uint32_t Q:1; ///< bit: 27 Saturation condition flag
  53. uint32_t V:1; ///< bit: 28 Overflow condition code flag
  54. uint32_t C:1; ///< bit: 29 Carry condition code flag
  55. uint32_t Z:1; ///< bit: 30 Zero condition code flag
  56. uint32_t N:1; ///< bit: 31 Negative condition code flag
  57. } b; ///< Structure used for bit access
  58. uint32_t w; ///< Type used for word access
  59. } xPSR_Type;
  60. /**************************************************************************************************/
  61. /** \brief Union type to access the Control Registers (CONTROL).
  62. */
  63. typedef union
  64. {
  65. struct
  66. {
  67. uint32_t nPRIV:1; ///< bit: 0 Execution privilege in Thread mode
  68. uint32_t SPSEL:1; ///< bit: 1 Stack to be used
  69. uint32_t FPCA:1; ///< bit: 2 FP extension active flag
  70. uint32_t _reserved0:29; ///< bit: 3..31 Reserved
  71. } b; ///< Structure used for bit access
  72. uint32_t w; ///< Type used for word access
  73. } CONTROL_Type;
  74. /**************************************************************************************************/
  75. /** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC).
  76. */
  77. typedef struct
  78. {
  79. __IOM uint32_t ISER[8]; ///< Offset: 0x000 (R/W) Interrupt Set Enable Register
  80. uint32_t RESERVED0[24]; ///< Reserved
  81. __IOM uint32_t ICER[8]; ///< Offset: 0x080 (R/W) Interrupt Clear Enable Register
  82. uint32_t RSERVED1[24]; ///< Reserved
  83. __IOM uint32_t ISPR[8]; ///< Offset: 0x100 (R/W) Interrupt Set Pending Register
  84. uint32_t RESERVED2[24]; ///< Reserved
  85. __IOM uint32_t ICPR[8]; ///< Offset: 0x180 (R/W) Interrupt Clear Pending Register
  86. uint32_t RESERVED3[24]; ///< Reserved
  87. __IOM uint32_t IABR[8]; ///< Offset: 0x200 (R/W) Interrupt Active bit Register
  88. uint32_t RESERVED4[56]; ///< Reserved
  89. __IOM uint8_t IP[240]; ///< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide)
  90. uint32_t RESERVED5[644]; ///< Reserved
  91. __OM uint32_t STIR; ///< Offset: 0xE00 ( /W) Software Trigger Interrupt Register
  92. } NVIC_Type;
  93. /**************************************************************************************************/
  94. /** \brief Structure type to access the System Control Block (SCB).
  95. */
  96. typedef struct
  97. {
  98. __IM uint32_t CPUID; ///< Offset: 0x000 (R/ ) CPUID Base Register
  99. __IOM uint32_t ICSR; ///< Offset: 0x004 (R/W) Interrupt Control and State Register
  100. __IOM uint32_t VTOR; ///< Offset: 0x008 (R/W) Vector Table Offset Register
  101. __IOM uint32_t AIRCR; ///< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register
  102. __IOM uint32_t SCR; ///< Offset: 0x010 (R/W) System Control Register
  103. __IOM uint32_t CCR; ///< Offset: 0x014 (R/W) Configuration Control Register
  104. __IOM uint8_t SHP[12]; ///< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15)
  105. __IOM uint32_t SHCSR; ///< Offset: 0x024 (R/W) System Handler Control and State Register
  106. __IOM uint32_t CFSR; ///< Offset: 0x028 (R/W) Configurable Fault Status Register
  107. __IOM uint32_t HFSR; ///< Offset: 0x02C (R/W) HardFault Status Register
  108. __IOM uint32_t DFSR; ///< Offset: 0x030 (R/W) Debug Fault Status Register
  109. __IOM uint32_t MMFAR; ///< Offset: 0x034 (R/W) MemManage Fault Address Register
  110. __IOM uint32_t BFAR; ///< Offset: 0x038 (R/W) BusFault Address Register
  111. __IOM uint32_t AFSR; ///< Offset: 0x03C (R/W) Auxiliary Fault Status Register
  112. __IM uint32_t PFR[2]; ///< Offset: 0x040 (R/ ) Processor Feature Register
  113. __IM uint32_t DFR; ///< Offset: 0x048 (R/ ) Debug Feature Register
  114. __IM uint32_t ADR; ///< Offset: 0x04C (R/ ) Auxiliary Feature Register
  115. __IM uint32_t MMFR[4]; ///< Offset: 0x050 (R/ ) Memory Model Feature Register
  116. __IM uint32_t ISAR[5]; ///< Offset: 0x060 (R/ ) Instruction Set Attributes Register
  117. uint32_t RESERVED0[5]; ///< Reserved
  118. __IOM uint32_t CPACR; ///< Offset: 0x088 (R/W) Coprocessor Access Control Register
  119. } SCB_Type;
  120. /**************************************************************************************************/
  121. /** \brief Structure type to access the System Control and ID Register not in the SCB.
  122. */
  123. typedef struct
  124. {
  125. uint32_t RESERVED0[1]; /*!< Reserved */
  126. __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register
  127. \note available for Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M33, Cortex-M33P, SecureCore SC300 */
  128. __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register
  129. \note available for Cortex-M1, Cortex-M3 , Cortex-M4, Cortex-M7, Cortex-M33, Cortex-M33P, SecureCore SC000, SecureCore SC300 */
  130. __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register
  131. \note available for Cortex-M33, Cortex-M33P */
  132. } SCnSCB_Type;
  133. /**************************************************************************************************/
  134. /** \brief Structure type to access the Implementation Control Block Register (ICB).
  135. \note replaces SCnSCB_Type (only Cortex-M55)
  136. */
  137. typedef struct
  138. {
  139. uint32_t RESERVED0[1U];
  140. __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */
  141. __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */
  142. __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */
  143. } ICB_Type;
  144. /**************************************************************************************************/
  145. /** \brief Structure type to access the System Timer (SysTick).
  146. */
  147. typedef struct
  148. {
  149. __IOM uint32_t CTRL; ///< Offset: 0x000 (R/W) SysTick Control and Status Register
  150. __IOM uint32_t LOAD; ///< Offset: 0x004 (R/W) SysTick Reload Value Register
  151. __IOM uint32_t VAL; ///< Offset: 0x008 (R/W) SysTick Current Value Register
  152. __IM uint32_t CALIB; ///< Offset: 0x00C (R/ ) SysTick Calibration Register
  153. } SysTick_Type;
  154. /**************************************************************************************************/
  155. /** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM).
  156. */
  157. typedef struct
  158. {
  159. __OM union
  160. {
  161. __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */
  162. __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */
  163. __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */
  164. } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */
  165. // uint32_t RESERVED0[864U];
  166. __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */
  167. // uint32_t RESERVED1[15U];
  168. __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */
  169. // uint32_t RESERVED2[15U];
  170. __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */
  171. // uint32_t RESERVED3[29U];
  172. __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */
  173. __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */
  174. __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */
  175. // uint32_t RESERVED4[43U];
  176. __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */
  177. __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */
  178. // uint32_t RESERVED5[1U];
  179. __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register (Cortex-M33 only) */
  180. // uint32_t RESERVED6[4U];
  181. __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */
  182. __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */
  183. __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */
  184. __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */
  185. __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */
  186. __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */
  187. __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */
  188. __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */
  189. __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */
  190. __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */
  191. __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */
  192. __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */
  193. } ITM_Type;
  194. /**************************************************************************************************/
  195. /** \brief Structure type to access the Memory Protection Unit (MPU).
  196. */
  197. typedef struct
  198. {
  199. __IM uint32_t TYPE; ///< Offset: 0x000 (R/ ) MPU Type Register
  200. __IOM uint32_t CTRL; ///< Offset: 0x004 (R/W) MPU Control Register
  201. __IOM uint32_t RNR; ///< Offset: 0x008 (R/W) MPU Region RNRber Register
  202. __IOM uint32_t RBAR; ///< Offset: 0x00C (R/W) MPU Region Base Address Register
  203. __IOM uint32_t RASR; ///< Offset: 0x010 (R/W) MPU Region Attribute and Size Register
  204. __IOM uint32_t RBAR_A1; ///< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register
  205. __IOM uint32_t RASR_A1; ///< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register
  206. __IOM uint32_t RBAR_A2; ///< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register
  207. __IOM uint32_t RASR_A2; ///< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register
  208. __IOM uint32_t RBAR_A3; ///< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register
  209. __IOM uint32_t RASR_A3; ///< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register
  210. } MPU_Type;
  211. /**************************************************************************************************/
  212. /** \brief Structure type to access the Floating Point Unit (FPU).
  213. */
  214. typedef struct
  215. {
  216. uint32_t RESERVED0[1]; ///< Reserved
  217. __IOM uint32_t FPCCR; ///< Offset: 0x004 (R/W) Floating-Point Context Control Register
  218. __IOM uint32_t FPCAR; ///< Offset: 0x008 (R/W) Floating-Point Context Address Register
  219. __IOM uint32_t FPDSCR; ///< Offset: 0x00C (R/W) Floating-Point Default Status Control Register
  220. __IM uint32_t MVFR0; ///< Offset: 0x010 (R/ ) Media and FP Feature Register 0
  221. __IM uint32_t MVFR1; ///< Offset: 0x014 (R/ ) Media and FP Feature Register 1
  222. } FPU_Type;
  223. /**************************************************************************************************/
  224. /** \brief Structure type to access the Core Debug Register (CoreDebug).
  225. */
  226. typedef struct
  227. {
  228. __IOM uint32_t DHCSR; ///< Offset: 0x000 (R/W) Debug Halting Control and Status Register
  229. __OM uint32_t DCRSR; ///< Offset: 0x004 ( /W) Debug Core Register Selector Register
  230. __IOM uint32_t DCRDR; ///< Offset: 0x008 (R/W) Debug Core Register Data Register
  231. __IOM uint32_t DEMCR; ///< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register
  232. } CoreDebug_Type;
  233. /**************************************************************************************************/
  234. /** \brief Structure type to access the Data Watchpoint and Trace Register (DWT).
  235. */
  236. typedef struct
  237. {
  238. __IOM uint32_t CTRL; ///< Offset: 0x000 (R/W) Control Register
  239. __IOM uint32_t CYCCNT; ///< Offset: 0x004 (R/W) Cycle Count Register
  240. __IOM uint32_t CPICNT; ///< Offset: 0x008 (R/W) CPI Count Register
  241. __IOM uint32_t EXCCNT; ///< Offset: 0x00C (R/W) Exception Overhead Count Register
  242. __IOM uint32_t SLEEPCNT; ///< Offset: 0x010 (R/W) Sleep Count Register
  243. __IOM uint32_t LSUCNT; ///< Offset: 0x014 (R/W) LSU Count Register
  244. __IOM uint32_t FOLDCNT; ///< Offset: 0x018 (R/W) Folded-instruction Count Register
  245. __IM uint32_t PCSR; ///< Offset: 0x01C (R/ ) Program Counter Sample Register
  246. __IOM uint32_t COMP0; ///< Offset: 0x020 (R/W) Comparator Register 0
  247. __IOM uint32_t MASK0; ///< Offset: 0x024 (R/W) Mask Register 0
  248. __IOM uint32_t FUNCTION0; ///< Offset: 0x028 (R/W) Function Register 0
  249. uint32_t RESERVED0[1]; ///< Reserved
  250. __IOM uint32_t COMP1; ///< Offset: 0x030 (R/W) Comparator Register 1
  251. __IOM uint32_t MASK1; ///< Offset: 0x034 (R/W) Mask Register 1
  252. __IOM uint32_t FUNCTION1; ///< Offset: 0x038 (R/W) Function Register 1
  253. uint32_t RESERVED1[1]; ///< Reserved
  254. __IOM uint32_t COMP2; ///< Offset: 0x040 (R/W) Comparator Register 2
  255. __IOM uint32_t MASK2; ///< Offset: 0x044 (R/W) Mask Register 2
  256. __IOM uint32_t FUNCTION2; ///< Offset: 0x048 (R/W) Function Register 2
  257. uint32_t RESERVED2[1]; ///< Reserved
  258. __IOM uint32_t COMP3; ///< Offset: 0x050 (R/W) Comparator Register 3
  259. __IOM uint32_t MASK3; ///< Offset: 0x054 (R/W) Mask Register 3
  260. __IOM uint32_t FUNCTION3; ///< Offset: 0x058 (R/W) Function Register 3
  261. } DWT_Type;
  262. /**************************************************************************************************/
  263. /** \brief Structure type to access the Trace Port Interface Register (TPI).
  264. */
  265. typedef struct
  266. {
  267. __IOM uint32_t SSPSR; ///< Offset: 0x000 (R/ ) Supported Parallel Port Size Register
  268. __IOM uint32_t CSPSR; ///< Offset: 0x004 (R/W) Current Parallel Port Size Register
  269. uint32_t RESERVED0[2]; ///< Reserved
  270. __IOM uint32_t ACPR; ///< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register
  271. uint32_t RESERVED1[55]; ///< Reserved
  272. __IOM uint32_t SPPR; ///< Offset: 0x0F0 (R/W) Selected Pin Protocol Register
  273. uint32_t RESERVED2[131]; ///< Reserved
  274. __IM uint32_t FFSR; ///< Offset: 0x300 (R/ ) Formatter and Flush Status Register
  275. __IOM uint32_t FFCR; ///< Offset: 0x304 (R/W) Formatter and Flush Control Register
  276. __IM uint32_t FSCR; ///< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register
  277. uint32_t RESERVED3[759]; ///< Reserved
  278. __IM uint32_t TRIGGER; ///< Offset: 0xEE8 (R/ ) TRIGGER
  279. __IM uint32_t FIFO0; ///< Offset: 0xEEC (R/ ) Integration ETM Data
  280. __IM uint32_t ITATBCTR2; ///< Offset: 0xEF0 (R/ ) ITATBCTR2
  281. uint32_t RESERVED4[1]; ///< Reserved
  282. __IM uint32_t ITATBCTR0; ///< Offset: 0xEF8 (R/ ) ITATBCTR0
  283. __IM uint32_t FIFO1; ///< Offset: 0xEFC (R/ ) Integration ITM Data
  284. __IOM uint32_t ITCTRL; ///< Offset: 0xF00 (R/W) Integration Mode Control
  285. uint32_t RESERVED5[39]; ///< Reserved
  286. __IOM uint32_t CLAIMSET; ///< Offset: 0xFA0 (R/W) Claim tag set
  287. __IOM uint32_t CLAIMCLR; ///< Offset: 0xFA4 (R/W) Claim tag clear
  288. uint32_t RESERVED7[8]; ///< Reserved
  289. __IM uint32_t DEVID; ///< Offset: 0xFC8 (R/ ) TPIU_DEVID
  290. __IM uint32_t DEVTYPE; ///< Offset: 0xFCC (R/ ) TPIU_DEVTYPE
  291. } TPI_Type;