ARMCM0.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /**************************************************************************//**
  2. * @file ARMCM0.h
  3. * @brief CMSIS Core Peripheral Access Layer Header File for
  4. * ARMCM0 Device Series
  5. * @version V2.02
  6. * @date 10. September 2014
  7. *
  8. * @note
  9. *
  10. ******************************************************************************/
  11. /* Copyright (c) 2011 - 2014 ARM LIMITED
  12. All rights reserved.
  13. Redistribution and use in source and binary forms, with or without
  14. modification, are permitted provided that the following conditions are met:
  15. - Redistributions of source code must retain the above copyright
  16. notice, this list of conditions and the following disclaimer.
  17. - Redistributions in binary form must reproduce the above copyright
  18. notice, this list of conditions and the following disclaimer in the
  19. documentation and/or other materials provided with the distribution.
  20. - Neither the name of ARM nor the names of its contributors may be used
  21. to endorse or promote products derived from this software without
  22. specific prior written permission.
  23. *
  24. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27. ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
  28. LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29. CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  30. SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  31. INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  32. CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  33. ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  34. POSSIBILITY OF SUCH DAMAGE.
  35. ---------------------------------------------------------------------------*/
  36. #ifndef ARMCM0_H
  37. #define ARMCM0_H
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41. /* ------------------------- Interrupt Number Definition ------------------------ */
  42. typedef enum IRQn
  43. {
  44. /* ------------------- Cortex-M0 Processor Exceptions Numbers ------------------- */
  45. NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
  46. HardFault_IRQn = -13, /*!< 3 HardFault Interrupt */
  47. SVCall_IRQn = -5, /*!< 11 SV Call Interrupt */
  48. PendSV_IRQn = -2, /*!< 14 Pend SV Interrupt */
  49. SysTick_IRQn = -1, /*!< 15 System Tick Interrupt */
  50. /* ---------------------- ARMCM0 Specific Interrupt Numbers --------------------- */
  51. WDT_IRQn = 0, /*!< Watchdog Timer Interrupt */
  52. RTC_IRQn = 1, /*!< Real Time Clock Interrupt */
  53. TIM0_IRQn = 2, /*!< Timer0 / Timer1 Interrupt */
  54. TIM2_IRQn = 3, /*!< Timer2 / Timer3 Interrupt */
  55. MCIA_IRQn = 4, /*!< MCIa Interrupt */
  56. MCIB_IRQn = 5, /*!< MCIb Interrupt */
  57. UART0_IRQn = 6, /*!< UART0 Interrupt */
  58. UART1_IRQn = 7, /*!< UART1 Interrupt */
  59. UART2_IRQn = 8, /*!< UART2 Interrupt */
  60. UART4_IRQn = 9, /*!< UART4 Interrupt */
  61. AACI_IRQn = 10, /*!< AACI / AC97 Interrupt */
  62. CLCD_IRQn = 11, /*!< CLCD Combined Interrupt */
  63. ENET_IRQn = 12, /*!< Ethernet Interrupt */
  64. USBDC_IRQn = 13, /*!< USB Device Interrupt */
  65. USBHC_IRQn = 14, /*!< USB Host Controller Interrupt */
  66. CHLCD_IRQn = 15, /*!< Character LCD Interrupt */
  67. FLEXRAY_IRQn = 16, /*!< Flexray Interrupt */
  68. CAN_IRQn = 17, /*!< CAN Interrupt */
  69. LIN_IRQn = 18, /*!< LIN Interrupt */
  70. I2C_IRQn = 19, /*!< I2C ADC/DAC Interrupt */
  71. CPU_CLCD_IRQn = 28, /*!< CPU CLCD Combined Interrupt */
  72. UART3_IRQn = 30, /*!< UART3 Interrupt */
  73. SPI_IRQn = 31, /*!< SPI Touchscreen Interrupt */
  74. } IRQn_Type;
  75. /* ================================================================================ */
  76. /* ================ Processor and Core Peripheral Section ================ */
  77. /* ================================================================================ */
  78. /* -------- Configuration of the Cortex-M0 Processor and Core Peripherals ------- */
  79. #define __CM0_REV 0x0000 /*!< Core revision r0p0 */
  80. #define __MPU_PRESENT 0 /*!< MPU present or not */
  81. #define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */
  82. #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
  83. #include "core_cm0.h" /* Processor and core peripherals */
  84. #include "system_ARMCM0.h" /* System Header */
  85. /* ================================================================================ */
  86. /* ================ Device Specific Peripheral Section ================ */
  87. /* ================================================================================ */
  88. /* ------------------- Start of section using anonymous unions ------------------ */
  89. #if defined (__CC_ARM)
  90. #pragma push
  91. #pragma anon_unions
  92. #elif defined (__ICCARM__)
  93. #pragma language=extended
  94. #elif defined (__GNUC__)
  95. /* anonymous unions are enabled by default */
  96. #elif defined (__TMS470__)
  97. /* anonymous unions are enabled by default */
  98. #elif defined (__TASKING__)
  99. #pragma warning 586
  100. #elif defined (__CSMC__)
  101. /* anonymous unions are enabled by default */
  102. #else
  103. #warning Not supported compiler type
  104. #endif
  105. /* ================================================================================ */
  106. /* ================ CPU FPGA System (CPU_SYS) ================ */
  107. /* ================================================================================ */
  108. typedef struct
  109. {
  110. __I uint32_t ID; /* Offset: 0x000 (R/ ) Board and FPGA Identifier */
  111. __IO uint32_t MEMCFG; /* Offset: 0x004 (R/W) Remap and Alias Memory Control */
  112. __I uint32_t SW; /* Offset: 0x008 (R/ ) Switch States */
  113. __IO uint32_t LED; /* Offset: 0x00C (R/W) LED Output States */
  114. __I uint32_t TS; /* Offset: 0x010 (R/ ) Touchscreen Register */
  115. __IO uint32_t CTRL1; /* Offset: 0x014 (R/W) Misc Control Functions */
  116. uint32_t RESERVED0[2];
  117. __IO uint32_t CLKCFG; /* Offset: 0x020 (R/W) System Clock Configuration */
  118. __IO uint32_t WSCFG; /* Offset: 0x024 (R/W) Flash Waitstate Configuration */
  119. __IO uint32_t CPUCFG; /* Offset: 0x028 (R/W) Processor Configuration */
  120. uint32_t RESERVED1[3];
  121. __IO uint32_t BASE; /* Offset: 0x038 (R/W) ROM Table base Address */
  122. __IO uint32_t ID2; /* Offset: 0x03C (R/W) Secondary Identification Register */
  123. } ARM_CPU_SYS_TypeDef;
  124. /* ================================================================================ */
  125. /* ================ DUT FPGA System (DUT_SYS) ================ */
  126. /* ================================================================================ */
  127. typedef struct
  128. {
  129. __I uint32_t ID; /* Offset: 0x000 (R/ ) Board and FPGA Identifier */
  130. __IO uint32_t PERCFG; /* Offset: 0x004 (R/W) Peripheral Control Signals */
  131. __I uint32_t SW; /* Offset: 0x008 (R/ ) Switch States */
  132. __IO uint32_t LED; /* Offset: 0x00C (R/W) LED Output States */
  133. __IO uint32_t SEG7; /* Offset: 0x010 (R/W) 7-segment LED Output States */
  134. __I uint32_t CNT25MHz; /* Offset: 0x014 (R/ ) Freerunning counter incrementing at 25MHz */
  135. __I uint32_t CNT100Hz; /* Offset: 0x018 (R/ ) Freerunning counter incrementing at 100Hz */
  136. } ARM_DUT_SYS_TypeDef;
  137. /* ================================================================================ */
  138. /* ================ Timer (TIM) ================ */
  139. /* ================================================================================ */
  140. typedef struct
  141. {
  142. __IO uint32_t Timer1Load; /* Offset: 0x000 (R/W) Timer 1 Load */
  143. __I uint32_t Timer1Value; /* Offset: 0x004 (R/ ) Timer 1 Counter Current Value */
  144. __IO uint32_t Timer1Control; /* Offset: 0x008 (R/W) Timer 1 Control */
  145. __O uint32_t Timer1IntClr; /* Offset: 0x00C ( /W) Timer 1 Interrupt Clear */
  146. __I uint32_t Timer1RIS; /* Offset: 0x010 (R/ ) Timer 1 Raw Interrupt Status */
  147. __I uint32_t Timer1MIS; /* Offset: 0x014 (R/ ) Timer 1 Masked Interrupt Status */
  148. __IO uint32_t Timer1BGLoad; /* Offset: 0x018 (R/W) Background Load Register */
  149. uint32_t RESERVED0[1];
  150. __IO uint32_t Timer2Load; /* Offset: 0x020 (R/W) Timer 2 Load */
  151. __I uint32_t Timer2Value; /* Offset: 0x024 (R/ ) Timer 2 Counter Current Value */
  152. __IO uint32_t Timer2Control; /* Offset: 0x028 (R/W) Timer 2 Control */
  153. __O uint32_t Timer2IntClr; /* Offset: 0x02C ( /W) Timer 2 Interrupt Clear */
  154. __I uint32_t Timer2RIS; /* Offset: 0x030 (R/ ) Timer 2 Raw Interrupt Status */
  155. __I uint32_t Timer2MIS; /* Offset: 0x034 (R/ ) Timer 2 Masked Interrupt Status */
  156. __IO uint32_t Timer2BGLoad; /* Offset: 0x038 (R/W) Background Load Register */
  157. } ARM_TIM_TypeDef;
  158. /* ================================================================================ */
  159. /* ============== Universal Asyncronous Receiver / Transmitter (UART) ============= */
  160. /* ================================================================================ */
  161. typedef struct
  162. {
  163. __IO uint32_t DR; /* Offset: 0x000 (R/W) Data */
  164. union {
  165. __I uint32_t RSR; /* Offset: 0x000 (R/ ) Receive Status */
  166. __O uint32_t ECR; /* Offset: 0x000 ( /W) Error Clear */
  167. };
  168. uint32_t RESERVED0[4];
  169. __IO uint32_t FR; /* Offset: 0x018 (R/W) Flags */
  170. uint32_t RESERVED1[1];
  171. __IO uint32_t ILPR; /* Offset: 0x020 (R/W) IrDA Low-power Counter */
  172. __IO uint32_t IBRD; /* Offset: 0x024 (R/W) Interger Baud Rate */
  173. __IO uint32_t FBRD; /* Offset: 0x028 (R/W) Fractional Baud Rate */
  174. __IO uint32_t LCR_H; /* Offset: 0x02C (R/W) Line Control */
  175. __IO uint32_t CR; /* Offset: 0x030 (R/W) Control */
  176. __IO uint32_t IFLS; /* Offset: 0x034 (R/W) Interrupt FIFO Level Select */
  177. __IO uint32_t IMSC; /* Offset: 0x038 (R/W) Interrupt Mask Set / Clear */
  178. __IO uint32_t RIS; /* Offset: 0x03C (R/W) Raw Interrupt Status */
  179. __IO uint32_t MIS; /* Offset: 0x040 (R/W) Masked Interrupt Status */
  180. __O uint32_t ICR; /* Offset: 0x044 ( /W) Interrupt Clear */
  181. __IO uint32_t DMACR; /* Offset: 0x048 (R/W) DMA Control */
  182. } ARM_UART_TypeDef;
  183. /* -------------------- End of section using anonymous unions ------------------- */
  184. #if defined (__CC_ARM)
  185. #pragma pop
  186. #elif defined (__ICCARM__)
  187. /* leave anonymous unions enabled */
  188. #elif defined (__GNUC__)
  189. /* anonymous unions are enabled by default */
  190. #elif defined (__TMS470__)
  191. /* anonymous unions are enabled by default */
  192. #elif defined (__TASKING__)
  193. #pragma warning restore
  194. #elif defined (__CSMC__)
  195. /* anonymous unions are enabled by default */
  196. #else
  197. #warning Not supported compiler type
  198. #endif
  199. /* ================================================================================ */
  200. /* ================ Peripheral memory map ================ */
  201. /* ================================================================================ */
  202. /* -------------------------- CPU FPGA memory map ------------------------------- */
  203. #define ARM_FLASH_BASE (0x00000000UL)
  204. #define ARM_RAM_BASE (0x20000000UL)
  205. #define ARM_RAM_FPGA_BASE (0x1EFF0000UL)
  206. #define ARM_CPU_CFG_BASE (0xDFFF0000UL)
  207. #define ARM_CPU_SYS_BASE (ARM_CPU_CFG_BASE + 0x00000)
  208. #define ARM_UART3_BASE (ARM_CPU_CFG_BASE + 0x05000)
  209. /* -------------------------- DUT FPGA memory map ------------------------------- */
  210. #define ARM_APB_BASE (0x40000000UL)
  211. #define ARM_AHB_BASE (0x4FF00000UL)
  212. #define ARM_DMC_BASE (0x60000000UL)
  213. #define ARM_SMC_BASE (0xA0000000UL)
  214. #define ARM_TIM0_BASE (ARM_APB_BASE + 0x02000)
  215. #define ARM_TIM2_BASE (ARM_APB_BASE + 0x03000)
  216. #define ARM_DUT_SYS_BASE (ARM_APB_BASE + 0x04000)
  217. #define ARM_UART0_BASE (ARM_APB_BASE + 0x06000)
  218. #define ARM_UART1_BASE (ARM_APB_BASE + 0x07000)
  219. #define ARM_UART2_BASE (ARM_APB_BASE + 0x08000)
  220. #define ARM_UART4_BASE (ARM_APB_BASE + 0x09000)
  221. /* ================================================================================ */
  222. /* ================ Peripheral declaration ================ */
  223. /* ================================================================================ */
  224. /* -------------------------- CPU FPGA Peripherals ------------------------------ */
  225. #define ARM_CPU_SYS ((ARM_CPU_SYS_TypeDef *) ARM_CPU_SYS_BASE)
  226. #define ARM_UART3 (( ARM_UART_TypeDef *) ARM_UART3_BASE)
  227. /* -------------------------- DUT FPGA Peripherals ------------------------------ */
  228. #define ARM_DUT_SYS ((ARM_DUT_SYS_TypeDef *) ARM_DUT_SYS_BASE)
  229. #define ARM_TIM0 (( ARM_TIM_TypeDef *) ARM_TIM0_BASE)
  230. #define ARM_TIM2 (( ARM_TIM_TypeDef *) ARM_TIM2_BASE)
  231. #define ARM_UART0 (( ARM_UART_TypeDef *) ARM_UART0_BASE)
  232. #define ARM_UART1 (( ARM_UART_TypeDef *) ARM_UART1_BASE)
  233. #define ARM_UART2 (( ARM_UART_TypeDef *) ARM_UART2_BASE)
  234. #define ARM_UART4 (( ARM_UART_TypeDef *) ARM_UART4_BASE)
  235. #ifdef __cplusplus
  236. }
  237. #endif
  238. #endif /* ARMCM0_H */