1 /**************************************************************************//**
3 * @brief CMSIS-Core(M) Device Header File for Device <Device>
7 ******************************************************************************/
9 * Copyright (c) 2009-2023 Arm Limited. All rights reserved.
11 * SPDX-License-Identifier: Apache-2.0
13 * Licensed under the Apache License, Version 2.0 (the License); you may
14 * not use this file except in compliance with the License.
15 * You may obtain a copy of the License at
17 * www.apache.org/licenses/LICENSE-2.0
19 * Unless required by applicable law or agreed to in writing, software
20 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
21 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 * See the License for the specific language governing permissions and
23 * limitations under the License.
26 /* ToDo: rename this file from Device.h to '<Device>.h according to your device name */
28 #ifndef <Device>_H /* ToDo: replace '<Device>' with your device name */
36 /* ========================================================================= */
37 /* ============ Interrupt Number Definition ============ */
38 /* ========================================================================= */
42 /* ================ Cortex-M Core Exception Numbers ================ */
44 /* ToDo: add Cortex exception numbers according the used Cortex-Core */
45 Reset_IRQn = -15, /* 1 Reset Vector
46 invoked on Power up and warm reset */
47 NonMaskableInt_IRQn = -14, /* 2 Non maskable Interrupt
48 cannot be stopped or preempted */
49 HardFault_IRQn = -13, /* 3 Hard Fault
50 all classes of Fault */
51 MemoryManagement_IRQn = -12, /* 4 Memory Management
52 MPU mismatch, including Access Violation and No Match */
53 BusFault_IRQn = -11, /* 5 Bus Fault
54 Pre-Fetch-, Memory Access, other address/memory Fault */
55 UsageFault_IRQn = -10, /* 6 Usage Fault
56 i.e. Undef Instruction, Illegal State Transition */
57 SecureFault_IRQn = -9, /* 7 Secure Fault Interrupt */
58 SVCall_IRQn = -5, /* 11 System Service Call via SVC instruction */
59 DebugMonitor_IRQn = -4, /* 12 Debug Monitor */
60 PendSV_IRQn = -2, /* 14 Pendable request for system service */
61 SysTick_IRQn = -1, /* 15 System Tick Timer */
63 /* ================ <Device> Interrupt Numbers ================ */
64 /* ToDo: Add here your device specific interrupt numbers
65 according the interrupt handlers defined in startup_Device.s
66 eg.: Interrupt for Timer#1 TIM1_IRQHandler -> TIM1_IRQn */
67 <DeviceInterrupt first>_IRQn = 0, /* first Device Interrupt*/
69 <DeviceInterrupt last>_IRQn = n /* last Device Interrupt */
73 /* ========================================================================= */
74 /* ============ Processor and Core Peripheral Section ============ */
75 /* ========================================================================= */
77 /* ================ Start of section using anonymous unions ================ */
78 #if defined (__CC_ARM)
81 #elif defined (__ICCARM__)
82 #pragma language=extended
83 #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
84 #pragma clang diagnostic push
85 #pragma clang diagnostic ignored "-Wc11-extensions"
86 #pragma clang diagnostic ignored "-Wreserved-id-macro"
87 #elif defined (__GNUC__)
88 /* anonymous unions are enabled by default */
89 #elif defined (__TMS470__)
90 /* anonymous unions are enabled by default */
91 #elif defined (__TASKING__)
93 #elif defined (__CSMC__)
94 /* anonymous unions are enabled by default */
96 #warning Not supported compiler type
100 /* -------- Configuration of Core Peripherals ----------------------------------- */
101 /* ToDo: set the defines according your Device */
102 /* ToDo: define the correct core revision
103 valid CMSIS core revision macro names are:
104 __CM0_REV, __CM0PLUS_REV, __CM1_REV, __CM3_REV, __CM4_REV, __CM7_REV
105 __CM23_REV, __CM33_REV, __CM35P_REV, __CM55_REV
106 __SC000_REV, __SC300_REV */
107 #define __CM#_REV 0x0201U /* Core Revision r2p1 */
108 /* ToDo: define the correct core features for the <Device> */
109 #define __Vendor_SysTickConfig 0U /* Set to 1 if different SysTick Config is used */
110 #define __NVIC_PRIO_BITS 3U /* Number of Bits used for Priority Levels */
111 #define __VTOR_PRESENT 1U /* Set to 1 if VTOR is present */
112 #define __MPU_PRESENT 1U /* Set to 1 if MPU is present */
113 #define __FPU_PRESENT 0U /* Set to 1 if FPU is present */
114 #define __FPU_DP 0U /* Set to 1 if FPU is double precision FPU (default is single precision FPU) */
115 #define __DSP_PRESENT 1U /* Set to 1 if DSP extension are present */
116 #define __SAUREGION_PRESENT 1U /* Set to 1 if SAU regions are present */
117 #define __PMU_PRESENT 1U /* Set to 1 if PMU is present */
118 #define __PMU_NUM_EVENTCNT 8U /* Set number of PMU Event Counters */
119 #define __ICACHE_PRESENT 0U /* Set to 1 if I-Cache is present */
120 #define __DCACHE_PRESENT 0U /* Set to 1 if D-Cache is present */
121 #define __DTCM_PRESENT 0U /* Set to 1 if DTCM is present */
124 /* ToDo: include the CMSIS core header file according your device.
125 valid CMSIS core header files are:
126 core_cm0.h, core_cm0plus.h, core_cm1.h, core_cm3.h, core_cm4.h, core_cm7.h
127 core_cm23.h, core_cm33.h, core_cm35p.h, core_cm55.h
128 core_sc000.h, core_sc300.h */
129 #include <core_cm#.h> /* Processor and core peripherals */
130 /* ToDo: include your system_<Device>.h file
131 replace '<Device>' with your device name */
132 #include "system_<Device>.h" /* System Header */
136 /* ========================================================================= */
137 /* ============ Device Specific Peripheral Section ============ */
138 /* ========================================================================= */
141 /* ToDo: add here your device specific peripheral access structure typedefs
142 including bit definitions for Pos/Msk macros
143 following is an example for a timer */
145 /* ========================================================================= */
146 /* ============ TMR ============ */
147 /* ========================================================================= */
151 __IOM uint32_t LOAD; /* Offset: 0x000 (R/W) Load Register */
152 __IM uint32_t VALUE; /* Offset: 0x004 (R/ ) Value Register */
153 __IOM uint32_t CONTROL; /* Offset: 0x008 (R/W) Control Register */
154 __OM uint32_t INTCLR; /* Offset: 0x00C ( /W) Clear Interrupt Register */
155 __IM uint32_t RIS; /* Offset: 0x010 (R/ ) Raw Interrupt Status Register */
156 __IM uint32_t MIS; /* Offset: 0x014 (R/ ) Interrupt Status Register */
157 __IOM uint32_t BGLOAD; /* Offset: 0x018 (R/W) Background Load Register */
158 } <DeviceAbbreviation>_TMR_TypeDef;
160 /* <DeviceAbbreviation>_TMR LOAD Register Definitions */
161 #define <DeviceAbbreviation>_TMR_LOAD_Pos 0
162 #define <DeviceAbbreviation>_TMR_LOAD_Msk (0xFFFFFFFFUL /*<< <DeviceAbbreviation>_TMR_LOAD_Pos*/)
164 /* <DeviceAbbreviation>_TMR VALUE Register Definitions */
165 #define <DeviceAbbreviation>_TMR_VALUE_Pos 0
166 #define <DeviceAbbreviation>_TMR_VALUE_Msk (0xFFFFFFFFUL /*<< <DeviceAbbreviation>_TMR_VALUE_Pos*/)
168 /* <DeviceAbbreviation>_TMR CONTROL Register Definitions */
169 #define <DeviceAbbreviation>_TMR_CONTROL_SIZE_Pos 1
170 #define <DeviceAbbreviation>_TMR_CONTROL_SIZE_Msk (1UL << <DeviceAbbreviation>_TMR_CONTROL_SIZE_Pos)
172 #define <DeviceAbbreviation>_TMR_CONTROL_ONESHOT_Pos 0
173 #define <DeviceAbbreviation>_TMR_CONTROL_ONESHOT_Msk (1UL /*<< <DeviceAbbreviation>_TMR_CONTROL_ONESHOT_Pos*/)
177 /* -------- End of section using anonymous unions and disabling warnings -------- */
178 #if defined (__CC_ARM)
180 #elif defined (__ICCARM__)
181 /* leave anonymous unions enabled */
182 #elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
183 #pragma clang diagnostic pop
184 #elif defined (__GNUC__)
185 /* anonymous unions are enabled by default */
186 #elif defined (__TMS470__)
187 /* anonymous unions are enabled by default */
188 #elif defined (__TASKING__)
189 #pragma warning restore
190 #elif defined (__CSMC__)
191 /* anonymous unions are enabled by default */
193 #warning Not supported compiler type
197 /* ========================================================================= */
198 /* ============ Device Specific Peripheral Address Map ============ */
199 /* ========================================================================= */
202 /* ToDo: add here your device peripherals base addresses
203 following is an example for timer */
205 /* Peripheral and SRAM base address */
206 #define <DeviceAbbreviation>_FLASH_BASE (0x00000000UL) /* (FLASH ) Base Address */
207 #define <DeviceAbbreviation>_SRAM_BASE (0x20000000UL) /* (SRAM ) Base Address */
208 #define <DeviceAbbreviation>_PERIPH_BASE (0x40000000UL) /* (Peripheral) Base Address */
210 /* Peripheral memory map */
211 #define <DeviceAbbreviation>TIM0_BASE (<DeviceAbbreviation>_PERIPH_BASE) /* (Timer0 ) Base Address */
212 #define <DeviceAbbreviation>TIM1_BASE (<DeviceAbbreviation>_PERIPH_BASE + 0x0800) /* (Timer1 ) Base Address */
213 #define <DeviceAbbreviation>TIM2_BASE (<DeviceAbbreviation>_PERIPH_BASE + 0x1000) /* (Timer2 ) Base Address */
216 /* ========================================================================= */
217 /* ============ Peripheral declaration ============ */
218 /* ========================================================================= */
221 /* ToDo: Add here your device peripherals pointer definitions
222 following is an example for timer */
224 #define <DeviceAbbreviation>_TIM0 ((<DeviceAbbreviation>_TMR_TypeDef *) <DeviceAbbreviation>TIM0_BASE)
225 #define <DeviceAbbreviation>_TIM1 ((<DeviceAbbreviation>_TMR_TypeDef *) <DeviceAbbreviation>TIM0_BASE)
226 #define <DeviceAbbreviation>_TIM2 ((<DeviceAbbreviation>_TMR_TypeDef *) <DeviceAbbreviation>TIM0_BASE)
232 #endif /* <Device>_H */