]> rtime.felk.cvut.cz Git - arc.git/blob - arch/arm/arm_cr4/kernel/core_cr4.h
44fb1381a4130bb8e4775a8cf0d2b0ab129fd800
[arc.git] / arch / arm / arm_cr4 / kernel / core_cr4.h
1 /* -------------------------------- Arctic Core ------------------------------\r
2  * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
3  *\r
4  * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
5  *\r
6  * This source code is free software; you can redistribute it and/or modify it\r
7  * under the terms of the GNU General Public License version 2 as published by the\r
8  * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
9  *\r
10  * This program is distributed in the hope that it will be useful, but\r
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
13  * for more details.\r
14  * -------------------------------- Arctic Core ------------------------------*/\r
15 \r
16 #ifndef CORE_CR4_H_\r
17 #define CORE_CR4_H_\r
18 \r
19 #include "Std_Types.h"\r
20 \r
21 #define     __I     volatile const            /*!< defines 'read only' permissions      */\r
22 #define     __O     volatile                  /*!< defines 'write only' permissions     */\r
23 #define     __IO    volatile                  /*!< defines 'read / write' permissions   */\r
24 \r
25 \r
26 typedef volatile struct vimBase\r
27 {\r
28     unsigned              : 24U;    /* 0x0000        */\r
29     unsigned      IRQIVEC :  8U;    /* 0x0000        */\r
30     unsigned              : 24U;    /* 0x0004        */\r
31     unsigned      FIQIVEC :  8U;    /* 0x0004        */\r
32     unsigned      : 32U;            /* 0x0008        */\r
33     unsigned      : 32U;            /* 0x000C        */\r
34     unsigned      FIRQPR0;          /* 0x0010        */\r
35     unsigned      FIRQPR1;          /* 0x0014        */\r
36     unsigned      FIRQPR2;          /* 0x0018        */\r
37     unsigned      FIRQPR3;          /* 0x001C        */\r
38     unsigned      INTREQ0;          /* 0x0020        */\r
39     unsigned      INTREQ1;          /* 0x0024        */\r
40     unsigned      INTREQ2;          /* 0x0028        */\r
41     unsigned      INTREQ3;          /* 0x002C        */\r
42     unsigned      REQMASKSET0;      /* 0x0030        */\r
43     unsigned      REQMASKSET1;      /* 0x0034        */\r
44     unsigned      REQMASKSET2;      /* 0x0038        */\r
45     unsigned      REQMASKSET3;      /* 0x003C        */\r
46     unsigned      REQMASKCLR0;      /* 0x0040        */\r
47     unsigned      REQMASKCLR1;      /* 0x0044        */\r
48     unsigned      REQMASKCLR2;      /* 0x0048        */\r
49     unsigned      REQMASKCLR3;      /* 0x004C        */\r
50     unsigned      WAKEMASKSET0;     /* 0x0050        */\r
51     unsigned      WAKEMASKSET1;     /* 0x0054        */\r
52     unsigned      WAKEMASKSET2;     /* 0x0058        */\r
53     unsigned      WAKEMASKSET3;     /* 0x005C        */\r
54     unsigned      WAKEMASKCLR0;     /* 0x0060        */\r
55     unsigned      WAKEMASKCLR1;     /* 0x0064        */\r
56     unsigned      WAKEMASKCLR2;     /* 0x0068        */\r
57     unsigned      WAKEMASKCLR3;     /* 0x006C        */\r
58     unsigned      IRQVECREG;        /* 0x0070        */\r
59     unsigned      FIQVECREQ;        /* 0x0074        */\r
60     unsigned                 :  9U; /* 0x0078        */\r
61     unsigned      CAPEVTSRC1 :  7U; /* 0x0078        */\r
62     unsigned                 :  9U; /* 0x0078        */\r
63     unsigned      CAPEVTSRC0 :  7U; /* 0x0078        */\r
64     unsigned      : 32U;            /* 0x007C        */\r
65     unsigned char CHANMAP[64U];     /* 0x0080-0x017C */\r
66 } vimBASE_t;\r
67 \r
68 #define vimREG ((vimBASE_t *)0xFFFFFE00U)\r
69 \r
70 \r
71 \r
72 typedef volatile struct rtiBase\r
73 {\r
74     unsigned GCTRL;          /**< 0x0000: Global Control Register   */\r
75     unsigned TBCTRL;         /**< 0x0004: Timebase Control Register */\r
76     unsigned CAPCTRL;        /**< 0x0008: Capture Control Register  */\r
77     unsigned COMPCTRL;       /**< 0x000C: Compare Control Register  */\r
78     struct\r
79     {\r
80         unsigned FRCx;       /**< 0x0010,0x0030: Free Running Counter x Register         */\r
81         unsigned UCx;        /**< 0x0014,0x0034: Up Counter x Register                   */\r
82         unsigned CPUCx;      /**< 0x0018,0x0038: Compare Up Counter x Register           */\r
83         unsigned : 32;       /**< 0x001C,0x003C: Reserved                                */\r
84         unsigned CAFRCx;     /**< 0x0020,0x0040: Capture Free Running Counter x Register */\r
85         unsigned CAUCx;      /**< 0x0024,0x0044: Capture Up Counter x Register           */\r
86         unsigned : 32;       /**< 0x0028,0x0048: Reserved                                */\r
87         unsigned : 32;       /**< 0x002C,0x004C: Reserved                                */\r
88     } CNT[2U];               /**< Counter x selection:\r
89                                     - 0: Counter 0\r
90                                     - 1: Counter 1                                       */\r
91     struct\r
92     {\r
93         unsigned COMPx;      /**< 0x0050,0x0058,0x0060,0x0068: Compare x Register        */\r
94         unsigned UDCPx;      /**< 0x0054,0x005C,0x0064,0x006C: Update Compare x Register */\r
95     } CMP[4U];               /**< Compare x selection:\r
96                                     - 0: Compare 0\r
97                                     - 1: Compare 1\r
98                                     - 2: Compare 2\r
99                                     - 3: Compare 3                                       */\r
100     unsigned TBLCOMP;        /**< 0x0070: External Clock Timebase Low Compare Register   */\r
101     unsigned TBHCOMP;        /**< 0x0074: External Clock Timebase High Compare Register  */\r
102     unsigned : 32;           /**< 0x0078: Reserved                                       */\r
103     unsigned : 32;           /**< 0x007C: Reserved                                       */\r
104     unsigned SETINT;         /**< 0x0080: Set/Status Interrupt Register                  */\r
105     unsigned CLEARINT;       /**< 0x0084: Clear/Status Interrupt Register                */\r
106     unsigned INTFLAG;        /**< 0x008C: Interrupt Flag Register                        */\r
107 } rtiBASE_t;\r
108 \r
109 /** @def rtiREG1\r
110 *   @brief RTI1 Register Frame Pointer\r
111 *\r
112 *   This pointer is used by the RTI driver to access the RTI1 registers.\r
113 */\r
114 #define rtiREG1 ((rtiBASE_t *)0xFFFFFC00)\r
115 \r
116 \r
117 enum systemClockSource\r
118 {\r
119     SYS_OSC      = 0, /**< Alias for oscillator clock Source                */\r
120     SYS_PLL      = 1, /**< Alias for Pll clock Source                       */\r
121     SYS_O32      = 2, /**< Alias for 32 kHz oscillator clock Source         */\r
122     SYS_EXTERNAL = 3, /**< Alias for external clock Source                  */\r
123     SYS_LPO_LOW  = 4, /**< Alias for low power oscillator low clock Source  */\r
124     SYS_LPO_HIGH = 5, /**< Alias for low power oscillator high clock Source */\r
125     SYS_FR_PLL   = 6, /**< Alias for flexray pll clock Source               */\r
126     SYS_VCLK     = 9  /**< Alias for synchronous VCLK1 clock Source         */\r
127 };\r
128 \r
129 typedef volatile struct systemBase1\r
130 {\r
131     unsigned SYSPC1;                 /* 0x0000 */\r
132     unsigned SYSPC2;                 /* 0x0004 */\r
133     unsigned SYSPC3;                 /* 0x0008 */\r
134     unsigned SYSPC4;                 /* 0x000C */\r
135     unsigned SYSPC5;                 /* 0x0010 */\r
136     unsigned SYSPC6;                 /* 0x0014 */\r
137     unsigned SYSPC7;                 /* 0x0018 */\r
138     unsigned SYSPC8;                 /* 0x001C */\r
139     unsigned SYSPC9;                 /* 0x0020 */\r
140     unsigned SSWPLL1;                /* 0x0024 */\r
141     unsigned SSWPLL2;                /* 0x0028 */\r
142     unsigned SSWPLL3;                /* 0x002C */\r
143     unsigned CSDIS;                  /* 0x0030 */\r
144     unsigned CSDISSET;               /* 0x0034 */\r
145     unsigned CSDISCLR;               /* 0x0038 */\r
146     unsigned CSDDIS;                 /* 0x003C */\r
147     unsigned CSDDISSET;              /* 0x0040 */\r
148     unsigned CSDDISCLR;              /* 0x0044 */\r
149     unsigned GHVSRC;                 /* 0x0048 */\r
150     unsigned VCLKASRC;               /* 0x004C */\r
151     unsigned RCLKSRC;                /* 0x0050 */\r
152     unsigned CSVSTAT;                /* 0x0054 */\r
153     unsigned MSTGCR;                 /* 0x0058 */\r
154     unsigned MINITGCR;               /* 0x005C */\r
155     unsigned MSINENA;                /* 0x0060 */\r
156     unsigned MSTFAIL;                /* 0x0064 */\r
157     unsigned MSTCGSTAT;              /* 0x0068 */\r
158     unsigned MINISTAT;               /* 0x006C */\r
159     unsigned PLLCTL1;                /* 0x0070 */\r
160     unsigned PLLCTL2;                /* 0x0074 */\r
161     unsigned UERFLAG;                /* 0x0078 */\r
162     unsigned DIEIDL;                 /* 0x007C */\r
163     unsigned DIEIDH;                 /* 0x0080 */\r
164     unsigned VRCTL;                  /* 0x0084 */\r
165     unsigned LPOMONCTL;              /* 0x0088 */\r
166     unsigned CLKTEST;                /* 0x008C */\r
167     unsigned DFTCTRLREG1;            /* 0x0090 */\r
168     unsigned DFTCTRLREG2;            /* 0x0094 */\r
169     unsigned : 32U;                  /* 0x0098 */\r
170     unsigned : 32U;                  /* 0x009C */\r
171     unsigned GPREG1;                 /* 0x00A0 */\r
172     unsigned BTRMSEL;                /* 0x00A4 */\r
173     unsigned IMPFASTS;               /* 0x00A8 */\r
174     unsigned IMPFTADD;               /* 0x00AC */\r
175     unsigned SSISR1;                 /* 0x00B0 */\r
176     unsigned SSISR2;                 /* 0x00B4 */\r
177     unsigned SSISR3;                 /* 0x00B8 */\r
178     unsigned SSISR4;                 /* 0x00BC */\r
179     unsigned RAMGCR;                 /* 0x00C0 */\r
180     unsigned BMMCR1;                 /* 0x00C4 */\r
181     unsigned BMMCR2;                 /* 0x00C8 */\r
182     unsigned MMUGCR;                 /* 0x00CC */\r
183 #ifdef _little_endian__\r
184     unsigned        : 8U;            /* 0x00D0 */\r
185     unsigned PENA   : 1U;            /* 0x00D0 */\r
186     unsigned        : 7U;            /* 0x00D0 */\r
187     unsigned VCLKR  : 4U;            /* 0x00D0 */\r
188     unsigned        : 4U;            /* 0x00D0 */\r
189     unsigned VCLK2R : 4U;            /* 0x00D0 */\r
190     unsigned        : 4U;            /* 0x00D0 */\r
191 #else\r
192     unsigned        : 4U;            /* 0x00D0 */\r
193     unsigned VCLK2R : 4U;            /* 0x00D0 */\r
194     unsigned        : 4U;            /* 0x00D0 */\r
195     unsigned VCLKR  : 4U;            /* 0x00D0 */\r
196     unsigned        : 7U;            /* 0x00D0 */\r
197     unsigned PENA   : 1U;            /* 0x00D0 */\r
198     unsigned        : 8U;            /* 0x00D0 */\r
199 #endif\r
200     unsigned : 32U;                  /* 0x00D4 */\r
201     unsigned DSPGCR;                 /* 0x00D8 */\r
202     unsigned DEVCR1;                 /* 0x00DC */\r
203     unsigned SYSECR;                 /* 0x00E0 */\r
204     unsigned SYSESR;                 /* 0x00E4 */\r
205     unsigned ITIFLAG;                /* 0x00E8 */\r
206     unsigned GBLSTAT;                /* 0x00EC */\r
207     unsigned DEV;                    /* 0x00F0 */\r
208     unsigned SSIVEC;                 /* 0x00F4 */\r
209     unsigned SSIF;                   /* 0x00F8 */\r
210 } systemBASE1_t;\r
211 \r
212 \r
213 /** @def systemREG1\r
214 *   @brief System Register Frame 1 Pointer\r
215 *\r
216 *   This pointer is used by the system driver to access the system frame 1 registers.\r
217 */\r
218 #define systemREG1 ((systemBASE1_t *)0xFFFFFF00U)\r
219 \r
220 \r
221 /** @def PRE1\r
222 *   @brief Alias name for RTI1CLK PRE clock source\r
223 *\r
224 *   This is an alias name for the RTI1CLK pre clock source.\r
225 *   This can be either:\r
226 *     - Oscillator\r
227 *     - Pll\r
228 *     - 32 kHz Oscillator\r
229 *     - External\r
230 *     - Low Power Oscillator Low\r
231 *     - Low Power Oscillator High\r
232 *     - Flexray Pll\r
233 */\r
234 #define PRE1 SYS_PLL\r
235 \r
236 /** @def PRE2\r
237 *   @brief Alias name for RTI2CLK pre clock source\r
238 *\r
239 *   This is an alias name for the RTI2CLK pre clock source.\r
240 *   This can be either:\r
241 *     - Oscillator\r
242 *     - Pll\r
243 *     - 32 kHz Oscillator\r
244 *     - External\r
245 *     - Low Power Oscillator Low\r
246 *     - Low Power Oscillator High\r
247 *     - Flexray Pll\r
248 */\r
249 #define PRE2 SYS_PLL\r
250 \r
251 typedef volatile struct systemBase2\r
252 {\r
253     unsigned PLLCTL3;        /* 0x0000 */\r
254     unsigned : 32U;          /* 0x0004 */\r
255     unsigned STCCLKDIV;      /* 0x0008 */\r
256     unsigned CLKHB_GLBREG;   /* 0x000C */\r
257     unsigned CLKHB_RTIDREG;  /* 0x0010 */\r
258     unsigned HBCD_STAT;      /* 0x0014 */\r
259     unsigned : 32U;          /* 0x0018 */\r
260     unsigned : 32U;          /* 0x001C */\r
261     unsigned CLKTRMI1;       /* 0x0020 */\r
262     unsigned ECPCNTRL0;      /* 0x0024 */\r
263     unsigned ECPCNTRL1;      /* 0x0028 */\r
264     unsigned ECPCNTRL2;      /* 0x002C */\r
265     unsigned ECPCNTRL3;      /* 0x0030 */\r
266 } systemBASE2_t;\r
267 \r
268 \r
269 /** @def systemREG2\r
270 *   @brief System Register Frame 2 Pointer\r
271 *\r
272 *   This pointer is used by the system driver to access the system frame 2 registers.\r
273 */\r
274 #define systemREG2 ((systemBASE2_t *)0xFFFFE100U)\r
275 \r
276 typedef volatile struct pcrBase\r
277 {\r
278     unsigned PMPROTSET0;    /* 0x0000 */\r
279     unsigned PMPROTSET1;    /* 0x0004 */\r
280     unsigned : 32U;         /* 0x0008 */\r
281     unsigned : 32U;         /* 0x000C */\r
282     unsigned PMPROTCLR0;    /* 0x0010 */\r
283     unsigned PMPROTCLR1;    /* 0x0014 */\r
284     unsigned : 32U;         /* 0x0018 */\r
285     unsigned : 32U;         /* 0x001C */\r
286     unsigned PPROTSET0;     /* 0x0020 */\r
287     unsigned PPROTSET1;     /* 0x0024 */\r
288     unsigned PPROTSET2;     /* 0x0028 */\r
289     unsigned PPROTSET3;     /* 0x002C */\r
290     unsigned : 32U;         /* 0x0030 */\r
291     unsigned : 32U;         /* 0x0034 */\r
292     unsigned : 32U;         /* 0x0038 */\r
293     unsigned : 32U;         /* 0x003C */\r
294     unsigned PPROTCLR0;     /* 0x0040 */\r
295     unsigned PPROTCLR1;     /* 0x0044 */\r
296     unsigned PPROTCLR2;     /* 0x0048 */\r
297     unsigned PPROTCLR3;     /* 0x004C */\r
298     unsigned : 32U;         /* 0x0050 */\r
299     unsigned : 32U;         /* 0x0054 */\r
300     unsigned : 32U;         /* 0x0058 */\r
301     unsigned : 32U;         /* 0x005C */\r
302     unsigned PCSPWRDWNSET0; /* 0x0060 */\r
303     unsigned PCSPWRDWNSET1; /* 0x0064 */\r
304     unsigned : 32U;         /* 0x0068 */\r
305     unsigned : 32U;         /* 0x006C */\r
306     unsigned PCSPWRDWNCLR0; /* 0x0070 */\r
307     unsigned PCSPWRDWNCLR1; /* 0x0074 */\r
308     unsigned : 32U;         /* 0x0078 */\r
309     unsigned : 32U;         /* 0x007C */\r
310     unsigned PSPWRDWNSET0;  /* 0x0080 */\r
311     unsigned PSPWRDWNSET1;  /* 0x0084 */\r
312     unsigned PSPWRDWNSET2;  /* 0x0088 */\r
313     unsigned PSPWRDWNSET3;  /* 0x008C */\r
314     unsigned : 32U;         /* 0x0090 */\r
315     unsigned : 32U;         /* 0x0094 */\r
316     unsigned : 32U;         /* 0x0098 */\r
317     unsigned : 32U;         /* 0x009C */\r
318     unsigned PSPWRDWNCLR0;  /* 0x00A0 */\r
319     unsigned PSPWRDWNCLR1;  /* 0x00A4 */\r
320     unsigned PSPWRDWNCLR2;  /* 0x00A8 */\r
321     unsigned PSPWRDWNCLR3;  /* 0x00AC */\r
322 } pcrBASE_t;\r
323 \r
324 /** @def pcrREG\r
325 *   @brief Pcr Register Frame Pointer\r
326 *\r
327 *   This pointer is used by the system driver to access the Pcr registers.\r
328 */\r
329 #define pcrREG ((pcrBASE_t *)0xFFFFE000U)\r
330 \r
331 \r
332 /*----------------------------------------------------------------------------*/\r
333 /* CAN register definition                                                    */\r
334 \r
335 typedef volatile struct\r
336 {\r
337     uint32   CTL;\r
338     uint32   SR;\r
339     unsigned     : 16;\r
340     unsigned REC :  8;\r
341     unsigned TEC :  8;\r
342     uint32   BTR;\r
343     uint32   IR;\r
344     uint32   TR;\r
345     unsigned : 32;\r
346     uint32   PEC;\r
347     unsigned : 32;\r
348     unsigned : 32;\r
349     unsigned : 32;\r
350     unsigned : 32;\r
351     unsigned : 32;\r
352     unsigned : 32;\r
353     unsigned : 32;\r
354     unsigned : 32;\r
355     unsigned : 32;\r
356     unsigned : 32;\r
357     unsigned : 32;\r
358     unsigned : 32;\r
359     unsigned : 32;\r
360     unsigned : 32;\r
361     unsigned : 32;\r
362     unsigned : 32;\r
363     unsigned : 32;\r
364     unsigned : 32;\r
365     unsigned : 32;\r
366     unsigned : 32;\r
367     unsigned : 32;\r
368     unsigned : 32;\r
369         unsigned : 32;\r
370         unsigned : 32;\r
371     uint32   ABOT;\r
372     uint32   TRX;\r
373     uint32   TRx[4];\r
374     uint32   NDX;\r
375     uint32   NDx[4];\r
376     uint32   IPX;\r
377     uint32   IPx[4];\r
378     uint32   MVX;\r
379     uint32   MVx[4];\r
380     unsigned : 32;\r
381     uint32   IPMx[4];\r
382     unsigned : 32;\r
383     unsigned : 32;\r
384     unsigned : 32;\r
385     unsigned : 32;\r
386     unsigned : 32;\r
387         unsigned : 32;\r
388     struct\r
389     {\r
390         uint32   COM;\r
391         uint32   MASK;\r
392         uint32   ARB;\r
393         uint32   MC;\r
394         uint8    DATx[8];\r
395         unsigned : 32;\r
396         unsigned : 32;\r
397     } IFx[3];\r
398     uint32   IF3UEy[4];\r
399     unsigned : 32;\r
400     unsigned : 32;\r
401     unsigned : 32;\r
402     unsigned : 32;\r
403     unsigned : 32;\r
404     unsigned : 32;\r
405     unsigned : 32;\r
406     unsigned : 32;\r
407     unsigned : 32;\r
408     unsigned : 32;\r
409     unsigned : 32;\r
410     unsigned : 32;\r
411     unsigned : 32;\r
412     unsigned : 32;\r
413     unsigned : 32;\r
414     unsigned : 32;\r
415     unsigned : 32;\r
416     unsigned : 32;\r
417     unsigned : 32;\r
418     unsigned : 32;\r
419     unsigned : 32;\r
420     unsigned : 32;\r
421     unsigned : 32;\r
422     unsigned : 32;\r
423     unsigned : 32;\r
424         unsigned : 32;\r
425         unsigned : 32;\r
426         unsigned : 32;\r
427     uint32   IOTX;\r
428     uint32   IORX;\r
429 } Can_RegisterType;\r
430 \r
431 \r
432 #define DCAN1_Base ((Can_RegisterType *)0xFFF7DC00)\r
433 #define DCAN2_Base ((Can_RegisterType *)0xFFF7DE00)\r
434 #define DCAN3_Base ((Can_RegisterType *)0xFFF7E000)\r
435 \r
436 \r
437 \r
438 typedef volatile struct gioBase\r
439 {\r
440     unsigned GCR0;      /**< 0x0000: Global Control Register */\r
441     unsigned PWDN;      /**< 0x0004: Power Down Register */\r
442     unsigned INTDET;    /**< 0x0008: Interrupt Detect Regsiter*/\r
443     unsigned POL;       /**< 0x000C: Interrupt Polarity Register */\r
444     unsigned INTENASET; /**< 0x0010: Interrupt Enable Set Register */\r
445     unsigned INTENACLR; /**< 0x0014: Interrupt Enable Clear Register */\r
446     unsigned LVLSET;    /**< 0x0018: Interrupt Priority Set Register */\r
447     unsigned LVLCLR;    /**< 0x001C: Interrupt Priority Clear Register */\r
448     unsigned FLG;       /**< 0x0020: Interrupt Flag Register */\r
449     unsigned OFFSET0;   /**< 0x0024: Interrupt Offset A Register */\r
450     unsigned OFFSET1;   /**< 0x0028: Interrupt Offset B Register */\r
451 } GIO_Base_RegisterType;\r
452 \r
453 \r
454 /** @struct gioPort\r
455 *   @brief GIO Port Register Definition\r
456 */\r
457 /** @typedef gioPORT_t\r
458 *   @brief GIO Port Register Type Definition\r
459 *\r
460 *   This type is used to access the GIO Port Registers.\r
461 */\r
462 typedef volatile struct gioPort\r
463 {\r
464     unsigned DIR;    /**< 0x0000: Data Direction Register */\r
465     unsigned DIN;    /**< 0x0004: Data Input Register */\r
466     unsigned DOUT;   /**< 0x0008: Data Output Register */\r
467     unsigned DSET;   /**< 0x000C: Data Output Set Register */\r
468     unsigned DCLR;   /**< 0x0010: Data Output Clear Register */\r
469     unsigned PDR;    /**< 0x0014: Open Drain Regsiter */\r
470     unsigned PULDIS; /**< 0x0018: Pullup Disable Register */\r
471     unsigned PSL;    /**< 0x001C: Pull Up/Down Selection Register */\r
472 } GIO_RegisterType;\r
473 \r
474 #define GIO_PORTA_BASE ((GIO_RegisterType *)0xFFF7BC34)\r
475 #define GIO_PORTB_BASE ((GIO_RegisterType *)0xFFF7BC54)\r
476 \r
477 \r
478 /** @def gioREG\r
479 *   @brief GIO Register Frame Pointer\r
480 *\r
481 *   This pointer is used by the GIO driver to access the gio module registers.\r
482 */\r
483 #define gioREG   ((GIO_Base_RegisterType *)0xFFF7BC00U)\r
484 \r
485 /** @def gioPORTA\r
486 *   @brief GIO Port (A) Register Pointer\r
487 *\r
488 *   Pointer used by the GIO driver to access PORTA\r
489 */\r
490 #define gioPORTA ((gioPORT_t *)0xFFF7BC34U)\r
491 \r
492 /** @def gioPORTB\r
493 *   @brief GIO Port (B) Register Pointer\r
494 *\r
495 *   Pointer used by the GIO driver to access PORTB\r
496 */\r
497 #define gioPORTB ((gioPORT_t *)0xFFF7BC54U)\r
498 \r
499 \r
500 typedef struct\r
501 {\r
502   __IO uint32_t CTRL;                         /*!< SysTick Control and Status Register */\r
503   __IO uint32_t LOAD;                         /*!< SysTick Reload Value Register       */\r
504   __IO uint32_t VAL;                          /*!< SysTick Current Value Register      */\r
505   __I  uint32_t CALIB;                        /*!< SysTick Calibration Register        */\r
506 } SysTick_Type;\r
507 \r
508 \r
509 static inline void __disable_irq() {\r
510   __asm volatile("CPSID if");\r
511 }\r
512 static inline void __enable_irq() {\r
513         __asm volatile("CPSIE if");\r
514 }\r
515 \r
516 static inline unsigned long _Irq_Save(void)\r
517 {\r
518    register unsigned long val asm("r0");\r
519    asm("mrs r0, cpsr");\r
520    asm("and r0, r0, #0xC0"); // Mask the I and F bit of CPSR\r
521    __disable_irq();\r
522    return val;\r
523 }\r
524 \r
525 static inline void _Irq_Restore(unsigned mask) {\r
526         if (mask & 0x80) {\r
527                 __asm volatile("CPSID i");\r
528         } else {\r
529                 __asm volatile("CPSIE i");\r
530         }\r
531         if (mask & 0x40) {\r
532                 __asm volatile("CPSID f");\r
533         } else {\r
534                 __asm volatile("CPSIE f");\r
535         }\r
536 }\r
537 \r
538 #endif /* CORE_CR4_H_ */\r