]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_lowlevel.c
bcb1f71ce8af8d6d4f844bd7c0eb670a04f3fdb2
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D4x_EK_IAR / AtmelFiles / libboard_sama5d4x-ek / source / board_lowlevel.c
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License\r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2014, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /**\r
31  * \file\r
32  *\r
33  * Provides the low-level initialization function that called on chip startup.\r
34  */\r
35 \r
36 /*----------------------------------------------------------------------------\r
37  *        Headers\r
38  *----------------------------------------------------------------------------*/\r
39 \r
40 #include "board.h"\r
41 \r
42 \r
43 /*----------------------------------------------------------------------------\r
44  *        Definiation\r
45  *----------------------------------------------------------------------------*/\r
46 #define CPSR_MASK_IRQ 0x00000080\r
47 #define CPSR_MASK_FIQ 0x00000040\r
48 \r
49 /*----------------------------------------------------------------------------\r
50  *        Local variables\r
51  *----------------------------------------------------------------------------*/\r
52 \r
53 \r
54 \r
55 /** Array of Max peripheral Frequence support for SAMA5 chip*/\r
56 const PeripheralClockMaxFreq periClkMaxFreq[] = {\r
57     /* peripheral ID, Max frequency */\r
58        {ID_DBGU    , (BOARD_MCK >>1) },\r
59        {ID_PIT     , (BOARD_MCK >>1) },\r
60        {ID_WDT     , (BOARD_MCK >>1) },\r
61        {ID_HSMC    , (BOARD_MCK >>1) },\r
62        {ID_PIOA    , (BOARD_MCK >>1) },\r
63        {ID_PIOB    , (BOARD_MCK >>1) },\r
64        {ID_PIOC    , (BOARD_MCK >>1) },\r
65        {ID_PIOD    , (BOARD_MCK >>1) },\r
66        {ID_PIOE    , (BOARD_MCK >>1) },\r
67        {ID_USART0  , (BOARD_MCK >>1) },\r
68        {ID_USART1  , (BOARD_MCK >>1) },\r
69        {ID_USART2  , (BOARD_MCK >>1) },\r
70        {ID_USART3  , (BOARD_MCK >>1) },\r
71        {ID_UART0   , (BOARD_MCK >>1) },\r
72        {ID_UART1   , (BOARD_MCK >>1) },\r
73        {ID_TWI0    , (BOARD_MCK >>1) },\r
74        {ID_TWI1    , (BOARD_MCK >>1) },\r
75        {ID_TWI2    , (BOARD_MCK >>1) },\r
76        {ID_HSMCI0  , (BOARD_MCK >>1) },\r
77        {ID_HSMCI1  , (BOARD_MCK >>1) },\r
78        {ID_SPI0    , (BOARD_MCK >>1) },\r
79        {ID_SPI1    , (BOARD_MCK >>1) },\r
80        {ID_TC0     , (BOARD_MCK >>1) },\r
81        {ID_TC1     , (BOARD_MCK >>1) },\r
82        {ID_PWM     , (BOARD_MCK >>1) },\r
83        {ID_ADC     , (BOARD_MCK >>1) },\r
84        {ID_XDMAC0  , BOARD_MCK },\r
85        {ID_XDMAC1  , BOARD_MCK },\r
86        {ID_UHPHS   , (BOARD_MCK >>1) },\r
87        {ID_UDPHS   , (BOARD_MCK >>1) },\r
88        {ID_GMAC0   , (BOARD_MCK >>1) },\r
89        {ID_GMAC1   , (BOARD_MCK >>1) },\r
90        {ID_LCDC    , BOARD_MCK },\r
91        {ID_ISI     , BOARD_MCK },\r
92        {ID_SSC0    , (BOARD_MCK >>1) },\r
93        {ID_SSC1    , (BOARD_MCK >>1) },\r
94        {ID_SHA     , (BOARD_MCK >>1) },\r
95        {ID_AES     , (BOARD_MCK >>1) },\r
96        {ID_TDES    , (BOARD_MCK >>1) },\r
97        {ID_TDES    , (BOARD_MCK >>1) },\r
98        {ID_TRNG    , (BOARD_MCK >>1) },\r
99        {ID_ICM     , (BOARD_MCK >>1) },\r
100        {ID_ARM     , (BOARD_MCK >>1) },\r
101        {ID_IRQ     , (BOARD_MCK >>1) },\r
102        {ID_SFC     , (BOARD_MCK >>1) },\r
103        {ID_MPDDRC  , BOARD_MCK }\r
104 };\r
105 \r
106 static const char* abort_status[][2]=\r
107 {\r
108   // IFSR status        ,       DFSR status\r
109   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//0\r
110   {"Unknown(reserved status)",                          "Alignment Fault"                               },//1\r
111   {"Debug Event",                                       "Debug Event"                                   },//2\r
112   {"Access flag - section",                             "Access flag - section"                         },//3\r
113   {"Unknown(reserved status)",                          "Instruction cache maintenance"                 },//4\r
114   {"Translation fault - section",                       "Translation fault - section"                   },//5\r
115   {"Access flag - Page",                                "Access flag - Page"                            },//6\r
116   {"Translation fault -Page",                           "Translation fault -Page"                       },//7\r
117   {"Synchronous external abort",                        "Synchronous external abort, nontranslation"    },//8\r
118   {"Domain fault - Section",                            "Domain fault - Section"                        },//9\r
119   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//10\r
120   {"Domain fault - Page",                               "Domain fault - Page"                           },//11\r
121   {"Synchronous external abort - L1 Translation",       "Synchronous external abort - L1 Translation"   },//12\r
122   {"Permission fault - Section",                        "Permission fault - Section"                    },//13\r
123   {"Synchronous external abort - L2 Translation",       "Synchronous external abort - L2 Translation"   },//14\r
124   {"Permission fault - Page",                           "Permission fault - Page"                       },//15\r
125   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//16\r
126   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//17\r
127   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//18\r
128   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//19\r
129   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//20\r
130   {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//21\r
131   {"Unknown(reserved status)",                          "Asynchronous external abort"}\r
132 \r
133 };\r
134 \r
135 /*----------------------------------------------------------------------------\r
136  *        Internal functions\r
137  *----------------------------------------------------------------------------*/\r
138 \r
139 \r
140 void v_ARM_ClrCPSR_bits(unsigned int mask);\r
141 void NonSecureITInit (void);\r
142 void SecureITInit (void);\r
143 void Prefetch_C_Handler( void);\r
144 void Abort_C_Handler( void);\r
145 void Undefined_C_Handler(void);\r
146 \r
147 /**\r
148  * \brief Default spurious interrupt handler. Infinite loop.\r
149  */\r
150 void defaultSpuriousHandler( void )\r
151 {\r
152     while (1);\r
153 }\r
154 \r
155 void Abort_C_Handler( void)\r
156 {\r
157     uint32_t v1,v2, dfsr;\r
158     v1= 0;\r
159     v2= 0;\r
160     asm("mrc   p15, 0, %0, c5, c0, 0" : : "r"(v1));\r
161     asm("mrc   p15, 0, %0, c6, c0, 0" : : "r"(v2));\r
162 \r
163     dfsr = ((v1 >> 4) & 0x0F);\r
164     printf("\n\r######################################################################\n\r");\r
165     printf("Data Abort occured in %x domain\n\r", (unsigned int)dfsr);\r
166     dfsr = (((v1 & 0x400) >> 6) | (v1 & 0x0F));\r
167     printf("Data abort fault reason is: %s\n\r", (char*)abort_status[dfsr][1]);\r
168     printf("Data fault occured at Address = 0x%08x\n\n\r",(unsigned int)v2);\r
169 \r
170 \r
171     printf("-[Info]-Data fault status register value = 0x%x\n\r",(unsigned int)v1);\r
172 \r
173     while(1);\r
174 \r
175 }\r
176 \r
177 \r
178 void Prefetch_C_Handler( void)\r
179 {\r
180     uint32_t v1,v2, ifsr;\r
181     v1= 0;\r
182     v2= 0;\r
183 \r
184     asm("mrc   p15, 0, %0, c5, c0, 1" : : "r"(v1));\r
185     asm("mrc   p15, 0, %0, c6, c0, 2" : : "r"(v2));\r
186 \r
187     ifsr = (((v1 & 0x400) >> 6) | (v1 & 0x0F));\r
188     printf("\n\r######################################################################\n\r");\r
189     printf("Instruction prefetch abort reason is: %s\n\r", (char*)abort_status[ifsr][0]);\r
190     printf("Instruction prefetch Fault occured at Address = 0x%08x\n\n\r",(unsigned int)v2);\r
191 \r
192     printf("-[INFO]- Prefetch Fault status register value by = 0x%x\n\r",(unsigned int)v1);\r
193 \r
194     while(1);\r
195 \r
196 }\r
197 \r
198 void Undefined_C_Handler( void)\r
199 {\r
200   printf("Undefined abort \n\r");\r
201   while(1);\r
202 }\r
203 \r
204 void v_ARM_ClrCPSR_bits(unsigned int mask)\r
205 {\r
206   asm("MRS R1, CPSR");   // Get current CPSR\r
207   asm("MVN R0, R0");     // invert\r
208   asm("AND R0, R0, R1"); // Calculate new CPSR value\r
209   asm("MSR CPSR_c,R0");  // Set new value\r
210   asm("bx lr");\r
211 }\r
212 \r
213 void Dummy_Handler( void );\r
214 void Spurious_Handler( void );\r
215 #pragma weak SAIC0_Handler=Dummy_Handler\r
216 #pragma weak SYS_IrqHandler=Dummy_Handler\r
217 #pragma weak ARM_IrqHandler=Dummy_Handler\r
218 #pragma weak PIT_IrqHandler=Dummy_Handler\r
219 #pragma weak WDT_IrqHandler=Dummy_Handler\r
220 #pragma weak PIOD_IrqHandler=Dummy_Handler\r
221 #pragma weak USART0_IrqHandler=Dummy_Handler\r
222 #pragma weak USART1_IrqHandler=Dummy_Handler\r
223 #pragma weak XDMAC0_IrqHandler=Dummy_Handler\r
224 #pragma weak ICM_IrqHandler=Dummy_Handler\r
225 #pragma weak PKCC_IrqHandler=Dummy_Handler\r
226 #pragma weak SCI_IrqHandler=Dummy_Handler\r
227 #pragma weak AES_IrqHandler=Dummy_Handler\r
228 #pragma weak AESB_IrqHandler=Dummy_Handler\r
229 #pragma weak TDES_IrqHandler=Dummy_Handler\r
230 #pragma weak SHA_IrqHandler=Dummy_Handler\r
231 #pragma weak MPDDRC_IrqHandler=Dummy_Handler\r
232 #pragma weak H32MX_IrqHandler=Dummy_Handler\r
233 #pragma weak H64MX_IrqHandler=Dummy_Handler\r
234 #pragma weak VDEC_IrqHandler=Dummy_Handler\r
235 #pragma weak SECUMOD_IrqHandler=Dummy_Handler\r
236 #pragma weak MSADCC_IrqHandler=Dummy_Handler\r
237 #pragma weak HSMC_IrqHandler=Dummy_Handler\r
238 #pragma weak PIOA_IrqHandler=Dummy_Handler\r
239 #pragma weak PIOB_IrqHandler=Dummy_Handler\r
240 #pragma weak PIOC_IrqHandler=Dummy_Handler\r
241 #pragma weak PIOE_IrqHandler=Dummy_Handler\r
242 #pragma weak UART0_IrqHandler=Dummy_Handler\r
243 #pragma weak UART1_IrqHandler=Dummy_Handler\r
244 #pragma weak USART2_IrqHandler=Dummy_Handler\r
245 #pragma weak USART3_IrqHandler=Dummy_Handler\r
246 #pragma weak USART4_IrqHandler=Dummy_Handler\r
247 #pragma weak TWI0_IrqHandler=Dummy_Handler\r
248 #pragma weak TWI1_IrqHandler=Dummy_Handler\r
249 #pragma weak TWI2_IrqHandler=Dummy_Handler\r
250 #pragma weak HSMCI0_IrqHandler=Dummy_Handler\r
251 #pragma weak HSMCI1_IrqHandler=Dummy_Handler\r
252 #pragma weak SPI0_IrqHandler=Dummy_Handler\r
253 #pragma weak SPI1_IrqHandler=Dummy_Handler\r
254 #pragma weak SPI2_IrqHandler=Dummy_Handler\r
255 #pragma weak TC0_IrqHandler=Dummy_Handler\r
256 #pragma weak TC1_IrqHandler=Dummy_Handler\r
257 #pragma weak TC2_IrqHandler=Dummy_Handler\r
258 #pragma weak PWM_IrqHandler=Dummy_Handler\r
259 #pragma weak ADC_IrqHandler=Dummy_Handler\r
260 #pragma weak DBGU_IrqHandler=Dummy_Handler\r
261 #pragma weak UHPHS_IrqHandler=Dummy_Handler\r
262 #pragma weak UDPHS_IrqHandler=Dummy_Handler\r
263 #pragma weak SSC0_IrqHandler=Dummy_Handler\r
264 #pragma weak SSC1_IrqHandler=Dummy_Handler\r
265 #pragma weak XDMAC1_IrqHandler=Dummy_Handler\r
266 #pragma weak LCDC_IrqHandler=Dummy_Handler\r
267 #pragma weak ISI_IrqHandler=Dummy_Handler\r
268 #pragma weak TRNG_IrqHandler=Dummy_Handler\r
269 #pragma weak GMAC0_IrqHandler=Dummy_Handler\r
270 #pragma weak GMAC1_IrqHandler=Dummy_Handler\r
271 #pragma weak AIC0_IrqHandler=Dummy_Handler\r
272 #pragma weak SFC_IrqHandler=Dummy_Handler\r
273 #pragma weak SECURAM_IrqHandler=Dummy_Handler\r
274 #pragma weak CTB_IrqHandler=Dummy_Handler\r
275 #pragma weak SMD_IrqHandler=Dummy_Handler\r
276 #pragma weak TWI3_IrqHandler=Dummy_Handler\r
277 #pragma weak CATB_IrqHandler=Dummy_Handler\r
278 #pragma weak SFR_IrqHandler=Dummy_Handler\r
279 #pragma weak AIC1_IrqHandler=Dummy_Handler\r
280 #pragma weak SAIC1_IrqHandler=Dummy_Handler\r
281 #pragma weak L2CC_IrqHandler=Dummy_Handler\r
282 #pragma weak Spurious_handler=Spurious_Handler\r
283 \r
284 \r
285 /**\r
286  * \brief Dummy default handler.\r
287  */\r
288 volatile uint32_t ulx = 0;\r
289 void Dummy_Handler( void )\r
290 {\r
291     while ( ulx == 0 )\r
292         {\r
293                 __asm volatile( "NOP" );\r
294         }\r
295         ulx = 0;\r
296 }\r
297 \r
298 void Spurious_Handler( void )\r
299 {\r
300     while ( ulx == 0 )\r
301         {\r
302                 __asm volatile( "NOP" );\r
303         }\r
304         ulx = 0;\r
305 }\r
306 \r
307 /**\r
308  * \brief Non-secure Interupt Init.\r
309  */\r
310 void NonSecureITInit (void)\r
311 {\r
312     uint32_t i;\r
313     /* Assign handler addesses */\r
314     AIC->AIC_SSR = 0;  AIC->AIC_SVR = (unsigned int) SAIC0_Handler;\r
315     AIC->AIC_SSR = 1;  AIC->AIC_SVR = (unsigned int) SYS_IrqHandler;\r
316     AIC->AIC_SSR = 2;  AIC->AIC_SVR = (unsigned int) ARM_IrqHandler;\r
317     AIC->AIC_SSR = 3;  AIC->AIC_SVR = (unsigned int) PIT_IrqHandler;\r
318     AIC->AIC_SSR = 4;  AIC->AIC_SVR = (unsigned int) WDT_IrqHandler;\r
319     AIC->AIC_SSR = 5;  AIC->AIC_SVR = (unsigned int) PIOD_IrqHandler;\r
320     AIC->AIC_SSR = 6;  AIC->AIC_SVR = (unsigned int) USART0_IrqHandler;\r
321     AIC->AIC_SSR = 7;  AIC->AIC_SVR = (unsigned int) USART1_IrqHandler;\r
322     AIC->AIC_SSR = 8;  AIC->AIC_SVR = (unsigned int) XDMAC0_IrqHandler;\r
323     AIC->AIC_SSR = 9;  AIC->AIC_SVR = (unsigned int) ICM_IrqHandler;\r
324     AIC->AIC_SSR = 10; AIC->AIC_SVR = (unsigned int) PKCC_IrqHandler;\r
325     AIC->AIC_SSR = 11; AIC->AIC_SVR = (unsigned int) SCI_IrqHandler;\r
326     AIC->AIC_SSR = 12; AIC->AIC_SVR = (unsigned int) AES_IrqHandler;\r
327     AIC->AIC_SSR = 13; AIC->AIC_SVR = (unsigned int) AESB_IrqHandler;\r
328     AIC->AIC_SSR = 14; AIC->AIC_SVR = (unsigned int) TDES_IrqHandler;\r
329     AIC->AIC_SSR = 15; AIC->AIC_SVR = (unsigned int) SHA_IrqHandler;\r
330     AIC->AIC_SSR = 16; AIC->AIC_SVR = (unsigned int) MPDDRC_IrqHandler;\r
331     AIC->AIC_SSR = 17; AIC->AIC_SVR = (unsigned int) H32MX_IrqHandler;\r
332     AIC->AIC_SSR = 18; AIC->AIC_SVR = (unsigned int) H64MX_IrqHandler;\r
333     AIC->AIC_SSR = 19; AIC->AIC_SVR = (unsigned int) VDEC_IrqHandler;\r
334     AIC->AIC_SSR = 20; AIC->AIC_SVR = (unsigned int) SECUMOD_IrqHandler;\r
335     AIC->AIC_SSR = 21; AIC->AIC_SVR = (unsigned int) MSADCC_IrqHandler;\r
336     AIC->AIC_SSR = 22; AIC->AIC_SVR = (unsigned int) HSMC_IrqHandler;\r
337     AIC->AIC_SSR = 23; AIC->AIC_SVR = (unsigned int) PIOA_IrqHandler;\r
338     AIC->AIC_SSR = 24; AIC->AIC_SVR = (unsigned int) PIOB_IrqHandler;\r
339     AIC->AIC_SSR = 25; AIC->AIC_SVR = (unsigned int) PIOC_IrqHandler;\r
340     AIC->AIC_SSR = 26; AIC->AIC_SVR = (unsigned int) PIOE_IrqHandler;\r
341     AIC->AIC_SSR = 27; AIC->AIC_SVR = (unsigned int) UART0_IrqHandler;\r
342     AIC->AIC_SSR = 28; AIC->AIC_SVR = (unsigned int) UART1_IrqHandler;\r
343     AIC->AIC_SSR = 29; AIC->AIC_SVR = (unsigned int) USART2_IrqHandler;\r
344     AIC->AIC_SSR = 30; AIC->AIC_SVR = (unsigned int) USART3_IrqHandler;\r
345     AIC->AIC_SSR = 31; AIC->AIC_SVR = (unsigned int) USART4_IrqHandler;\r
346     AIC->AIC_SSR = 32; AIC->AIC_SVR = (unsigned int) TWI0_IrqHandler;\r
347     AIC->AIC_SSR = 33; AIC->AIC_SVR = (unsigned int) TWI1_IrqHandler;\r
348     AIC->AIC_SSR = 34; AIC->AIC_SVR = (unsigned int) TWI2_IrqHandler;\r
349     AIC->AIC_SSR = 35; AIC->AIC_SVR = (unsigned int) HSMCI0_IrqHandler;\r
350     AIC->AIC_SSR = 36; AIC->AIC_SVR = (unsigned int) HSMCI1_IrqHandler;\r
351     AIC->AIC_SSR = 37; AIC->AIC_SVR = (unsigned int) SPI0_IrqHandler;\r
352     AIC->AIC_SSR = 38; AIC->AIC_SVR = (unsigned int) SPI1_IrqHandler;\r
353     AIC->AIC_SSR = 39; AIC->AIC_SVR = (unsigned int) SPI2_IrqHandler;\r
354     AIC->AIC_SSR = 40; AIC->AIC_SVR = (unsigned int) TC0_IrqHandler;\r
355     AIC->AIC_SSR = 41; AIC->AIC_SVR = (unsigned int) TC1_IrqHandler;\r
356     AIC->AIC_SSR = 42; AIC->AIC_SVR = (unsigned int) TC2_IrqHandler;\r
357     AIC->AIC_SSR = 43; AIC->AIC_SVR = (unsigned int) PWM_IrqHandler;\r
358     AIC->AIC_SSR = 44; AIC->AIC_SVR = (unsigned int) ADC_IrqHandler;\r
359     AIC->AIC_SSR = 45; AIC->AIC_SVR = (unsigned int) DBGU_IrqHandler;\r
360     AIC->AIC_SSR = 46; AIC->AIC_SVR = (unsigned int) UHPHS_IrqHandler;\r
361     AIC->AIC_SSR = 47; AIC->AIC_SVR = (unsigned int) UDPHS_IrqHandler;\r
362     AIC->AIC_SSR = 48; AIC->AIC_SVR = (unsigned int) SSC0_IrqHandler;\r
363     AIC->AIC_SSR = 49; AIC->AIC_SVR = (unsigned int) SSC1_IrqHandler;\r
364     AIC->AIC_SSR = 50; AIC->AIC_SVR = (unsigned int) XDMAC1_IrqHandler;\r
365     AIC->AIC_SSR = 51; AIC->AIC_SVR = (unsigned int) LCDC_IrqHandler;\r
366     AIC->AIC_SSR = 52; AIC->AIC_SVR = (unsigned int) ISI_IrqHandler;\r
367     AIC->AIC_SSR = 53; AIC->AIC_SVR = (unsigned int) TRNG_IrqHandler;\r
368     AIC->AIC_SSR = 54; AIC->AIC_SVR = (unsigned int) GMAC0_IrqHandler;\r
369     AIC->AIC_SSR = 55; AIC->AIC_SVR = (unsigned int) GMAC1_IrqHandler;\r
370     AIC->AIC_SSR = 56; AIC->AIC_SVR = (unsigned int) AIC0_IrqHandler;\r
371     AIC->AIC_SSR = 57; AIC->AIC_SVR = (unsigned int) SFC_IrqHandler;\r
372     AIC->AIC_SSR = 59; AIC->AIC_SVR = (unsigned int) SECURAM_IrqHandler;\r
373     AIC->AIC_SSR = 60; AIC->AIC_SVR = (unsigned int) CTB_IrqHandler;\r
374     AIC->AIC_SSR = 61; AIC->AIC_SVR = (unsigned int) SMD_IrqHandler;\r
375     AIC->AIC_SSR = 62; AIC->AIC_SVR = (unsigned int) TWI3_IrqHandler;\r
376     AIC->AIC_SSR = 63; AIC->AIC_SVR = (unsigned int) CATB_IrqHandler;\r
377     AIC->AIC_SSR = 64; AIC->AIC_SVR = (unsigned int) SFR_IrqHandler;\r
378     AIC->AIC_SSR = 65; AIC->AIC_SVR = (unsigned int) AIC1_IrqHandler;\r
379     AIC->AIC_SSR = 66; AIC->AIC_SVR = (unsigned int) SAIC1_IrqHandler;\r
380     AIC->AIC_SSR = 67; AIC->AIC_SVR = (unsigned int) L2CC_IrqHandler;\r
381 \r
382     AIC->AIC_SPU = (unsigned int) Spurious_handler;\r
383     /* Disable all interrupts */\r
384     for (i = 1; i < ID_PERIPH_COUNT; i++){\r
385         AIC->AIC_SSR=i;\r
386         AIC->AIC_IDCR=AIC_IDCR_INTD;\r
387     }\r
388     /* Clear All pending interrupts flags */\r
389     for (i = 0; i < ID_PERIPH_COUNT; i++){\r
390         AIC->AIC_SSR  = i;\r
391         AIC->AIC_ICCR = AIC_ICCR_INTCLR;\r
392     }\r
393 \r
394     /* Perform 8 IT acknoledge (write any value in EOICR) (VPy) */\r
395     for (i = 0; i < 8; i++){\r
396         AIC->AIC_EOICR = 0;\r
397     }\r
398     /* Enable IRQ and FIQ at core level */\r
399     v_ARM_ClrCPSR_bits(CPSR_MASK_IRQ|CPSR_MASK_FIQ);\r
400 }\r
401 \r
402 /**\r
403  * \brief Secure Interupt Init.\r
404  */\r
405 void SecureITInit (void)\r
406 {\r
407     uint32_t i;\r
408 \r
409     /* Assign handler addesses */\r
410     SAIC->AIC_SSR = 0;  SAIC->AIC_SVR = (unsigned int) SAIC0_Handler;\r
411     SAIC->AIC_SSR = 1;  SAIC->AIC_SVR = (unsigned int) SYS_IrqHandler;\r
412     SAIC->AIC_SSR = 2;  SAIC->AIC_SVR = (unsigned int) ARM_IrqHandler;\r
413     SAIC->AIC_SSR = 3;  SAIC->AIC_SVR = (unsigned int) PIT_IrqHandler;\r
414     SAIC->AIC_SSR = 4;  SAIC->AIC_SVR = (unsigned int) WDT_IrqHandler;\r
415     SAIC->AIC_SSR = 5;  SAIC->AIC_SVR = (unsigned int) PIOD_IrqHandler;\r
416     SAIC->AIC_SSR = 6;  SAIC->AIC_SVR = (unsigned int) USART0_IrqHandler;\r
417     SAIC->AIC_SSR = 7;  SAIC->AIC_SVR = (unsigned int) USART1_IrqHandler;\r
418     SAIC->AIC_SSR = 8;  SAIC->AIC_SVR = (unsigned int) XDMAC0_IrqHandler;\r
419     SAIC->AIC_SSR = 9;  SAIC->AIC_SVR = (unsigned int) ICM_IrqHandler;\r
420     SAIC->AIC_SSR = 10; SAIC->AIC_SVR = (unsigned int) PKCC_IrqHandler;\r
421     SAIC->AIC_SSR = 11; SAIC->AIC_SVR = (unsigned int) SCI_IrqHandler;\r
422     SAIC->AIC_SSR = 12; SAIC->AIC_SVR = (unsigned int) AES_IrqHandler;\r
423     SAIC->AIC_SSR = 13; SAIC->AIC_SVR = (unsigned int) AESB_IrqHandler;\r
424     SAIC->AIC_SSR = 14; SAIC->AIC_SVR = (unsigned int) TDES_IrqHandler;\r
425     SAIC->AIC_SSR = 15; SAIC->AIC_SVR = (unsigned int) SHA_IrqHandler;\r
426     SAIC->AIC_SSR = 16; SAIC->AIC_SVR = (unsigned int) MPDDRC_IrqHandler;\r
427     SAIC->AIC_SSR = 17; SAIC->AIC_SVR = (unsigned int) H32MX_IrqHandler;\r
428     SAIC->AIC_SSR = 18; SAIC->AIC_SVR = (unsigned int) H64MX_IrqHandler;\r
429     SAIC->AIC_SSR = 19; SAIC->AIC_SVR = (unsigned int) VDEC_IrqHandler;\r
430     SAIC->AIC_SSR = 20; SAIC->AIC_SVR = (unsigned int) SECUMOD_IrqHandler;\r
431     SAIC->AIC_SSR = 21; SAIC->AIC_SVR = (unsigned int) MSADCC_IrqHandler;\r
432     SAIC->AIC_SSR = 22; SAIC->AIC_SVR = (unsigned int) HSMC_IrqHandler;\r
433     SAIC->AIC_SSR = 23; SAIC->AIC_SVR = (unsigned int) PIOA_IrqHandler;\r
434     SAIC->AIC_SSR = 24; SAIC->AIC_SVR = (unsigned int) PIOB_IrqHandler;\r
435     SAIC->AIC_SSR = 25; SAIC->AIC_SVR = (unsigned int) PIOC_IrqHandler;\r
436     SAIC->AIC_SSR = 26; SAIC->AIC_SVR = (unsigned int) PIOE_IrqHandler;\r
437     SAIC->AIC_SSR = 27; SAIC->AIC_SVR = (unsigned int) UART0_IrqHandler;\r
438     SAIC->AIC_SSR = 28; SAIC->AIC_SVR = (unsigned int) UART1_IrqHandler;\r
439     SAIC->AIC_SSR = 29; SAIC->AIC_SVR = (unsigned int) USART2_IrqHandler;\r
440     SAIC->AIC_SSR = 30; SAIC->AIC_SVR = (unsigned int) USART3_IrqHandler;\r
441     SAIC->AIC_SSR = 31; SAIC->AIC_SVR = (unsigned int) USART4_IrqHandler;\r
442     SAIC->AIC_SSR = 32; SAIC->AIC_SVR = (unsigned int) TWI0_IrqHandler;\r
443     SAIC->AIC_SSR = 33; SAIC->AIC_SVR = (unsigned int) TWI1_IrqHandler;\r
444     SAIC->AIC_SSR = 34; SAIC->AIC_SVR = (unsigned int) TWI2_IrqHandler;\r
445     SAIC->AIC_SSR = 35; SAIC->AIC_SVR = (unsigned int) HSMCI0_IrqHandler;\r
446     SAIC->AIC_SSR = 36; SAIC->AIC_SVR = (unsigned int) HSMCI1_IrqHandler;\r
447     SAIC->AIC_SSR = 37; SAIC->AIC_SVR = (unsigned int) SPI0_IrqHandler;\r
448     SAIC->AIC_SSR = 38; SAIC->AIC_SVR = (unsigned int) SPI1_IrqHandler;\r
449     SAIC->AIC_SSR = 39; SAIC->AIC_SVR = (unsigned int) SPI2_IrqHandler;\r
450     SAIC->AIC_SSR = 40; SAIC->AIC_SVR = (unsigned int) TC0_IrqHandler;\r
451     SAIC->AIC_SSR = 41; SAIC->AIC_SVR = (unsigned int) TC1_IrqHandler;\r
452     SAIC->AIC_SSR = 42; SAIC->AIC_SVR = (unsigned int) TC2_IrqHandler;\r
453     SAIC->AIC_SSR = 43; SAIC->AIC_SVR = (unsigned int) PWM_IrqHandler;\r
454     SAIC->AIC_SSR = 44; SAIC->AIC_SVR = (unsigned int) ADC_IrqHandler;\r
455     SAIC->AIC_SSR = 45; SAIC->AIC_SVR = (unsigned int) DBGU_IrqHandler;\r
456     SAIC->AIC_SSR = 46; SAIC->AIC_SVR = (unsigned int) UHPHS_IrqHandler;\r
457     SAIC->AIC_SSR = 47; SAIC->AIC_SVR = (unsigned int) UDPHS_IrqHandler;\r
458     SAIC->AIC_SSR = 48; SAIC->AIC_SVR = (unsigned int) SSC0_IrqHandler;\r
459     SAIC->AIC_SSR = 49; SAIC->AIC_SVR = (unsigned int) SSC1_IrqHandler;\r
460     SAIC->AIC_SSR = 50; SAIC->AIC_SVR = (unsigned int) XDMAC1_IrqHandler;\r
461     SAIC->AIC_SSR = 51; SAIC->AIC_SVR = (unsigned int) LCDC_IrqHandler;\r
462     SAIC->AIC_SSR = 52; SAIC->AIC_SVR = (unsigned int) ISI_IrqHandler;\r
463     SAIC->AIC_SSR = 53; SAIC->AIC_SVR = (unsigned int) TRNG_IrqHandler;\r
464     SAIC->AIC_SSR = 54; SAIC->AIC_SVR = (unsigned int) GMAC0_IrqHandler;\r
465     SAIC->AIC_SSR = 55; SAIC->AIC_SVR = (unsigned int) GMAC1_IrqHandler;\r
466     SAIC->AIC_SSR = 56; SAIC->AIC_SVR = (unsigned int) AIC0_IrqHandler;\r
467     SAIC->AIC_SSR = 57; SAIC->AIC_SVR = (unsigned int) SFC_IrqHandler;\r
468     SAIC->AIC_SSR = 59; SAIC->AIC_SVR = (unsigned int) SECURAM_IrqHandler;\r
469     SAIC->AIC_SSR = 60; SAIC->AIC_SVR = (unsigned int) CTB_IrqHandler;\r
470     SAIC->AIC_SSR = 61; SAIC->AIC_SVR = (unsigned int) SMD_IrqHandler;\r
471     SAIC->AIC_SSR = 62; SAIC->AIC_SVR = (unsigned int) TWI3_IrqHandler;\r
472     SAIC->AIC_SSR = 63; SAIC->AIC_SVR = (unsigned int) CATB_IrqHandler;\r
473     SAIC->AIC_SSR = 64; SAIC->AIC_SVR = (unsigned int) SFR_IrqHandler;\r
474     SAIC->AIC_SSR = 65; SAIC->AIC_SVR = (unsigned int) AIC1_IrqHandler;\r
475     SAIC->AIC_SSR = 66; SAIC->AIC_SVR = (unsigned int) SAIC1_IrqHandler;\r
476     SAIC->AIC_SSR = 67; SAIC->AIC_SVR = (unsigned int) L2CC_IrqHandler;\r
477 \r
478     SAIC->AIC_SPU = (unsigned int) Spurious_handler;\r
479 \r
480     /* Disable all interrupts */\r
481     for (i = 1; i < ID_PERIPH_COUNT; i++){\r
482         SAIC->AIC_SSR=i;\r
483         SAIC->AIC_IDCR=AIC_IDCR_INTD;\r
484     }\r
485     /* Clear All pending interrupts flags */\r
486     for (i = 0; i < ID_PERIPH_COUNT; i++){\r
487         SAIC->AIC_SSR  = i;\r
488         SAIC->AIC_ICCR = AIC_ICCR_INTCLR;\r
489     }\r
490 \r
491     /* Perform 8 IT acknoledge (write any value in EOICR) (VPy) */\r
492     for (i = 0; i < 8; i++){\r
493         SAIC->AIC_EOICR = 0;\r
494     }\r
495     /* Enable IRQ and FIQ at core level */\r
496     v_ARM_ClrCPSR_bits(CPSR_MASK_IRQ|CPSR_MASK_FIQ);\r
497 }\r
498 \r
499 /**\r
500  * \brief Performs the low-level initialization of the chip.\r
501  * It also enable a low level on the pin NRST triggers a user reset.\r
502  */\r
503 extern WEAK void LowLevelInit( void )\r
504 {\r
505     volatile unsigned int * pAicFuse = (volatile unsigned int *) REG_SFR_AICREDIR;\r
506 \r
507     NonSecureITInit();\r
508     if(!(*pAicFuse))\r
509     {\r
510       SecureITInit();\r
511     }\r
512 \r
513     if ((uint32_t)LowLevelInit < DDR_CS_ADDR) /* Code not in external mem */ {\r
514         PMC_SelectExt12M_Osc();\r
515         PMC_SwitchMck2Main();\r
516         PMC_SetPllA( CKGR_PLLAR_ONE |\r
517                      CKGR_PLLAR_PLLACOUNT(0x3F) |\r
518                      CKGR_PLLAR_OUTA(0x0) |\r
519                      CKGR_PLLAR_MULA(87) |\r
520                      1,\r
521                      PMC_PLLICPR_IPLL_PLLA(0x0));\r
522         PMC_SetMckPllaDiv(PMC_MCKR_PLLADIV2);\r
523         PMC_SetMckPrescaler(PMC_MCKR_PRES_CLOCK);\r
524         PMC_SetMckDivider(PMC_MCKR_MDIV_PCK_DIV3);\r
525         PMC_SwitchMck2Pll();\r
526     }\r
527     /* Remap */\r
528    BOARD_RemapRam();\r
529 }\r