1 /* ----------------------------------------------------------------------------
\r
2 * SAM Software Package License
\r
3 * ----------------------------------------------------------------------------
\r
4 * Copyright (c) 2014, Atmel Corporation
\r
6 * All rights reserved.
\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
11 * - Redistributions of source code must retain the above copyright notice,
\r
12 * this list of conditions and the disclaimer below.
\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
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
33 * Provides the low-level initialization function that called on chip startup.
\r
36 /*----------------------------------------------------------------------------
\r
38 *----------------------------------------------------------------------------*/
\r
43 /*----------------------------------------------------------------------------
\r
45 *----------------------------------------------------------------------------*/
\r
46 #define CPSR_MASK_IRQ 0x00000080
\r
47 #define CPSR_MASK_FIQ 0x00000040
\r
49 /*----------------------------------------------------------------------------
\r
51 *----------------------------------------------------------------------------*/
\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
106 static const char* abort_status[][2]=
\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
135 /*----------------------------------------------------------------------------
\r
136 * Internal functions
\r
137 *----------------------------------------------------------------------------*/
\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
148 * \brief Default spurious interrupt handler. Infinite loop.
\r
150 void defaultSpuriousHandler( void )
\r
155 void Abort_C_Handler( void)
\r
157 uint32_t v1,v2, dfsr;
\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
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
171 printf("-[Info]-Data fault status register value = 0x%x\n\r",(unsigned int)v1);
\r
178 void Prefetch_C_Handler( void)
\r
180 uint32_t v1,v2, ifsr;
\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
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
192 printf("-[INFO]- Prefetch Fault status register value by = 0x%x\n\r",(unsigned int)v1);
\r
198 void Undefined_C_Handler( void)
\r
200 printf("Undefined abort \n\r");
\r
204 void v_ARM_ClrCPSR_bits(unsigned int mask)
\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
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
286 * \brief Dummy default handler.
\r
288 volatile uint32_t ulx = 0;
\r
289 void Dummy_Handler( void )
\r
293 __asm volatile( "NOP" );
\r
298 void Spurious_Handler( void )
\r
302 __asm volatile( "NOP" );
\r
308 * \brief Non-secure Interupt Init.
\r
310 void NonSecureITInit (void)
\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
382 AIC->AIC_SPU = (unsigned int) Spurious_handler;
\r
383 /* Disable all interrupts */
\r
384 for (i = 1; i < ID_PERIPH_COUNT; i++){
\r
386 AIC->AIC_IDCR=AIC_IDCR_INTD;
\r
388 /* Clear All pending interrupts flags */
\r
389 for (i = 0; i < ID_PERIPH_COUNT; i++){
\r
391 AIC->AIC_ICCR = AIC_ICCR_INTCLR;
\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
398 /* Enable IRQ and FIQ at core level */
\r
399 v_ARM_ClrCPSR_bits(CPSR_MASK_IRQ|CPSR_MASK_FIQ);
\r
403 * \brief Secure Interupt Init.
\r
405 void SecureITInit (void)
\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
478 SAIC->AIC_SPU = (unsigned int) Spurious_handler;
\r
480 /* Disable all interrupts */
\r
481 for (i = 1; i < ID_PERIPH_COUNT; i++){
\r
483 SAIC->AIC_IDCR=AIC_IDCR_INTD;
\r
485 /* Clear All pending interrupts flags */
\r
486 for (i = 0; i < ID_PERIPH_COUNT; i++){
\r
488 SAIC->AIC_ICCR = AIC_ICCR_INTCLR;
\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
495 /* Enable IRQ and FIQ at core level */
\r
496 v_ARM_ClrCPSR_bits(CPSR_MASK_IRQ|CPSR_MASK_FIQ);
\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
503 extern WEAK void LowLevelInit( void )
\r
505 volatile unsigned int * pAicFuse = (volatile unsigned int *) REG_SFR_AICREDIR;
\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
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