4 * Created on: 12 okt 2010
\r
11 #include "Std_Types.h"
\r
13 #define __I volatile const /*!< defines 'read only' permissions */
\r
14 #define __O volatile /*!< defines 'write only' permissions */
\r
15 #define __IO volatile /*!< defines 'read / write' permissions */
\r
18 typedef volatile struct vimBase
\r
20 unsigned : 24U; /* 0x0000 */
\r
21 unsigned IRQIVEC : 8U; /* 0x0000 */
\r
22 unsigned : 24U; /* 0x0004 */
\r
23 unsigned FIQIVEC : 8U; /* 0x0004 */
\r
24 unsigned : 32U; /* 0x0008 */
\r
25 unsigned : 32U; /* 0x000C */
\r
26 unsigned FIRQPR0; /* 0x0010 */
\r
27 unsigned FIRQPR1; /* 0x0014 */
\r
28 unsigned FIRQPR2; /* 0x0018 */
\r
29 unsigned FIRQPR3; /* 0x001C */
\r
30 unsigned INTREQ0; /* 0x0020 */
\r
31 unsigned INTREQ1; /* 0x0024 */
\r
32 unsigned INTREQ2; /* 0x0028 */
\r
33 unsigned INTREQ3; /* 0x002C */
\r
34 unsigned REQMASKSET0; /* 0x0030 */
\r
35 unsigned REQMASKSET1; /* 0x0034 */
\r
36 unsigned REQMASKSET2; /* 0x0038 */
\r
37 unsigned REQMASKSET3; /* 0x003C */
\r
38 unsigned REQMASKCLR0; /* 0x0040 */
\r
39 unsigned REQMASKCLR1; /* 0x0044 */
\r
40 unsigned REQMASKCLR2; /* 0x0048 */
\r
41 unsigned REQMASKCLR3; /* 0x004C */
\r
42 unsigned WAKEMASKSET0; /* 0x0050 */
\r
43 unsigned WAKEMASKSET1; /* 0x0054 */
\r
44 unsigned WAKEMASKSET2; /* 0x0058 */
\r
45 unsigned WAKEMASKSET3; /* 0x005C */
\r
46 unsigned WAKEMASKCLR0; /* 0x0060 */
\r
47 unsigned WAKEMASKCLR1; /* 0x0064 */
\r
48 unsigned WAKEMASKCLR2; /* 0x0068 */
\r
49 unsigned WAKEMASKCLR3; /* 0x006C */
\r
50 unsigned IRQVECREG; /* 0x0070 */
\r
51 unsigned FIQVECREQ; /* 0x0074 */
\r
52 unsigned : 9U; /* 0x0078 */
\r
53 unsigned CAPEVTSRC1 : 7U; /* 0x0078 */
\r
54 unsigned : 9U; /* 0x0078 */
\r
55 unsigned CAPEVTSRC0 : 7U; /* 0x0078 */
\r
56 unsigned : 32U; /* 0x007C */
\r
57 unsigned char CHANMAP[64U]; /* 0x0080-0x017C */
\r
60 #define vimREG ((vimBASE_t *)0xFFFFFE00U)
\r
64 typedef volatile struct rtiBase
\r
66 unsigned GCTRL; /**< 0x0000: Global Control Register */
\r
67 unsigned TBCTRL; /**< 0x0004: Timebase Control Register */
\r
68 unsigned CAPCTRL; /**< 0x0008: Capture Control Register */
\r
69 unsigned COMPCTRL; /**< 0x000C: Compare Control Register */
\r
72 unsigned FRCx; /**< 0x0010,0x0030: Free Running Counter x Register */
\r
73 unsigned UCx; /**< 0x0014,0x0034: Up Counter x Register */
\r
74 unsigned CPUCx; /**< 0x0018,0x0038: Compare Up Counter x Register */
\r
75 unsigned : 32; /**< 0x001C,0x003C: Reserved */
\r
76 unsigned CAFRCx; /**< 0x0020,0x0040: Capture Free Running Counter x Register */
\r
77 unsigned CAUCx; /**< 0x0024,0x0044: Capture Up Counter x Register */
\r
78 unsigned : 32; /**< 0x0028,0x0048: Reserved */
\r
79 unsigned : 32; /**< 0x002C,0x004C: Reserved */
\r
80 } CNT[2U]; /**< Counter x selection:
\r
85 unsigned COMPx; /**< 0x0050,0x0058,0x0060,0x0068: Compare x Register */
\r
86 unsigned UDCPx; /**< 0x0054,0x005C,0x0064,0x006C: Update Compare x Register */
\r
87 } CMP[4U]; /**< Compare x selection:
\r
92 unsigned TBLCOMP; /**< 0x0070: External Clock Timebase Low Compare Register */
\r
93 unsigned TBHCOMP; /**< 0x0074: External Clock Timebase High Compare Register */
\r
94 unsigned : 32; /**< 0x0078: Reserved */
\r
95 unsigned : 32; /**< 0x007C: Reserved */
\r
96 unsigned SETINT; /**< 0x0080: Set/Status Interrupt Register */
\r
97 unsigned CLEARINT; /**< 0x0084: Clear/Status Interrupt Register */
\r
98 unsigned INTFLAG; /**< 0x008C: Interrupt Flag Register */
\r
102 * @brief RTI1 Register Frame Pointer
\r
104 * This pointer is used by the RTI driver to access the RTI1 registers.
\r
106 #define rtiREG1 ((rtiBASE_t *)0xFFFFFC00)
\r
109 enum systemClockSource
\r
111 SYS_OSC = 0, /**< Alias for oscillator clock Source */
\r
112 SYS_PLL = 1, /**< Alias for Pll clock Source */
\r
113 SYS_O32 = 2, /**< Alias for 32 kHz oscillator clock Source */
\r
114 SYS_EXTERNAL = 3, /**< Alias for external clock Source */
\r
115 SYS_LPO_LOW = 4, /**< Alias for low power oscillator low clock Source */
\r
116 SYS_LPO_HIGH = 5, /**< Alias for low power oscillator high clock Source */
\r
117 SYS_FR_PLL = 6, /**< Alias for flexray pll clock Source */
\r
118 SYS_VCLK = 9 /**< Alias for synchronous VCLK1 clock Source */
\r
121 typedef volatile struct systemBase1
\r
123 unsigned SYSPC1; /* 0x0000 */
\r
124 unsigned SYSPC2; /* 0x0004 */
\r
125 unsigned SYSPC3; /* 0x0008 */
\r
126 unsigned SYSPC4; /* 0x000C */
\r
127 unsigned SYSPC5; /* 0x0010 */
\r
128 unsigned SYSPC6; /* 0x0014 */
\r
129 unsigned SYSPC7; /* 0x0018 */
\r
130 unsigned SYSPC8; /* 0x001C */
\r
131 unsigned SYSPC9; /* 0x0020 */
\r
132 unsigned SSWPLL1; /* 0x0024 */
\r
133 unsigned SSWPLL2; /* 0x0028 */
\r
134 unsigned SSWPLL3; /* 0x002C */
\r
135 unsigned CSDIS; /* 0x0030 */
\r
136 unsigned CSDISSET; /* 0x0034 */
\r
137 unsigned CSDISCLR; /* 0x0038 */
\r
138 unsigned CSDDIS; /* 0x003C */
\r
139 unsigned CSDDISSET; /* 0x0040 */
\r
140 unsigned CSDDISCLR; /* 0x0044 */
\r
141 unsigned GHVSRC; /* 0x0048 */
\r
142 unsigned VCLKASRC; /* 0x004C */
\r
143 unsigned RCLKSRC; /* 0x0050 */
\r
144 unsigned CSVSTAT; /* 0x0054 */
\r
145 unsigned MSTGCR; /* 0x0058 */
\r
146 unsigned MINITGCR; /* 0x005C */
\r
147 unsigned MSINENA; /* 0x0060 */
\r
148 unsigned MSTFAIL; /* 0x0064 */
\r
149 unsigned MSTCGSTAT; /* 0x0068 */
\r
150 unsigned MINISTAT; /* 0x006C */
\r
151 unsigned PLLCTL1; /* 0x0070 */
\r
152 unsigned PLLCTL2; /* 0x0074 */
\r
153 unsigned UERFLAG; /* 0x0078 */
\r
154 unsigned DIEIDL; /* 0x007C */
\r
155 unsigned DIEIDH; /* 0x0080 */
\r
156 unsigned VRCTL; /* 0x0084 */
\r
157 unsigned LPOMONCTL; /* 0x0088 */
\r
158 unsigned CLKTEST; /* 0x008C */
\r
159 unsigned DFTCTRLREG1; /* 0x0090 */
\r
160 unsigned DFTCTRLREG2; /* 0x0094 */
\r
161 unsigned : 32U; /* 0x0098 */
\r
162 unsigned : 32U; /* 0x009C */
\r
163 unsigned GPREG1; /* 0x00A0 */
\r
164 unsigned BTRMSEL; /* 0x00A4 */
\r
165 unsigned IMPFASTS; /* 0x00A8 */
\r
166 unsigned IMPFTADD; /* 0x00AC */
\r
167 unsigned SSISR1; /* 0x00B0 */
\r
168 unsigned SSISR2; /* 0x00B4 */
\r
169 unsigned SSISR3; /* 0x00B8 */
\r
170 unsigned SSISR4; /* 0x00BC */
\r
171 unsigned RAMGCR; /* 0x00C0 */
\r
172 unsigned BMMCR1; /* 0x00C4 */
\r
173 unsigned BMMCR2; /* 0x00C8 */
\r
174 unsigned MMUGCR; /* 0x00CC */
\r
175 #ifdef _little_endian__
\r
176 unsigned : 8U; /* 0x00D0 */
\r
177 unsigned PENA : 1U; /* 0x00D0 */
\r
178 unsigned : 7U; /* 0x00D0 */
\r
179 unsigned VCLKR : 4U; /* 0x00D0 */
\r
180 unsigned : 4U; /* 0x00D0 */
\r
181 unsigned VCLK2R : 4U; /* 0x00D0 */
\r
182 unsigned : 4U; /* 0x00D0 */
\r
184 unsigned : 4U; /* 0x00D0 */
\r
185 unsigned VCLK2R : 4U; /* 0x00D0 */
\r
186 unsigned : 4U; /* 0x00D0 */
\r
187 unsigned VCLKR : 4U; /* 0x00D0 */
\r
188 unsigned : 7U; /* 0x00D0 */
\r
189 unsigned PENA : 1U; /* 0x00D0 */
\r
190 unsigned : 8U; /* 0x00D0 */
\r
192 unsigned : 32U; /* 0x00D4 */
\r
193 unsigned DSPGCR; /* 0x00D8 */
\r
194 unsigned DEVCR1; /* 0x00DC */
\r
195 unsigned SYSECR; /* 0x00E0 */
\r
196 unsigned SYSESR; /* 0x00E4 */
\r
197 unsigned ITIFLAG; /* 0x00E8 */
\r
198 unsigned GBLSTAT; /* 0x00EC */
\r
199 unsigned DEV; /* 0x00F0 */
\r
200 unsigned SSIVEC; /* 0x00F4 */
\r
201 unsigned SSIF; /* 0x00F8 */
\r
205 /** @def systemREG1
\r
206 * @brief System Register Frame 1 Pointer
\r
208 * This pointer is used by the system driver to access the system frame 1 registers.
\r
210 #define systemREG1 ((systemBASE1_t *)0xFFFFFF00U)
\r
214 * @brief Alias name for RTI1CLK PRE clock source
\r
216 * This is an alias name for the RTI1CLK pre clock source.
\r
217 * This can be either:
\r
220 * - 32 kHz Oscillator
\r
222 * - Low Power Oscillator Low
\r
223 * - Low Power Oscillator High
\r
226 #define PRE1 SYS_PLL
\r
229 * @brief Alias name for RTI2CLK pre clock source
\r
231 * This is an alias name for the RTI2CLK pre clock source.
\r
232 * This can be either:
\r
235 * - 32 kHz Oscillator
\r
237 * - Low Power Oscillator Low
\r
238 * - Low Power Oscillator High
\r
241 #define PRE2 SYS_PLL
\r
243 typedef volatile struct systemBase2
\r
245 unsigned PLLCTL3; /* 0x0000 */
\r
246 unsigned : 32U; /* 0x0004 */
\r
247 unsigned STCCLKDIV; /* 0x0008 */
\r
248 unsigned CLKHB_GLBREG; /* 0x000C */
\r
249 unsigned CLKHB_RTIDREG; /* 0x0010 */
\r
250 unsigned HBCD_STAT; /* 0x0014 */
\r
251 unsigned : 32U; /* 0x0018 */
\r
252 unsigned : 32U; /* 0x001C */
\r
253 unsigned CLKTRMI1; /* 0x0020 */
\r
254 unsigned ECPCNTRL0; /* 0x0024 */
\r
255 unsigned ECPCNTRL1; /* 0x0028 */
\r
256 unsigned ECPCNTRL2; /* 0x002C */
\r
257 unsigned ECPCNTRL3; /* 0x0030 */
\r
261 /** @def systemREG2
\r
262 * @brief System Register Frame 2 Pointer
\r
264 * This pointer is used by the system driver to access the system frame 2 registers.
\r
266 #define systemREG2 ((systemBASE2_t *)0xFFFFE100U)
\r
268 typedef volatile struct pcrBase
\r
270 unsigned PMPROTSET0; /* 0x0000 */
\r
271 unsigned PMPROTSET1; /* 0x0004 */
\r
272 unsigned : 32U; /* 0x0008 */
\r
273 unsigned : 32U; /* 0x000C */
\r
274 unsigned PMPROTCLR0; /* 0x0010 */
\r
275 unsigned PMPROTCLR1; /* 0x0014 */
\r
276 unsigned : 32U; /* 0x0018 */
\r
277 unsigned : 32U; /* 0x001C */
\r
278 unsigned PPROTSET0; /* 0x0020 */
\r
279 unsigned PPROTSET1; /* 0x0024 */
\r
280 unsigned PPROTSET2; /* 0x0028 */
\r
281 unsigned PPROTSET3; /* 0x002C */
\r
282 unsigned : 32U; /* 0x0030 */
\r
283 unsigned : 32U; /* 0x0034 */
\r
284 unsigned : 32U; /* 0x0038 */
\r
285 unsigned : 32U; /* 0x003C */
\r
286 unsigned PPROTCLR0; /* 0x0040 */
\r
287 unsigned PPROTCLR1; /* 0x0044 */
\r
288 unsigned PPROTCLR2; /* 0x0048 */
\r
289 unsigned PPROTCLR3; /* 0x004C */
\r
290 unsigned : 32U; /* 0x0050 */
\r
291 unsigned : 32U; /* 0x0054 */
\r
292 unsigned : 32U; /* 0x0058 */
\r
293 unsigned : 32U; /* 0x005C */
\r
294 unsigned PCSPWRDWNSET0; /* 0x0060 */
\r
295 unsigned PCSPWRDWNSET1; /* 0x0064 */
\r
296 unsigned : 32U; /* 0x0068 */
\r
297 unsigned : 32U; /* 0x006C */
\r
298 unsigned PCSPWRDWNCLR0; /* 0x0070 */
\r
299 unsigned PCSPWRDWNCLR1; /* 0x0074 */
\r
300 unsigned : 32U; /* 0x0078 */
\r
301 unsigned : 32U; /* 0x007C */
\r
302 unsigned PSPWRDWNSET0; /* 0x0080 */
\r
303 unsigned PSPWRDWNSET1; /* 0x0084 */
\r
304 unsigned PSPWRDWNSET2; /* 0x0088 */
\r
305 unsigned PSPWRDWNSET3; /* 0x008C */
\r
306 unsigned : 32U; /* 0x0090 */
\r
307 unsigned : 32U; /* 0x0094 */
\r
308 unsigned : 32U; /* 0x0098 */
\r
309 unsigned : 32U; /* 0x009C */
\r
310 unsigned PSPWRDWNCLR0; /* 0x00A0 */
\r
311 unsigned PSPWRDWNCLR1; /* 0x00A4 */
\r
312 unsigned PSPWRDWNCLR2; /* 0x00A8 */
\r
313 unsigned PSPWRDWNCLR3; /* 0x00AC */
\r
317 * @brief Pcr Register Frame Pointer
\r
319 * This pointer is used by the system driver to access the Pcr registers.
\r
321 #define pcrREG ((pcrBASE_t *)0xFFFFE000U)
\r
324 /*----------------------------------------------------------------------------*/
\r
325 /* CAN register definition */
\r
327 typedef volatile struct
\r
421 } Can_RegisterType;
\r
424 #define Can0_Base ((Can_RegisterType *)0xFFF7DC00)
\r
425 #define Can1_Base ((Can_RegisterType *)0xFFF7DE00)
\r
429 typedef volatile struct gioBase
\r
431 unsigned GCR0; /**< 0x0000: Global Control Register */
\r
432 unsigned PWDN; /**< 0x0004: Power Down Register */
\r
433 unsigned INTDET; /**< 0x0008: Interrupt Detect Regsiter*/
\r
434 unsigned POL; /**< 0x000C: Interrupt Polarity Register */
\r
435 unsigned INTENASET; /**< 0x0010: Interrupt Enable Set Register */
\r
436 unsigned INTENACLR; /**< 0x0014: Interrupt Enable Clear Register */
\r
437 unsigned LVLSET; /**< 0x0018: Interrupt Priority Set Register */
\r
438 unsigned LVLCLR; /**< 0x001C: Interrupt Priority Clear Register */
\r
439 unsigned FLG; /**< 0x0020: Interrupt Flag Register */
\r
440 unsigned OFFSET0; /**< 0x0024: Interrupt Offset A Register */
\r
441 unsigned OFFSET1; /**< 0x0028: Interrupt Offset B Register */
\r
445 /** @struct gioPort
\r
446 * @brief GIO Port Register Definition
\r
448 /** @typedef gioPORT_t
\r
449 * @brief GIO Port Register Type Definition
\r
451 * This type is used to access the GIO Port Registers.
\r
453 typedef volatile struct gioPort
\r
455 unsigned DIR; /**< 0x0000: Data Direction Register */
\r
456 unsigned DIN; /**< 0x0004: Data Input Register */
\r
457 unsigned DOUT; /**< 0x0008: Data Output Register */
\r
458 unsigned DSET; /**< 0x000C: Data Output Set Register */
\r
459 unsigned DCLR; /**< 0x0010: Data Output Clear Register */
\r
460 unsigned PDR; /**< 0x0014: Open Drain Regsiter */
\r
461 unsigned PULDIS; /**< 0x0018: Pullup Disable Register */
\r
462 unsigned PSL; /**< 0x001C: Pull Up/Down Selection Register */
\r
467 * @brief GIO Register Frame Pointer
\r
469 * This pointer is used by the GIO driver to access the gio module registers.
\r
471 #define gioREG ((gioBASE_t *)0xFFF7BC00U)
\r
474 * @brief GIO Port (A) Register Pointer
\r
476 * Pointer used by the GIO driver to access PORTA
\r
478 #define gioPORTA ((gioPORT_t *)0xFFF7BC34U)
\r
481 * @brief GIO Port (B) Register Pointer
\r
483 * Pointer used by the GIO driver to access PORTB
\r
485 #define gioPORTB ((gioPORT_t *)0xFFF7BC54U)
\r
490 __IO uint32_t CTRL; /*!< SysTick Control and Status Register */
\r
491 __IO uint32_t LOAD; /*!< SysTick Reload Value Register */
\r
492 __IO uint32_t VAL; /*!< SysTick Current Value Register */
\r
493 __I uint32_t CALIB; /*!< SysTick Calibration Register */
\r
497 static inline void __disable_irq() {
\r
498 __asm volatile("CPSID if");
\r
500 static inline void __enable_irq() {
\r
501 __asm volatile("CPSIE if");
\r
504 static inline unsigned long _Irq_Save(void)
\r
506 register unsigned long val asm("r0");
\r
507 asm("mrs r0, cpsr");
\r
508 asm("and r0, r0, #0xC0"); // Mask the I and F bit of CPSR
\r
513 static inline void _Irq_Restore(unsigned mask) {
\r
515 __asm volatile("CPSID i");
\r
517 __asm volatile("CPSIE i");
\r
520 __asm volatile("CPSID f");
\r
522 __asm volatile("CPSIE f");
\r
526 #endif /* CORE_CR4_H_ */
\r