]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Nuvoton_Code/Device/Nuvoton/M2351/Include/M2351.h
Add Cortex M23 GCC and IAR ports. Add demo projects for Nuvoton NuMaker-PFM-2351.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC / Nuvoton_Code / Device / Nuvoton / M2351 / Include / M2351.h
1 /**************************************************************************//**\r
2  * @file     M2351.h\r
3  * @version  V1.0\r
4  * @brief    Peripheral Access Layer Header File\r
5  *\r
6  * @note\r
7  * Copyright (C) 2017 Nuvoton Technology Corp. All rights reserved.\r
8  *\r
9  ******************************************************************************/\r
10 \r
11 /**\r
12   \mainpage Introduction\r
13   *\r
14   *\r
15   * This user manual describes the usage of M2351 device driver\r
16   *\r
17   * <b>Disclaimer</b>\r
18   *\r
19   * The Software is furnished "AS IS", without warranty as to performance or results, and\r
20   * the entire risk as to performance or results is assumed by YOU. Nuvoton disclaims all\r
21   * warranties, express, implied or otherwise, with regard to the Software, its use, or\r
22   * operation, including without limitation any and all warranties of merchantability, fitness\r
23   * for a particular purpose, and non-infringement of intellectual property rights.\r
24   *\r
25   * <b>Copyright Notice</b>\r
26   *\r
27   * Copyright (C) 2017 Nuvoton Technology Corp. All rights reserved.\r
28   */\r
29 \r
30 \r
31 #ifndef __M2351_H__\r
32 #define __M2351_H__\r
33 \r
34 \r
35 #ifdef __cplusplus\r
36 extern "C" {\r
37 #endif\r
38 \r
39 /******************************************************************************/\r
40 /*                Processor and Core Peripherals                              */\r
41 /******************************************************************************/\r
42 /** @addtogroup CMSIS_Device CMSIS Definitions\r
43   Configuration of the Cortex-M23 Processor and Core Peripherals\r
44   @{\r
45 */\r
46 \r
47 \r
48 /*\r
49  * ==========================================================================\r
50  * ---------- Interrupt Number Definition -----------------------------------\r
51  * ==========================================================================\r
52  */\r
53 \r
54 /**\r
55  * @details  Interrupt Number Definition. The maximum of 32 Specific Interrupts are possible.\r
56  */\r
57 typedef enum IRQn\r
58 {\r
59     /******  Cortex-M0 Processor Exceptions Numbers ***************************************************/\r
60     NonMaskableInt_IRQn       = -14,      /*!< 2 Non Maskable Interrupt                             */\r
61     HardFault_IRQn            = -13,      /*!< 3 Cortex-M23 Hard Fault Interrupt                    */\r
62     SVCall_IRQn               = -5,       /*!< 11 Cortex-M23 SV Call Interrupt                      */\r
63     PendSV_IRQn               = -2,       /*!< 14 Cortex-M23 Pend SV Interrupt                      */\r
64     SysTick_IRQn              = -1,       /*!< 15 Cortex-M23 System Tick Interrupt                  */\r
65 \r
66     /******  ARMIKMCU Swift specific Interrupt Numbers ************************************************/\r
67 \r
68     BOD_IRQn                      = 0,        /*!< Brown Out detection Interrupt                    */\r
69     IRC_IRQn                      = 1,        /*!< Internal RC Interrupt                            */\r
70     PWRWU_IRQn                    = 2,        /*!< Power Down Wake Up Interrupt                     */\r
71     RAMPE_IRQn                    = 3,        /*!< SRAM parity check failed Interrupt               */\r
72     CKFAIL_IRQn                   = 4,        /*!< Clock failed Interrupt                           */\r
73     ISP_IRQn                      = 5,        /*!< FMC ISP Interrupt                                */\r
74     RTC_IRQn                      = 6,        /*!< Real Time Clock Interrupt                        */\r
75     TAMPER_IRQn                   = 7,        /*!< Tamper detection Interrupt                       */\r
76     WDT_IRQn                      = 8,        /*!< Watchdog Timer Interrupt                         */\r
77     WWDT_IRQn                     = 9,        /*!< Window Watchdog Timer Interrupt                  */\r
78     EINT0_IRQn                    = 10,       /*!< External Input 0 Interrupt                       */\r
79     EINT1_IRQn                    = 11,       /*!< External Input 1 Interrupt                       */\r
80     EINT2_IRQn                    = 12,       /*!< External Input 2 Interrupt                       */\r
81     EINT3_IRQn                    = 13,       /*!< External Input 3 Interrupt                       */\r
82     EINT4_IRQn                    = 14,       /*!< External Input 4 Interrupt                       */\r
83     EINT5_IRQn                    = 15,       /*!< External Input 5 Interrupt                       */\r
84     GPA_IRQn                      = 16,       /*!< GPIO Port A Interrupt                            */\r
85     GPB_IRQn                      = 17,       /*!< GPIO Port B Interrupt                            */\r
86     GPC_IRQn                      = 18,       /*!< GPIO Port C Interrupt                            */\r
87     GPD_IRQn                      = 19,       /*!< GPIO Port D Interrupt                            */\r
88     GPE_IRQn                      = 20,       /*!< GPIO Port E Interrupt                            */\r
89     GPF_IRQn                      = 21,       /*!< GPIO Port F Interrupt                            */\r
90     QSPI0_IRQn                    = 22,       /*!< QSPI0 Interrupt                                  */\r
91     SPI0_IRQn                     = 23,       /*!< SPI0 Interrupt                                   */\r
92     BRAKE0_IRQn                   = 24,       /*!< BRAKE0 Interrupt                                 */\r
93     EPWM0_P0_IRQn                 = 25,       /*!< EPWM0P0 Interrupt                                */\r
94     EPWM0_P1_IRQn                 = 26,       /*!< EPWM0P1 Interrupt                                */\r
95     EPWM0_P2_IRQn                 = 27,       /*!< EPWM0P2 Interrupt                                */\r
96     BRAKE1_IRQn                   = 28,       /*!< BRAKE1 Interrupt                                 */\r
97     EPWM1_P0_IRQn                 = 29,       /*!< EPWM1P0 Interrupt                                */\r
98     EPWM1_P1_IRQn                 = 30,       /*!< EPWM1P1 Interrupt                                */\r
99     EPWM1_P2_IRQn                 = 31,       /*!< EPWM1P2 Interrupt                                */\r
100     TMR0_IRQn                     = 32,       /*!< Timer 0 Interrupt                                */\r
101     TMR1_IRQn                     = 33,       /*!< Timer 1 Interrupt                                */\r
102     TMR2_IRQn                     = 34,       /*!< Timer 2 Interrupt                                */\r
103     TMR3_IRQn                     = 35,       /*!< Timer 3 Interrupt                                */\r
104     UART0_IRQn                    = 36,       /*!< UART 0 Interrupt                                 */\r
105     UART1_IRQn                    = 37,       /*!< UART 1 Interrupt                                 */\r
106     I2C0_IRQn                     = 38,       /*!< I2C 0 Interrupt                                  */\r
107     I2C1_IRQn                     = 39,       /*!< I2C 1 Interrupt                                  */\r
108     PDMA0_IRQn                    = 40,       /*!< Peripheral DMA 0 Interrupt                       */\r
109     DAC_IRQn                      = 41,       /*!< DAC Interrupt                                    */\r
110     EADC0_IRQn                    = 42,       /*!< EADC Source 0 Interrupt                          */\r
111     EADC1_IRQn                    = 43,       /*!< EADC Source 1 Interrupt                          */\r
112     ACMP01_IRQn                   = 44,       /*!< Analog Comparator 0 and 1 Interrupt              */\r
113     EADC2_IRQn                    = 46,       /*!< EADC Source 2 Interrupt                          */\r
114     EADC3_IRQn                    = 47,       /*!< EADC Source 3 Interrupt                          */\r
115     UART2_IRQn                    = 48,       /*!< UART2 Interrupt                                  */\r
116     UART3_IRQn                    = 49,       /*!< UART3 Interrupt                                  */\r
117     SPI1_IRQn                     = 51,       /*!< SPI1 Interrupt                                   */\r
118     SPI2_IRQn                     = 52,       /*!< SPI2 Interrupt                                   */\r
119     USBD_IRQn                     = 53,       /*!< USB device Interrupt                             */\r
120     USBH_IRQn                     = 54,       /*!< USB host Interrupt                               */\r
121     USBOTG_IRQn                   = 55,       /*!< USB OTG Interrupt                                */\r
122     CAN0_IRQn                     = 56,       /*!< CAN0 Interrupt                                   */\r
123     SC0_IRQn                      = 58,       /*!< Smart Card 0 Interrupt                           */\r
124     SC1_IRQn                      = 59,       /*!< Smart Card 1 Interrupt                           */\r
125     SC2_IRQn                      = 60,       /*!< Smart Card 2 Interrupt                           */\r
126     SPI3_IRQn                     = 62,       /*!< SPI3 Interrupt                                   */\r
127     SDH0_IRQn                     = 64,       /*!< SDH0 Interrupt                                   */\r
128     I2S0_IRQn                     = 68,       /*!< I2S0 Interrupt                                   */\r
129     CRPT_IRQn                     = 71,       /*!< CRPT Interrupt                                   */\r
130     GPG_IRQn                      = 72,       /*!< GPIO Port G Interrupt                            */\r
131     EINT6_IRQn                    = 73,       /*!< External Input 6 Interrupt                       */\r
132     UART4_IRQn                    = 74,       /*!< UART4 Interrupt                                  */\r
133     UART5_IRQn                    = 75,       /*!< UART5 Interrupt                                  */\r
134     USCI0_IRQn                    = 76,       /*!< USCI0 Interrupt                                  */\r
135     USCI1_IRQn                    = 77,       /*!< USCI1 Interrupt                                  */\r
136     BPWM0_IRQn                    = 78,       /*!< BPWM0 Interrupt                                  */\r
137     BPWM1_IRQn                    = 79,       /*!< BPWM1 Interrupt                                  */\r
138     I2C2_IRQn                     = 82,       /*!< I2C2 Interrupt                                   */\r
139     QEI0_IRQn                     = 84,       /*!< QEI0 Interrupt                                   */\r
140     QEI1_IRQn                     = 85,       /*!< QEI1 Interrupt                                   */\r
141     ECAP0_IRQn                    = 86,       /*!< ECAP0 Interrupt                                  */\r
142     ECAP1_IRQn                    = 87,       /*!< ECAP1 Interrupt                                  */\r
143     GPH_IRQn                      = 88,       /*!< GPIO Port H Interrupt                            */\r
144     EINT7_IRQn                    = 89,       /*!< External Input 7 Interrupt                       */\r
145     PDMA1_IRQn                    = 98,       /*!< Peripheral DMA 1 Interrupt                       */\r
146     SCU_IRQn                      = 99,       /*!< SCU Interrupt                                    */\r
147     TRNG_IRQn                     = 101       /*!< TRNG interrupt                                   */\r
148 \r
149 \r
150 } IRQn_Type;\r
151 \r
152 \r
153 /* ================================================================================ */\r
154 /* ================      Processor and Core Peripheral Section     ================ */\r
155 /* ================================================================================ */\r
156 \r
157 /* -------  Start of section using anonymous unions and disabling warnings  ------- */\r
158 #if   defined (__CC_ARM)\r
159 #pragma push\r
160 #pragma anon_unions\r
161 #elif defined (__ICCARM__)\r
162 #pragma language=extended\r
163 #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r
164 #pragma clang diagnostic push\r
165 #pragma clang diagnostic ignored "-Wc11-extensions"\r
166 #pragma clang diagnostic ignored "-Wreserved-id-macro"\r
167 #elif defined (__GNUC__)\r
168 /* anonymous unions are enabled by default */\r
169 #elif defined (__TMS470__)\r
170 /* anonymous unions are enabled by default */\r
171 #elif defined (__TASKING__)\r
172 #pragma warning 586\r
173 #elif defined (__CSMC__)\r
174 /* anonymous unions are enabled by default */\r
175 #else\r
176 #warning Not supported compiler type\r
177 #endif\r
178 \r
179 \r
180 /* --------  Configuration of the Cortex-ARMv8MBL Processor and Core Peripherals  ------- */\r
181 #define __ARMv8MBL_REV            0x0000U   /* Core revision r0p0 */\r
182 #define __SAU_PRESENT             1U        /* SAU present */\r
183 #define __SAUREGION_PRESENT       1U        /* SAU present */\r
184 #define __MPU_PRESENT             1U        /* MPU present */\r
185 #define __VTOR_PRESENT            1U        /* VTOR present */\r
186 #define __NVIC_PRIO_BITS          2U        /* Number of Bits used for Priority Levels */\r
187 #define __Vendor_SysTickConfig    0U        /* Set to 1 if different SysTick Config is used */\r
188 #define USE_ASSERT                              0U              /* Define to use Assert function or not */\r
189 \r
190 /*@}*/ /* end of group CMSIS */\r
191 \r
192 \r
193 #include "core_armv8mbl.h"                  /* Processor and core peripherals */\r
194 #include "system_M2351.h"                   /* System Header */\r
195 \r
196 /**\r
197  * Initialize the system clock\r
198  *\r
199  * @param  none\r
200  * @return none\r
201  *\r
202  * @brief  Setup the micro controller system\r
203  *         Initialize the PLL and update the SystemFrequency variable\r
204  */\r
205 extern void SystemInit(void);\r
206 \r
207 \r
208 /******************************************************************************/\r
209 /*                Device Specific Peripheral registers structures             */\r
210 /******************************************************************************/\r
211 \r
212 \r
213 #include "acmp_reg.h"\r
214 #include "bpwm_reg.h"\r
215 #include "can_reg.h"\r
216 #include "clk_reg.h"\r
217 #include "crc_reg.h"\r
218 #include "dac_reg.h"\r
219 #include "eadc_reg.h"\r
220 #include "ebi_reg.h"\r
221 #include "ecap_reg.h"\r
222 #include "fmc_reg.h"\r
223 #include "gpio_reg.h"\r
224 #include "hdiv_reg.h"\r
225 #include "i2c_reg.h"\r
226 #include "i2s_reg.h"\r
227 #include "pdma_reg.h"\r
228 #include "epwm_reg.h"\r
229 #include "qei_reg.h"\r
230 #include "rtc_reg.h"\r
231 #include "sc_reg.h"\r
232 #include "scu_reg.h"\r
233 #include "sdh_reg.h"\r
234 #include "qspi_reg.h"\r
235 #include "spi_reg.h"\r
236 #include "sys_reg.h"\r
237 #include "timer_reg.h"\r
238 #include "trng_reg.h"\r
239 #include "uart_reg.h"\r
240 #include "ui2c_reg.h"\r
241 #include "usbh_reg.h"\r
242 #include "usbd_reg.h"\r
243 #include "otg_reg.h"\r
244 #include "crpt_reg.h"\r
245 #include "uspi_reg.h"\r
246 #include "uuart_reg.h"\r
247 #include "wdt_reg.h"\r
248 #include "wwdt_reg.h"\r
249 \r
250 \r
251 /******************************************************************************/\r
252 /*                         Peripheral memory map                              */\r
253 /******************************************************************************/\r
254 /** @addtogroup PERIPHERAL_BASE Peripheral Memory Base\r
255   Memory Mapped Structure for Series Peripheral\r
256   @{\r
257  */\r
258 \r
259 \r
260 /* Peripheral and SRAM base address */\r
261 #define SRAM_BASE            (0x20000000UL)                              /*!< (SRAM      ) Base Address */\r
262 #define PERIPH_BASE          (0x40000000UL)                              /*!< (Peripheral) Base Address */\r
263 #define NS_OFFSET            (0x10000000UL)\r
264 \r
265 /* Peripheral memory map */\r
266 #define AHBPERIPH_BASE       PERIPH_BASE\r
267 #define APBPERIPH_BASE       (PERIPH_BASE + 0x00040000UL)\r
268 \r
269 /*!< AHB peripherals */\r
270 #define SYS_BASE             (AHBPERIPH_BASE + 0x00000UL)\r
271 #define CLK_BASE             (AHBPERIPH_BASE + 0x00200UL)\r
272 #define INT_BASE             (AHBPERIPH_BASE + 0x00300UL)\r
273 #define GPIO_BASE            (AHBPERIPH_BASE + 0x04000UL)\r
274 #define GPIOA_BASE           (AHBPERIPH_BASE + 0x04000UL)\r
275 #define GPIOB_BASE           (AHBPERIPH_BASE + 0x04040UL)\r
276 #define GPIOC_BASE           (AHBPERIPH_BASE + 0x04080UL)\r
277 #define GPIOD_BASE           (AHBPERIPH_BASE + 0x040C0UL)\r
278 #define GPIOE_BASE           (AHBPERIPH_BASE + 0x04100UL)\r
279 #define GPIOF_BASE           (AHBPERIPH_BASE + 0x04140UL)\r
280 #define GPIOG_BASE           (AHBPERIPH_BASE + 0x04180UL)\r
281 #define GPIOH_BASE           (AHBPERIPH_BASE + 0x041C0UL)\r
282 #define GPIO_DBCTL_BASE      (AHBPERIPH_BASE + 0x04440UL)\r
283 #define GPIO_PIN_DATA_BASE   (AHBPERIPH_BASE + 0x04800UL)\r
284 #define PDMA0_BASE           (AHBPERIPH_BASE + 0x08000UL)\r
285 #define PDMA1_BASE           (AHBPERIPH_BASE + 0x18000UL)\r
286 #define USBH_BASE            (AHBPERIPH_BASE + 0x09000UL)\r
287 #define FMC_BASE             (AHBPERIPH_BASE + 0x0C000UL)\r
288 #define SDH0_BASE            (AHBPERIPH_BASE + 0x0D000UL)\r
289 #define SDH1_BASE            (AHBPERIPH_BASE + 0x0E000UL)\r
290 #define EBI_BASE             (AHBPERIPH_BASE + 0x10000UL)\r
291 #define CRC_BASE             (AHBPERIPH_BASE + 0x31000UL)\r
292 #define CRPT_BASE            (AHBPERIPH_BASE + 0x32000UL)\r
293 #define SCU_BASE             (AHBPERIPH_BASE + 0x2F000UL)\r
294 \r
295 /*!< APB peripherals */\r
296 #define WDT_BASE             (APBPERIPH_BASE + 0x00000UL)\r
297 #define WWDT_BASE            (APBPERIPH_BASE + 0x00100UL)\r
298 #define RTC_BASE             (APBPERIPH_BASE + 0x01000UL)\r
299 #define EADC_BASE            (APBPERIPH_BASE + 0x03000UL)\r
300 #define ACMP01_BASE          (APBPERIPH_BASE + 0x05000UL)\r
301 #define DAC0_BASE            (APBPERIPH_BASE + 0x07000UL)\r
302 #define DAC1_BASE            (APBPERIPH_BASE + 0x07040UL)\r
303 #define I2S0_BASE            (APBPERIPH_BASE + 0x08000UL)\r
304 #define OTG_BASE             (APBPERIPH_BASE + 0x0D000UL)\r
305 #define TMR01_BASE           (APBPERIPH_BASE + 0x10000UL)\r
306 #define TMR23_BASE           (APBPERIPH_BASE + 0x11000UL)\r
307 #define EPWM0_BASE           (APBPERIPH_BASE + 0x18000UL)\r
308 #define EPWM1_BASE           (APBPERIPH_BASE + 0x19000UL)\r
309 #define BPWM0_BASE           (APBPERIPH_BASE + 0x1A000UL)\r
310 #define BPWM1_BASE           (APBPERIPH_BASE + 0x1B000UL)\r
311 #define QSPI0_BASE           (APBPERIPH_BASE + 0x20000UL)\r
312 #define SPI0_BASE            (APBPERIPH_BASE + 0x21000UL)\r
313 #define SPI1_BASE            (APBPERIPH_BASE + 0x22000UL)\r
314 #define SPI2_BASE            (APBPERIPH_BASE + 0x23000UL)\r
315 #define SPI3_BASE            (APBPERIPH_BASE + 0x24000UL)\r
316 #define UART0_BASE           (APBPERIPH_BASE + 0x30000UL)\r
317 #define UART0_BASE           (APBPERIPH_BASE + 0x30000UL)\r
318 #define UART1_BASE           (APBPERIPH_BASE + 0x31000UL)\r
319 #define UART2_BASE           (APBPERIPH_BASE + 0x32000UL)\r
320 #define UART3_BASE           (APBPERIPH_BASE + 0x33000UL)\r
321 #define UART4_BASE           (APBPERIPH_BASE + 0x34000UL)\r
322 #define UART5_BASE           (APBPERIPH_BASE + 0x35000UL)\r
323 #define I2C0_BASE            (APBPERIPH_BASE + 0x40000UL)\r
324 #define I2C1_BASE            (APBPERIPH_BASE + 0x41000UL)\r
325 #define I2C2_BASE            (APBPERIPH_BASE + 0x42000UL)\r
326 #define SC0_BASE             (APBPERIPH_BASE + 0x50000UL)\r
327 #define SC1_BASE             (APBPERIPH_BASE + 0x51000UL)\r
328 #define SC2_BASE             (APBPERIPH_BASE + 0x52000UL)\r
329 #define CAN0_BASE            (APBPERIPH_BASE + 0x60000UL)\r
330 #define QEI0_BASE            (APBPERIPH_BASE + 0x70000UL)\r
331 #define QEI1_BASE            (APBPERIPH_BASE + 0x71000UL)\r
332 #define ECAP0_BASE           (APBPERIPH_BASE + 0x74000UL)\r
333 #define ECAP1_BASE           (APBPERIPH_BASE + 0x75000UL)\r
334 #define TRNG_BASE            (APBPERIPH_BASE + 0x79000UL)\r
335 #define USBD_BASE            (APBPERIPH_BASE + 0x80000UL)\r
336 #define USCI0_BASE           (APBPERIPH_BASE + 0x90000UL)\r
337 #define USCI1_BASE           (APBPERIPH_BASE + 0x91000UL)\r
338 \r
339 \r
340 /**@}*/ /* PERIPHERAL */\r
341 \r
342 /******************************************************************************/\r
343 /*                         Peripheral declaration                             */\r
344 /******************************************************************************/\r
345 \r
346 /** @addtogroup PMODULE Peripheral Pointer\r
347   The Declaration of Peripheral Pointer\r
348   @{\r
349  */\r
350 \r
351 /** @addtogroup PMODULE_S Secure Peripheral Pointer\r
352  The Declaration of Secure Peripheral Pointer\r
353  @{\r
354 */\r
355 \r
356 \r
357 #define PA                  ((GPIO_T *) GPIOA_BASE)                     /*!< GPIO PORTA Pointer                 */\r
358 #define PB                  ((GPIO_T *) GPIOB_BASE)                     /*!< GPIO PORTB Pointer                 */\r
359 #define PC                  ((GPIO_T *) GPIOC_BASE)                     /*!< GPIO PORTC Pointer                 */\r
360 #define PD                  ((GPIO_T *) GPIOD_BASE)                     /*!< GPIO PORTD Pointer                 */\r
361 #define PE                  ((GPIO_T *) GPIOE_BASE)                     /*!< GPIO PORTE Pointer                 */\r
362 #define PF                  ((GPIO_T *) GPIOF_BASE)                     /*!< GPIO PORTF Pointer                 */\r
363 #define PG                  ((GPIO_T *) GPIOG_BASE)                     /*!< GPIO PORTG Pointer                 */\r
364 #define PH                  ((GPIO_T *) GPIOH_BASE)                     /*!< GPIO PORTH Pointer                 */\r
365 \r
366 #define UART0               ((UART_T *) UART0_BASE)                     /*!< UART0 Pointer                      */\r
367 #define UART1               ((UART_T *) UART1_BASE)                     /*!< UART1 Pointer                      */\r
368 #define UART2               ((UART_T *) UART2_BASE)                     /*!< UART2 Pointer                      */\r
369 #define UART3               ((UART_T *) UART3_BASE)                     /*!< UART3 Pointer                      */\r
370 #define UART4               ((UART_T *) UART4_BASE)                     /*!< UART4 Pointer                      */\r
371 #define UART5               ((UART_T *) UART5_BASE)                     /*!< UART5 Pointer                      */\r
372 \r
373 \r
374 #define TIMER0              ((TIMER_T *) TMR01_BASE)                   /*!< TIMER0 Pointer                      */\r
375 #define TIMER1              ((TIMER_T *) (TMR01_BASE + 0x100UL))         /*!< TIMER1 Pointer                      */\r
376 #define TIMER2              ((TIMER_T *) TMR23_BASE)                   /*!< TIMER2 Pointer                      */\r
377 #define TIMER3              ((TIMER_T *) (TMR23_BASE + 0x100UL))         /*!< TIMER3 Pointer                      */\r
378 \r
379 #define WDT                 ((WDT_T *) WDT_BASE)                        /*!< Watch Dog Timer Pointer             */\r
380 \r
381 #define WWDT                ((WWDT_T *) WWDT_BASE)                      /*!< Window Watch Dog Timer Pointer      */\r
382 \r
383 #define QSPI0               ((QSPI_T *) QSPI0_BASE)                     /*!< QSPI0 Pointer                       */\r
384 #define SPI0                ((SPI_T *) SPI0_BASE)                       /*!< SPI0 Pointer                        */\r
385 #define SPI1                ((SPI_T *) SPI1_BASE)                       /*!< SPI1 Pointer                        */\r
386 #define SPI2                ((SPI_T *) SPI2_BASE)                       /*!< SPI2 Pointer                        */\r
387 #define SPI3                ((SPI_T *) SPI3_BASE)                       /*!< SPI3 Pointer                        */\r
388 \r
389 #define I2S0                ((I2S_T *) I2S0_BASE)                       /*!< I2S0 Pointer                        */\r
390 \r
391 #define I2C0                ((I2C_T *) I2C0_BASE)                       /*!< I2C0 Pointer                        */\r
392 #define I2C1                ((I2C_T *) I2C1_BASE)                       /*!< I2C1 Pointer                        */\r
393 #define I2C2                ((I2C_T *) I2C2_BASE)                       /*!< I2C1 Pointer                        */\r
394 \r
395 #define QEI0                ((QEI_T *) QEI0_BASE)                       /*!< QEI0 Pointer                        */\r
396 #define QEI1                ((QEI_T *) QEI1_BASE)                       /*!< QEI1 Pointer                        */\r
397 \r
398 #define RTC                 ((RTC_T *) RTC_BASE)                        /*!< RTC Pointer                         */\r
399 \r
400 #define ACMP01              ((ACMP_T *) ACMP01_BASE)                    /*!< ACMP01 Pointer                      */\r
401 \r
402 #define CLK                 ((CLK_T *) CLK_BASE)                        /*!< System Clock Controller Pointer     */\r
403 \r
404 #define DAC0                ((DAC_T *) DAC0_BASE)                       /*!< DAC0 Pointer                        */\r
405 #define DAC1                ((DAC_T *) DAC1_BASE)                       /*!< DAC1 Pointer                        */\r
406 \r
407 #define EADC                ((EADC_T *) EADC_BASE)                      /*!< EADC Pointer                        */\r
408 \r
409 #define SYS                 ((SYS_T *) SYS_BASE)                        /*!< System Global Controller Pointer    */\r
410 \r
411 #define SYSINT              ((SYS_INT_T *) INT_BASE)                    /*!< Interrupt Source Controller Pointer */\r
412 \r
413 #define FMC                 ((FMC_T *) FMC_BASE)                        /*!< Flash Memory Controller */\r
414 \r
415 #define SDH0                    ((SDH_T *)   SDH0_BASE)\r
416 \r
417 #define CRPT                ((CRPT_T *) CRPT_BASE)                      /*!< Crypto Accelerator Pointer          */\r
418 #define TRNG                ((TRNG_T *)TRNG_BASE)                       /*!< True Random Number Pointer          */\r
419 \r
420 #define BPWM0               ((BPWM_T *) BPWM0_BASE)                     /*!< BPWM0 Pointer                       */\r
421 #define BPWM1               ((BPWM_T *) BPWM1_BASE)                     /*!< BPWM1 Pointer                       */\r
422 \r
423 #define EPWM0               ((EPWM_T *) EPWM0_BASE)                     /*!< EPWM0 Pointer                       */\r
424 #define EPWM1               ((EPWM_T *) EPWM1_BASE)                     /*!< EPWM1 Pointer                       */\r
425 \r
426 #define SC0                 ((SC_T *) SC0_BASE)                         /*!< SC0 Pointer                         */\r
427 #define SC1                 ((SC_T *) SC1_BASE)                         /*!< SC1 Pointer                         */\r
428 #define SC2                 ((SC_T *) SC2_BASE)                         /*!< SC2 Pointer                         */\r
429 \r
430 #define EBI                 ((EBI_T *) EBI_BASE)                        /*!< EBI Pointer                         */\r
431 \r
432 #define CRC                 ((CRC_T *) CRC_BASE)                        /*!< CRC Pointer                         */\r
433 \r
434 #define USBD                ((USBD_T *) USBD_BASE)                      /*!< USB Device Pointer                  */\r
435 #define USBH                ((USBH_T *) USBH_BASE)                      /*!< USBH Pointer                        */\r
436 #define OTG                 ((OTG_T *) OTG_BASE)                        /*!< OTG Pointer                         */\r
437 \r
438 #define PDMA0               ((PDMA_T *) PDMA0_BASE)                     /*!< PDMA0 Pointer                        */\r
439 #define PDMA1               ((PDMA_T *) PDMA1_BASE)                     /*!< PDMA1 Pointer                        */\r
440 \r
441 #define UI2C0               ((UI2C_T *) USCI0_BASE)                     /*!< UI2C0 Pointer                       */\r
442 #define UI2C1               ((UI2C_T *) USCI1_BASE)                     /*!< UI2C1 Pointer                       */\r
443 #define UI2C2               ((UI2C_T *) USCI2_BASE)                     /*!< UI2C2 Pointer                       */\r
444 \r
445 #define USPI0               ((USPI_T *) USCI0_BASE)                     /*!< USPI0 Pointer                       */\r
446 #define USPI1               ((USPI_T *) USCI1_BASE)                     /*!< USPI1 Pointer                       */\r
447 \r
448 #define UUART0              ((UUART_T *) USCI0_BASE)                    /*!< UUART0 Pointer                      */\r
449 #define UUART1              ((UUART_T *) USCI1_BASE)                    /*!< UUART1 Pointer                      */\r
450 \r
451 #define SCU                 ((SCU_T *) SCU_BASE)                        /*!< SCU Pointer                         */\r
452 #define ECAP0               ((ECAP_T *) ECAP0_BASE)                     /*!< ECAP0 Pointer                       */\r
453 #define ECAP1               ((ECAP_T *) ECAP1_BASE)                     /*!< ECAP1 Pointer                       */\r
454 \r
455 #define CAN0                ((CAN_T *)CAN0_BASE)                        /*!< CAN0 Pointer                        */\r
456 \r
457 \r
458 \r
459 \r
460 /**@}*/ /* end of group PMODULE_S */\r
461 \r
462 /** @addtogroup PMODULE_NS Non-secure Peripheral Pointer\r
463  The Declaration of Non-secure Peripheral Pointer\r
464  @{\r
465 */\r
466 \r
467 \r
468 #define PA_NS                  ((GPIO_T *)  (GPIOA_BASE+NS_OFFSET))                     /*!< GPIO PORTA Pointer                        */\r
469 #define PB_NS                  ((GPIO_T *)  (GPIOB_BASE+NS_OFFSET))                     /*!< GPIO PORTB Pointer                        */\r
470 #define PC_NS                  ((GPIO_T *)  (GPIOC_BASE+NS_OFFSET))                     /*!< GPIO PORTC Pointer                        */\r
471 #define PD_NS                  ((GPIO_T *)  (GPIOD_BASE+NS_OFFSET))                     /*!< GPIO PORTD Pointer                        */\r
472 #define PE_NS                  ((GPIO_T *)  (GPIOE_BASE+NS_OFFSET))                     /*!< GPIO PORTE Pointer                        */\r
473 #define PF_NS                  ((GPIO_T *)  (GPIOF_BASE+NS_OFFSET))                     /*!< GPIO PORTF Pointer                        */\r
474 #define PG_NS                  ((GPIO_T *)  (GPIOG_BASE+NS_OFFSET))                     /*!< GPIO PORTG Pointer                        */\r
475 #define PH_NS                  ((GPIO_T *)  (GPIOH_BASE+NS_OFFSET))                     /*!< GPIO PORTH Pointer                        */\r
476 #define UART0_NS               ((UART_T *)  (UART0_BASE+NS_OFFSET))                     /*!< UART0 Pointer                       */\r
477 #define UART1_NS               ((UART_T *)  (UART1_BASE+NS_OFFSET))                     /*!< UART1 Pointer                       */\r
478 #define UART2_NS               ((UART_T *)  (UART2_BASE+NS_OFFSET))                     /*!< UART2 Pointer                       */\r
479 #define UART3_NS               ((UART_T *)  (UART3_BASE+NS_OFFSET))                     /*!< UART3 Pointer                       */\r
480 #define UART4_NS               ((UART_T *)  (UART4_BASE+NS_OFFSET))                     /*!< UART4 Pointer                       */\r
481 #define UART5_NS               ((UART_T *)  (UART5_BASE+NS_OFFSET))                     /*!< UART5 Pointer                       */\r
482 #define TIMER2_NS              ((TIMER_T *) (TMR23_BASE+NS_OFFSET))                     /*!< TIMER2 Pointer                      */\r
483 #define TIMER3_NS              ((TIMER_T *) (TMR23_BASE+NS_OFFSET+0x100UL))             /*!< TIMER3 Pointer                      */\r
484 #define QSPI0_NS               ((QSPI_T *)  (QSPI0_BASE+NS_OFFSET))                      /*!< QSPI0 Pointer                       */\r
485 #define SPI0_NS                ((SPI_T *)   (SPI0_BASE+NS_OFFSET))                       /*!< SPI0 Pointer                        */\r
486 #define SPI1_NS                ((SPI_T *)   (SPI1_BASE+NS_OFFSET))                       /*!< SPI1 Pointer                        */\r
487 #define SPI2_NS                ((SPI_T *)   (SPI2_BASE+NS_OFFSET))                       /*!< SPI2 Pointer                        */\r
488 #define SPI3_NS                ((SPI_T *)   (SPI3_BASE+NS_OFFSET))                       /*!< SPI3 Pointer                        */\r
489 #define I2S0_NS                ((I2S_T *)   (I2S0_BASE+NS_OFFSET))                       /*!< I2S0 Pointer                        */\r
490 #define I2C0_NS                ((I2C_T *)   (I2C0_BASE+NS_OFFSET))                       /*!< I2C0 Pointer                        */\r
491 #define I2C1_NS                ((I2C_T *)   (I2C1_BASE+NS_OFFSET))                       /*!< I2C1 Pointer                        */\r
492 #define I2C2_NS                ((I2C_T *)   (I2C2_BASE+NS_OFFSET))                       /*!< I2C1 Pointer                        */\r
493 #define QEI0_NS                ((QEI_T *)   (QEI0_BASE+NS_OFFSET))                       /*!< QEI0 Pointer                        */\r
494 #define QEI1_NS                ((QEI_T *)   (QEI1_BASE+NS_OFFSET))                       /*!< QEI1 Pointer                        */\r
495 #define RTC_NS                 ((RTC_T *)   (RTC_BASE +NS_OFFSET))                        /*!< RTC Pointer                         */\r
496 #define ACMP01_NS              ((ACMP_T *)  (ACMP01_BASE+NS_OFFSET))                    /*!< ACMP01 Pointer                      */\r
497 #define DAC0_NS                ((DAC_T *)   (DAC0_BASE+NS_OFFSET))                       /*!< DAC0 Pointer                        */\r
498 #define DAC1_NS                ((DAC_T *)   (DAC1_BASE+NS_OFFSET))                       /*!< DAC1 Pointer                        */\r
499 #define EADC_NS                ((EADC_T *)  (EADC_BASE+NS_OFFSET))                      /*!< EADC Pointer                        */\r
500 #define SDH0_NS                ((SDH_T *)  (SDH0_BASE +NS_OFFSET))\r
501 #define CRPT_NS                ((CRPT_T *) (CRPT_BASE +NS_OFFSET))\r
502 #define TRNG_NS                ((TRNG_T *) (TRNG_BASE +NS_OFFSET))                     /*!< Random Number Generator Pointer    */\r
503 #define BPWM0_NS               ((BPWM_T *) (BPWM0_BASE+NS_OFFSET))                     /*!< BPWM0 Pointer                       */\r
504 #define BPWM1_NS               ((BPWM_T *) (BPWM1_BASE+NS_OFFSET))                     /*!< BPWM1 Pointer                       */\r
505 #define EPWM0_NS               ((EPWM_T *) (EPWM0_BASE+NS_OFFSET))                     /*!< EPWM0 Pointer                       */\r
506 #define EPWM1_NS               ((EPWM_T *) (EPWM1_BASE+NS_OFFSET))                     /*!< EPWM1 Pointer                       */\r
507 #define SC0_NS                 ((SC_T *)   (SC0_BASE  +NS_OFFSET))                     /*!< SC0 Pointer                         */\r
508 #define SC1_NS                 ((SC_T *)   (SC1_BASE  +NS_OFFSET))                     /*!< SC1 Pointer                         */\r
509 #define SC2_NS                 ((SC_T *)   (SC2_BASE  +NS_OFFSET))                     /*!< SC2 Pointer                         */\r
510 #define EBI_NS                 ((EBI_T *)  (EBI_BASE  +NS_OFFSET))                     /*!< EBI Pointer                         */\r
511 #define CRC_NS                 ((CRC_T *)  (CRC_BASE  +NS_OFFSET))                     /*!< CRC Pointer                         */\r
512 #define USBD_NS                ((USBD_T *) (USBD_BASE +NS_OFFSET))                     /*!< USB Device Pointer                  */\r
513 #define USBH_NS                ((USBH_T *) (USBH_BASE +NS_OFFSET))                     /*!< USBH Pointer                        */\r
514 #define OTG_NS                 ((OTG_T *)  (OTG_BASE  +NS_OFFSET))                     /*!< OTG Pointer                         */\r
515 #define PDMA1_NS               ((PDMA_T *)   (PDMA1_BASE +NS_OFFSET))                     /*!< PDMA1 Pointer                        */\r
516 #define UI2C0_NS                ((UI2C_T *)  (USCI0_BASE +NS_OFFSET))                     /*!< UI2C0 Pointer                       */\r
517 #define UI2C1_NS                ((UI2C_T *)  (USCI1_BASE +NS_OFFSET))                     /*!< UI2C1 Pointer                       */\r
518 #define UI2C2_NS                ((UI2C_T *)  (USCI2_BASE +NS_OFFSET))                     /*!< UI2C2 Pointer                       */\r
519 #define USPI0_NS                ((USPI_T *)  (USCI0_BASE +NS_OFFSET))                     /*!< USPI0 Pointer                       */\r
520 #define USPI1_NS                ((USPI_T *)  (USCI1_BASE +NS_OFFSET))                     /*!< USPI1 Pointer                       */\r
521 #define UUART0_NS               ((UUART_T *) (USCI0_BASE+NS_OFFSET))                    /*!< UUART0 Pointer                      */\r
522 #define UUART1_NS               ((UUART_T *) (USCI1_BASE+NS_OFFSET))                    /*!< UUART1 Pointer                      */\r
523 #define SCU_NS                 ((SCU_T *)    (SCU_BASE  +NS_OFFSET))                        /*!< SCU Pointer                         */\r
524 #define ECAP0_NS               ((ECAP_T *)   (ECAP0_BASE+NS_OFFSET))                     /*!< ECAP0 Pointer                       */\r
525 #define ECAP1_NS               ((ECAP_T *)   (ECAP1_BASE+NS_OFFSET))                     /*!< ECAP1 Pointer                       */\r
526 #define CAN0_NS                ((CAN_T *)    (CAN0_BASE +NS_OFFSET))                        /*!< CAN0 Pointer                        */\r
527 \r
528 /**@}*/ /* end of group PMODULE_NS */\r
529 /**@}*/ /* end of group PMODULE */\r
530 \r
531 /* --------------------  End of section using anonymous unions  ------------------- */\r
532 #if   defined (__CC_ARM)\r
533 #pragma pop\r
534 #elif defined (__ICCARM__)\r
535 /* leave anonymous unions enabled */\r
536 #elif (__ARMCC_VERSION >= 6010050)\r
537 #pragma clang diagnostic pop\r
538 #elif defined (__GNUC__)\r
539 /* anonymous unions are enabled by default */\r
540 #elif defined (__TMS470__)\r
541 /* anonymous unions are enabled by default */\r
542 #elif defined (__TASKING__)\r
543 #pragma warning restore\r
544 #elif defined (__CSMC__)\r
545 /* anonymous unions are enabled by default */\r
546 #else\r
547 #warning Not supported compiler type\r
548 #endif\r
549 \r
550 #ifdef __cplusplus\r
551 }\r
552 #endif\r
553 \r
554 \r
555 /*=============================================================================*/\r
556 typedef volatile unsigned char  vu8;\r
557 typedef volatile unsigned long  vu32;\r
558 typedef volatile unsigned short vu16;\r
559 #define M8(adr)  (*((vu8  *) (adr)))\r
560 #define M16(adr) (*((vu16 *) (adr)))\r
561 #define M32(adr) (*((vu32 *) (adr)))\r
562 \r
563 #define outpw(port,value)   (*((volatile unsigned int *)(port))=(value))\r
564 #define inpw(port)          ((*((volatile unsigned int *)(port))))\r
565 #define outpb(port,value)   (*((volatile unsigned char *)(port))=(value))\r
566 #define inpb(port)          ((*((volatile unsigned char *)(port))))\r
567 #define outps(port,value)   (*((volatile unsigned short *)(port))=(value))\r
568 #define inps(port)          ((*((volatile unsigned short *)(port))))\r
569 \r
570 #define outp32(port,value)  (*((volatile unsigned int *)(port))=(value))\r
571 #define inp32(port)         ((*((volatile unsigned int *)(port))))\r
572 #define outp8(port,value)   (*((volatile unsigned char *)(port))=(value))\r
573 #define inp8(port)          ((*((volatile unsigned char *)(port))))\r
574 #define outp16(port,value)  (*((volatile unsigned short *)(port))=(value))\r
575 #define inp16(port)         ((*((volatile unsigned short *)(port))))\r
576 \r
577 \r
578 #define E_SUCCESS   0\r
579 \r
580 #define TRUE        (1L)\r
581 #define FALSE       (0L)\r
582 \r
583 #define ENABLE      1\r
584 #define DISABLE     0\r
585 \r
586 /* Bit Mask Definitions */\r
587 #define BIT0    0x00000001UL\r
588 #define BIT1    0x00000002UL\r
589 #define BIT2    0x00000004UL\r
590 #define BIT3    0x00000008UL\r
591 #define BIT4    0x00000010UL\r
592 #define BIT5    0x00000020UL\r
593 #define BIT6    0x00000040UL\r
594 #define BIT7    0x00000080UL\r
595 #define BIT8    0x00000100UL\r
596 #define BIT9    0x00000200UL\r
597 #define BIT10   0x00000400UL\r
598 #define BIT11   0x00000800UL\r
599 #define BIT12   0x00001000UL\r
600 #define BIT13   0x00002000UL\r
601 #define BIT14   0x00004000UL\r
602 #define BIT15   0x00008000UL\r
603 #define BIT16   0x00010000UL\r
604 #define BIT17   0x00020000UL\r
605 #define BIT18   0x00040000UL\r
606 #define BIT19   0x00080000UL\r
607 #define BIT20   0x00100000UL\r
608 #define BIT21   0x00200000UL\r
609 #define BIT22   0x00400000UL\r
610 #define BIT23   0x00800000UL\r
611 #define BIT24   0x01000000UL\r
612 #define BIT25   0x02000000UL\r
613 #define BIT26   0x04000000UL\r
614 #define BIT27   0x08000000UL\r
615 #define BIT28   0x10000000UL\r
616 #define BIT29   0x20000000UL\r
617 #define BIT30   0x40000000UL\r
618 #define BIT31   0x80000000UL\r
619 \r
620 \r
621 /* Byte Mask Definitions */\r
622 #define BYTE0_Msk               (0x000000FFUL)\r
623 #define BYTE1_Msk               (0x0000FF00UL)\r
624 #define BYTE2_Msk               (0x00FF0000UL)\r
625 #define BYTE3_Msk               (0xFF000000UL)\r
626 \r
627 #define _GET_BYTE0(u32Param)    (((u32Param) & BYTE0_Msk)        )  /*!< Extract Byte 0 (Bit  0~ 7) from parameter u32Param */\r
628 #define _GET_BYTE1(u32Param)    (((u32Param) & BYTE1_Msk) >>  8UL)  /*!< Extract Byte 1 (Bit  8~15) from parameter u32Param */\r
629 #define _GET_BYTE2(u32Param)    (((u32Param) & BYTE2_Msk) >> 16UL)  /*!< Extract Byte 2 (Bit 16~23) from parameter u32Param */\r
630 #define _GET_BYTE3(u32Param)    (((u32Param) & BYTE3_Msk) >> 24UL)  /*!< Extract Byte 3 (Bit 24~31) from parameter u32Param */\r
631 \r
632 \r
633 /******************************************************************************/\r
634 /*                         Peripheral header files                            */\r
635 /******************************************************************************/\r
636 #include "sys.h"\r
637 #include "clk.h"\r
638 #include "dac.h"\r
639 #include "eadc.h"\r
640 #include "ebi.h"\r
641 #include "ecap.h"\r
642 #include "fmc.h"\r
643 #include "gpio.h"\r
644 #include "i2c.h"\r
645 #include "i2s.h"\r
646 #include "bpwm.h"\r
647 #include "epwm.h"\r
648 #include "qspi.h"\r
649 #include "spi.h"\r
650 #include "timer.h"\r
651 #include "timer_pwm.h"\r
652 #include "wdt.h"\r
653 #include "wwdt.h"\r
654 #include "rtc.h"\r
655 #include "uart.h"\r
656 #include "acmp.h"\r
657 #include "crc.h"\r
658 #include "usbd.h"\r
659 #include "otg.h"\r
660 #include "pdma.h"\r
661 #include "ebi.h"\r
662 #include "crypto.h"\r
663 #include "sc.h"\r
664 #include "scuart.h"\r
665 #include "usci_spi.h"\r
666 #include "usci_uart.h"\r
667 #include "usci_i2c.h"\r
668 #include "sdh.h"\r
669 #include "qei.h"\r
670 #include "can.h"\r
671 #include "scu.h"\r
672 #include "mkromlib.h"\r
673 \r
674 #endif  /* __M2351_H__ */\r
675 \r
676 \r
677 /* Copyright (C) 2017 Nuvoton Technology Corp. All rights reserved. */\r
678 \r