]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Projects/Keil/partition_M2351.h
Add Cortex M23 GCC and IAR ports. Add demo projects for Nuvoton NuMaker-PFM-2351.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC / Projects / Keil / partition_M2351.h
1 /**************************************************************************//**\r
2  * @file     partition_M2351.c\r
3  * @version  V3.00\r
4  * @brief    SAU configuration for secure/nonsecure region settings.\r
5  *\r
6  * @note\r
7  * Copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.\r
8  *\r
9  ******************************************************************************/\r
10 \r
11 #ifndef PARTITION_M2351\r
12 #define PARTITION_M2351\r
13 \r
14 /*\r
15 //-------- <<< Use Configuration Wizard in Context Menu >>> -----------------\r
16 */\r
17 \r
18 \r
19 /*\r
20     SRAMNSSET\r
21 */\r
22 /*\r
23 // Bit 0..16\r
24 // <o.0..16> Secure SRAM Size              <0=> 0 KB\r
25 //                                         <0x2000=> 8KB\r
26 //                                         <0x4000=> 16KB\r
27 //                                         <0x6000=> 24KB\r
28 //                                         <0x8000=> 32KB\r
29 //                                         <0xa000=> 40KB\r
30 //                                         <0xc000=> 48KB\r
31 //                                         <0xe000=> 56KB\r
32 //                                         <0x10000=> 64KB\r
33 //                                         <0x12000=> 72KB\r
34 //                                         <0x14000=> 80KB\r
35 //                                         <0x16000=> 88KB\r
36 //                                         <0x18000=> 96KB\r
37 */\r
38 #define SCU_SECURE_SRAM_SIZE      0x8000\r
39 #define NON_SECURE_SRAM_BASE    (0x30000000 + SCU_SECURE_SRAM_SIZE)\r
40 \r
41 \r
42 \r
43 /*--------------------------------------------------------------------------------------------------------*/\r
44 \r
45 /*\r
46     NSBA\r
47 */\r
48 #define FMC_INIT_NSBA          1\r
49 /*\r
50 //     <o>Secure Flash ROM Size <0x800-0x7FFFF:0x800>\r
51 */\r
52 \r
53 #define FMC_SECURE_ROM_SIZE      0x40000\r
54 \r
55 #define FMC_NON_SECURE_BASE     (0x10000000 + FMC_SECURE_ROM_SIZE)\r
56 \r
57 __STATIC_INLINE void FMC_NSBA_Setup(void)\r
58 {\r
59     /* Skip NSBA Setupt according config */\r
60     if(FMC_INIT_NSBA == 0)\r
61         return;\r
62 \r
63     /* Check if NSBA value with current active NSBA */\r
64     if(SCU->FNSADDR != FMC_SECURE_ROM_SIZE)\r
65     {\r
66         /* Unlock Protected Register */\r
67         SYS_UnlockReg();\r
68 \r
69         /* Enable ISP and config update */\r
70         FMC->ISPCTL = FMC_ISPCTL_ISPEN_Msk | FMC_ISPCTL_CFGUEN_Msk;\r
71 \r
72         /* Config Base of NSBA */\r
73         FMC->ISPADDR = 0x200800;\r
74 \r
75         /* Read Non-secure base address config */\r
76         FMC->ISPCMD = FMC_ISPCMD_READ;\r
77         FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;\r
78         while(FMC->ISPTRG);\r
79 \r
80         /* Setting NSBA when it is empty */\r
81         if(FMC->ISPDAT == 0xfffffffful)\r
82         {\r
83             FMC->ISPDAT = FMC_SECURE_ROM_SIZE;\r
84             FMC->ISPCMD = FMC_ISPCMD_PROGRAM;\r
85             FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk;\r
86             while(FMC->ISPTRG);\r
87 \r
88             /* Force Chip Reset to valid new setting */\r
89             SYS->IPRST0 = SYS_IPRST0_CHIPRST_Msk;\r
90         }\r
91 \r
92         /* Fatal Error:\r
93            FMC NSBA setting is different to FMC_INIT_NSBA_VAL.\r
94            User must double confirm which one is wrong.\r
95 \r
96            If user need to change NSBA config of FMC, user must do Mess-erase by\r
97            ISP or ICP.\r
98         */\r
99         while(1);\r
100     }\r
101 \r
102 }\r
103 \r
104 \r
105 /*--------------------------------------------------------------------------------------------------------*/\r
106 \r
107 \r
108 /*\r
109 // <h> Peripheral Secure Attribution Configuration\r
110 */\r
111 \r
112 /*\r
113     PNSSET0\r
114 */\r
115 /*\r
116 // Module 0..31\r
117 //   <o.9>  USBH       <0=> Secure <1=> Non-Secure\r
118 //   <o.13>  SD0   <0=> Secure <1=> Non-Secure\r
119 //   <o.16>  EBI    <0=> Secure <1=> Non-Secure\r
120 //   <o.24>  PDMA1      <0=> Secure <1=> Non-Secure\r
121 */\r
122 #define SCU_INIT_PNSSET0_VAL      0x0\r
123 /*\r
124     PNSSET1\r
125 */\r
126 /*\r
127 // Module 0..31\r
128 //   <o.17>  CRC       <0=> Secure <1=> Non-Secure\r
129 //   <o.18>  CRPT   <0=> Secure <1=> Non-Secure\r
130 */\r
131 #define SCU_INIT_PNSSET1_VAL      0x0\r
132 /*\r
133     PNSSET2\r
134 */\r
135 /*\r
136 // Module 0..31\r
137 //   <o.1>  RTC       <0=> Secure <1=> Non-Secure\r
138 //   <o.3>  EADC   <0=> Secure <1=> Non-Secure\r
139 //   <o.5>  ACMP01     <0=> Secure <1=> Non-Secure\r
140 //\r
141 //   <o.7>  DAC      <0=> Secure <1=> Non-Secure\r
142 //   <o.8>  I2S0      <0=> Secure <1=> Non-Secure\r
143 //   <o.13>  OTG      <0=> Secure <1=> Non-Secure\r
144 //   <o.17>  TMR23      <0=> Secure <1=> Non-Secure\r
145 //   <h> EPWM\r
146 //   <o.24>  EPWM0      <0=> Secure <1=> Non-Secure\r
147 //   <o.25>  EPWM1      <0=> Secure <1=> Non-Secure\r
148 //   <o.26>  BPWM0      <0=> Secure <1=> Non-Secure\r
149 //   <o.27>  BPWM1      <0=> Secure <1=> Non-Secure\r
150 //   </h>\r
151 */\r
152 #define SCU_INIT_PNSSET2_VAL      0x0\r
153 /*\r
154     PNSSET3\r
155 */\r
156 /*\r
157 // Module 0..31\r
158 //   <h>  SPI\r
159 //   <o.0>  SPI0       <0=> Secure <1=> Non-Secure\r
160 //   <o.1>  SPI1   <0=> Secure <1=> Non-Secure\r
161 //   <o.2>  SPI2      <0=> Secure <1=> Non-Secure\r
162 //   <o.3>  SPI3    <0=> Secure <1=> Non-Secure\r
163 //   <o.4>  SPI4      <0=> Secure <1=> Non-Secure\r
164 //   <o.5>  SPI5      <0=> Secure <1=> Non-Secure\r
165 //   </h>\r
166 //   <h> UART\r
167 //   <o.16>  UART0      <0=> Secure <1=> Non-Secure\r
168 //   <o.17>  UART1      <0=> Secure <1=> Non-Secure\r
169 //   <o.18>  UART2      <0=> Secure <1=> Non-Secure\r
170 //   <o.19>  UART3      <0=> Secure <1=> Non-Secure\r
171 //   <o.20>  UART4      <0=> Secure <1=> Non-Secure\r
172 //   <o.21>  UART5      <0=> Secure <1=> Non-Secure\r
173 //   </h>\r
174 */\r
175 #define SCU_INIT_PNSSET3_VAL      0x0\r
176 /*\r
177     PNSSET4\r
178 */\r
179 /*\r
180 // Module 0..31\r
181 //   <h> I2C\r
182 //   <o.0>  I2C0       <0=> Secure <1=> Non-Secure\r
183 //   <o.1>  I2C1   <0=> Secure <1=> Non-Secure\r
184 //   <o.2>  I2C2      <0=> Secure <1=> Non-Secure\r
185 //   </h>\r
186 //   <h> Smart Card\r
187 //   <o.16>  SC0      <0=> Secure <1=> Non-Secure\r
188 //   <o.17>  SC1      <0=> Secure <1=> Non-Secure\r
189 //   <o.18>  SC2      <0=> Secure <1=> Non-Secure\r
190 //   </h>\r
191 */\r
192 #define SCU_INIT_PNSSET4_VAL      0x0\r
193 /*\r
194     PNSSET5\r
195 */\r
196 /*\r
197 // Module 0..31\r
198 //   <o.0>  CAN0       <0=> Secure <1=> Non-Secure\r
199 //   <h> QEI\r
200 //   <o.16>  QEI0   <0=> Secure <1=> Non-Secure\r
201 //   <o.17>  QEI1      <0=> Secure <1=> Non-Secure\r
202 //   </h>\r
203 //   <h> ECAP\r
204 //   <o.20>  ECAP0    <0=> Secure <1=> Non-Secure\r
205 //   <o.21>  ECAP1      <0=> Secure <1=> Non-Secure\r
206 //   </h>\r
207 //   <o.23>  DSRC    <0=> Secure <1=> Non-Secure\r
208 //\r
209 //   <o.25>  TRNG    <0=> Secure <1=> Non-Secure\r
210 */\r
211 #define SCU_INIT_PNSSET5_VAL      0x0\r
212 /*\r
213     PNSSET6\r
214 */\r
215 /*\r
216 // Module 0..31\r
217 //   <o.0>  USBD       <0=> Secure <1=> Non-Secure\r
218 //   <h> USCI\r
219 //   <o.16>  USCI0   <0=> Secure <1=> Non-Secure\r
220 //   <o.17>  USCI1      <0=> Secure <1=> Non-Secure\r
221 //   </h>\r
222 */\r
223 #define SCU_INIT_PNSSET6_VAL      0x0\r
224 /*\r
225 // </h>\r
226 */\r
227 \r
228 \r
229 \r
230 /*\r
231 // <h> GPIO Secure Attribution Configuration\r
232 */\r
233 \r
234 /*\r
235     IONSSET\r
236 */\r
237 /*\r
238 // Bit 0..31\r
239 //   <o.0>  PA       <0=> Secure <1=> Non-Secure\r
240 //   <o.1>  PB   <0=> Secure <1=> Non-Secure\r
241 //   <o.2>  PC      <0=> Secure <1=> Non-Secure\r
242 //   <o.3>  PD    <0=> Secure <1=> Non-Secure\r
243 //   <o.4>  PE      <0=> Secure <1=> Non-Secure\r
244 //   <o.5>  PF      <0=> Secure <1=> Non-Secure\r
245 //   <o.6>  PG      <0=> Secure <1=> Non-Secure\r
246 //   <o.7>  PH      <0=> Secure <1=> Non-Secure\r
247 */\r
248 #define SCU_INIT_IONSSET_VAL      0x0\r
249 /*\r
250 // </h>\r
251 */\r
252 \r
253 \r
254 \r
255 /**\r
256   \brief   Setup SCU Configuration Unit\r
257   \details\r
258 \r
259  */\r
260 __STATIC_INLINE void SCU_Setup(void)\r
261 {\r
262     int32_t i;\r
263 \r
264     SCU->PNSSET[0] = SCU_INIT_PNSSET0_VAL;\r
265     SCU->PNSSET[1] = SCU_INIT_PNSSET1_VAL;\r
266     SCU->PNSSET[2] = SCU_INIT_PNSSET2_VAL;\r
267     SCU->PNSSET[3] = SCU_INIT_PNSSET3_VAL;\r
268     SCU->PNSSET[4] = SCU_INIT_PNSSET4_VAL;\r
269     SCU->PNSSET[5] = SCU_INIT_PNSSET5_VAL;\r
270     SCU->PNSSET[6] = SCU_INIT_PNSSET6_VAL;\r
271 \r
272     SCU->IONSSET = SCU_INIT_IONSSET_VAL;\r
273 \r
274     /* Set Non-secure SRAM */\r
275     for(i = 11; i >= SCU_SECURE_SRAM_SIZE / 8192; i--)\r
276     {\r
277         SCU->SRAMNSSET |= (1U << i);\r
278     }\r
279 \r
280 \r
281 }\r
282 \r
283 \r
284 /* ---------------------------------------------------------------------------------------------------- */\r
285 \r
286 /*\r
287 // <e>Secure Attribute Unit (SAU) Control\r
288 */\r
289 #define SAU_INIT_CTRL 1\r
290 \r
291 /*\r
292 //   <q> Enable SAU\r
293 //   <i> To enable Secure Attribute Unit (SAU).\r
294 */\r
295 #define SAU_INIT_CTRL_ENABLE 1\r
296 \r
297 /*\r
298 //   <o> All Memory Attribute When SAU is disabled\r
299 //     <0=> All Memory is Secure\r
300 //     <1=> All Memory is Non-Secure\r
301 //   <i> To set the ALLNS bit in SAU CTRL.\r
302 //   <i> When all Memory is Non-Secure (ALLNS is 1), IDAU can override memory map configuration.\r
303 */\r
304 #define SAU_INIT_CTRL_ALLNS  0\r
305 \r
306 /*\r
307 // </e>\r
308 */\r
309 \r
310 \r
311 /*\r
312 // <h>Enable and Set Secure/Non-Secure region\r
313 */\r
314 #define SAU_REGIONS_MAX   8                 /* Max. number of SAU regions */\r
315 \r
316 /*\r
317 //   <e>SAU Region 0\r
318 //   <i> Setup SAU Region 0\r
319 */\r
320 #define SAU_INIT_REGION0    0\r
321 /*\r
322 //     <o>Start Address <0-0xFFFFFFE0>\r
323 */\r
324 #define SAU_INIT_START0     0x0003F000      /* start address of SAU region 0 */\r
325 /*\r
326 //     <o>End Address <0x1F-0xFFFFFFFF>\r
327 */\r
328 #define SAU_INIT_END0       0x0003FFFF      /* end address of SAU region 0 */\r
329 /*\r
330 //     <o>Region is\r
331 //         <0=>Non-Secure\r
332 //         <1=>Secure, Non-Secure Callable\r
333 */\r
334 #define SAU_INIT_NSC0       1\r
335 /*\r
336 //   </e>\r
337 */\r
338 \r
339 /*\r
340 //   <e>SAU Region 1\r
341 //   <i> Setup SAU Region 1\r
342 */\r
343 #define SAU_INIT_REGION1    0\r
344 /*\r
345 //     <o>Start Address <0-0xFFFFFFE0>\r
346 */\r
347 #define SAU_INIT_START1     0x10040000\r
348 /*\r
349 //     <o>End Address <0x1F-0xFFFFFFFF>\r
350 */\r
351 #define SAU_INIT_END1       0x1007FFFF\r
352 /*\r
353 //     <o>Region is\r
354 //         <0=>Non-Secure\r
355 //         <1=>Secure, Non-Secure Callable\r
356 */\r
357 #define SAU_INIT_NSC1       0\r
358 /*\r
359 //   </e>\r
360 */\r
361 \r
362 /*\r
363 //   <e>SAU Region 2\r
364 //   <i> Setup SAU Region 2\r
365 */\r
366 #define SAU_INIT_REGION2    0\r
367 /*\r
368 //     <o>Start Address <0-0xFFFFFFE0>\r
369 */\r
370 #define SAU_INIT_START2     0x2000F000\r
371 /*\r
372 //     <o>End Address <0x1F-0xFFFFFFFF>\r
373 */\r
374 #define SAU_INIT_END2       0x2000FFFF\r
375 /*\r
376 //     <o>Region is\r
377 //         <0=>Non-Secure\r
378 //         <1=>Secure, Non-Secure Callable\r
379 */\r
380 #define SAU_INIT_NSC2       1\r
381 /*\r
382 //   </e>\r
383 */\r
384 \r
385 /*\r
386 //   <e>SAU Region 3\r
387 //   <i> Setup SAU Region 3\r
388 */\r
389 #define SAU_INIT_REGION3    1\r
390 /*\r
391 //     <o>Start Address <0-0xFFFFFFE0>\r
392 */\r
393 #define SAU_INIT_START3     0x3f000\r
394 /*\r
395 //     <o>End Address <0x1F-0xFFFFFFFF>\r
396 */\r
397 #define SAU_INIT_END3       0x3ffff\r
398 /*\r
399 //     <o>Region is\r
400 //         <0=>Non-Secure\r
401 //         <1=>Secure, Non-Secure Callable\r
402 */\r
403 #define SAU_INIT_NSC3       1\r
404 /*\r
405 //   </e>\r
406 */\r
407 \r
408 /*\r
409    <e>SAU Region 4\r
410    <i> Setup SAU Region 4\r
411 */\r
412 #define SAU_INIT_REGION4    1\r
413 /*\r
414      <o>Start Address <0-0xFFFFFFE0>\r
415 */\r
416 #define SAU_INIT_START4     FMC_NON_SECURE_BASE      /* start address of SAU region 4 */\r
417 \r
418 /*\r
419      <o>End Address <0x1F-0xFFFFFFFF>\r
420 */\r
421 #define SAU_INIT_END4       0x1007FFFF      /* end address of SAU region 4 */\r
422 \r
423 /*\r
424      <o>Region is\r
425          <0=>Non-Secure\r
426          <1=>Secure, Non-Secure Callable\r
427 */\r
428 #define SAU_INIT_NSC4       0\r
429 /*\r
430    </e>\r
431 */\r
432 \r
433 /*\r
434    <e>SAU Region 5\r
435    <i> Setup SAU Region 5\r
436 */\r
437 #define SAU_INIT_REGION5    1\r
438 \r
439 /*\r
440      <o>Start Address <0-0xFFFFFFE0>\r
441 */\r
442 #define SAU_INIT_START5     0x00807E00\r
443 \r
444 /*\r
445      <o>End Address <0x1F-0xFFFFFFFF>\r
446 */\r
447 #define SAU_INIT_END5       0x00807FFF\r
448 \r
449 /*\r
450      <o>Region is\r
451          <0=>Non-Secure\r
452          <1=>Secure, Non-Secure Callable\r
453 */\r
454 #define SAU_INIT_NSC5       1\r
455 /*\r
456    </e>\r
457 */\r
458 \r
459 /*\r
460    <e>SAU Region 6\r
461    <i> Setup SAU Region 6\r
462 */\r
463 #define SAU_INIT_REGION6    1\r
464 \r
465 /*\r
466      <o>Start Address <0-0xFFFFFFE0>\r
467 */\r
468 #define SAU_INIT_START6     NON_SECURE_SRAM_BASE\r
469 \r
470 /*\r
471      <o>End Address <0x1F-0xFFFFFFFF>\r
472 */\r
473 #define SAU_INIT_END6       0x30017FFF\r
474 \r
475 /*\r
476      <o>Region is\r
477          <0=>Non-Secure\r
478          <1=>Secure, Non-Secure Callable\r
479 */\r
480 #define SAU_INIT_NSC6       0\r
481 /*\r
482    </e>\r
483 */\r
484 \r
485 /*\r
486    <e>SAU Region 7\r
487    <i> Setup SAU Region 7\r
488 */\r
489 #define SAU_INIT_REGION7    1\r
490 \r
491 /*\r
492      <o>Start Address <0-0xFFFFFFE0>\r
493 */\r
494 #define SAU_INIT_START7     0x50000000\r
495 \r
496 /*\r
497      <o>End Address <0x1F-0xFFFFFFFF>\r
498 */\r
499 #define SAU_INIT_END7       0x5FFFFFFF\r
500 \r
501 /*\r
502      <o>Region is\r
503          <0=>Non-Secure\r
504          <1=>Secure, Non-Secure Callable\r
505 */\r
506 #define SAU_INIT_NSC7       0\r
507 /*\r
508    </e>\r
509 */\r
510 \r
511 /*\r
512 // </h>\r
513 */\r
514 \r
515 /*\r
516 // <e>Setup behavior of Sleep and Exception Handling\r
517 */\r
518 #define SCB_CSR_AIRCR_INIT  1\r
519 \r
520 /*\r
521 //   <o> Deep Sleep can be enabled by\r
522 //     <0=>Secure and Non-Secure state\r
523 //     <1=>Secure state only\r
524 //   <i> Value for SCB->CSR register bit DEEPSLEEPS\r
525 */\r
526 #define SCB_CSR_DEEPSLEEPS_VAL  0\r
527 \r
528 /*\r
529 //   <o>System reset request accessible from\r
530 //     <0=> Secure and Non-Secure state\r
531 //     <1=> Secure state only\r
532 //   <i> Value for SCB->AIRCR register bit SYSRESETREQS\r
533 */\r
534 #define SCB_AIRCR_SYSRESETREQS_VAL  0\r
535 \r
536 /*\r
537 //   <o>Priority of Non-Secure exceptions is\r
538 //     <0=> Not altered\r
539 //     <1=> Lowered to 0x80-0xFF\r
540 //   <i> Value for SCB->AIRCR register bit PRIS\r
541 */\r
542 #define SCB_AIRCR_PRIS_VAL      1\r
543 \r
544 /*\r
545 //   <o>BusFault, HardFault, and NMI target\r
546 //     <0=> Secure state\r
547 //     <1=> Non-Secure state\r
548 //   <i> Value for SCB->AIRCR register bit BFHFNMINS\r
549 */\r
550 #define SCB_AIRCR_BFHFNMINS_VAL 1\r
551 \r
552 /*\r
553 // </e>\r
554 */\r
555 \r
556 \r
557 /*\r
558 // <h>Assign Interrupt to Secure or Non-secure Vector\r
559 */\r
560 \r
561 \r
562 /*\r
563     Initialize ITNS 0 (Interrupts 0..31)\r
564 */\r
565 #define NVIC_INIT_ITNS0    1\r
566 /*\r
567 // BODOUT       Always secure\r
568 // IRC          Always secure\r
569 // PWRWU_       Always secure\r
570 // SRAM_PERR    Always secure\r
571 // CLKFAIL      Always secure\r
572 \r
573 //   <o.6>  RTC                   <0=> Secure <1=> Non-Secure\r
574 //   <o.7>  TAMPER                <0=> Secure <1=> Non-Secure\r
575 // WDT  Always secure\r
576 // WWDT Always secure\r
577 //   <h> EINT\r
578 //   <o.10> EINT0                 <0=> Secure <1=> Non-Secure\r
579 //   <o.11> EINT1                 <0=> Secure <1=> Non-Secure\r
580 //   <o.12> EINT2                 <0=> Secure <1=> Non-Secure\r
581 //   <o.13> EINT3                 <0=> Secure <1=> Non-Secure\r
582 //   <o.14> EINT4                 <0=> Secure <1=> Non-Secure\r
583 //   <o.15> EINT5                 <0=> Secure <1=> Non-Secure\r
584 //   </h>\r
585 //   <h> GPIO\r
586 //   <o.16> GPA                   <0=> Secure <1=> Non-Secure\r
587 //   <o.17> GPB                   <0=> Secure <1=> Non-Secure\r
588 //   <o.18> GPC                   <0=> Secure <1=> Non-Secure\r
589 //   <o.19> GPD                   <0=> Secure <1=> Non-Secure\r
590 //   <o.20> GPE                   <0=> Secure <1=> Non-Secure\r
591 //   <o.21> GPF               <0=> Secure <1=> Non-Secure\r
592 //   </h>\r
593 //   <o.22> SPI0              <0=> Secure <1=> Non-Secure\r
594 //   <o.23> SPI1              <0=> Secure <1=> Non-Secure\r
595 //   <h> EPWM\r
596 //   <o.24> BRAKE0            <0=> Secure <1=> Non-Secure\r
597 //   <o.25> EPWM0_P0          <0=> Secure <1=> Non-Secure\r
598 //   <o.26> EPWM0_P1          <0=> Secure <1=> Non-Secure\r
599 //   <o.27> EPWM0_P2          <0=> Secure <1=> Non-Secure\r
600 //   <o.28> BRAKE1            <0=> Secure <1=> Non-Secure\r
601 //   <o.29> EPWM1_P0          <0=> Secure <1=> Non-Secure\r
602 //   <o.30> EPWM1_P1          <0=> Secure <1=> Non-Secure\r
603 //   <o.31> EPWM1_P2          <0=> Secure <1=> Non-Secure\r
604 //   </h>\r
605 //\r
606 */\r
607 #define NVIC_INIT_ITNS0_VAL      0x0\r
608 \r
609 /*\r
610     Initialize ITNS 1 (Interrupts 0..31)\r
611 */\r
612 #define NVIC_INIT_ITNS1    1\r
613 /*\r
614 //   <h> TIMER\r
615 // TMR0 Always secure\r
616 // TMR1 Always secure\r
617 //   <o.2>  TMR2              <0=> Secure <1=> Non-Secure\r
618 //   <o.3>  TMR3              <0=> Secure <1=> Non-Secure\r
619 //   </h>\r
620 //   <o.4>  UART0             <0=> Secure <1=> Non-Secure\r
621 //   <o.5>  UART1             <0=> Secure <1=> Non-Secure\r
622 //   <o.6>  I2C0              <0=> Secure <1=> Non-Secure\r
623 //   <o.7>  I2C1              <0=> Secure <1=> Non-Secure\r
624 // PDMA0 is secure only\r
625 //   <o.9>  DAC               <0=> Secure <1=> Non-Secure\r
626 //   <o.10> EADC0             <0=> Secure <1=> Non-Secure\r
627 //   <o.11> EADC1             <0=> Secure <1=> Non-Secure\r
628 //   <o.12> ACMP01            <0=> Secure <1=> Non-Secure\r
629 \r
630 //   <o.14> EADC2             <0=> Secure <1=> Non-Secure\r
631 //   <o.15> EADC3             <0=> Secure <1=> Non-Secure\r
632 //   <o.16> UART2             <0=> Secure <1=> Non-Secure\r
633 //   <o.17> UART3             <0=> Secure <1=> Non-Secure\r
634 \r
635 //   <o.19> SPI2              <0=> Secure <1=> Non-Secure\r
636 //   <o.20> SPI3              <0=> Secure <1=> Non-Secure\r
637 //   <o.21> USBD              <0=> Secure <1=> Non-Secure\r
638 //   <o.22> USBH              <0=> Secure <1=> Non-Secure\r
639 //   <o.23> USBOTG            <0=> Secure <1=> Non-Secure\r
640 //   <o.24> CAN0              <0=> Secure <1=> Non-Secure\r
641 \r
642 //   <h> Smart Card\r
643 //   <o.26> SC0               <0=> Secure <1=> Non-Secure\r
644 //   <o.27> SC1               <0=> Secure <1=> Non-Secure\r
645 //   <o.28> SC2               <0=> Secure <1=> Non-Secure\r
646 //   </h>\r
647 \r
648 //   <o.30> SPI4              <0=> Secure <1=> Non-Secure\r
649 \r
650 //\r
651 */\r
652 #define NVIC_INIT_ITNS1_VAL      0x20\r
653 \r
654 /*\r
655     Initialize ITNS 2 (Interrupts 0..31)\r
656 */\r
657 #define NVIC_INIT_ITNS2    1\r
658 /*\r
659 //   <o.0>  SDH0              <0=> Secure <1=> Non-Secure\r
660 \r
661 \r
662 \r
663 //   <o.4>  I2S0              <0=> Secure <1=> Non-Secure\r
664 \r
665 //\r
666 //   <o.7>  CRYPTO                <0=> Secure <1=> Non-Secure\r
667 //   <o.8>  GPG               <0=> Secure <1=> Non-Secure\r
668 //   <o.9>  EINT6             <0=> Secure <1=> Non-Secure\r
669 //   <o.10> UART4             <0=> Secure <1=> Non-Secure\r
670 //   <o.11> UART5             <0=> Secure <1=> Non-Secure\r
671 //   <o.12> USCI0             <0=> Secure <1=> Non-Secure\r
672 //   <o.13> USCI1             <0=> Secure <1=> Non-Secure\r
673 //   <o.14> BPWM0             <0=> Secure <1=> Non-Secure\r
674 //   <o.15> BPWM1             <0=> Secure <1=> Non-Secure\r
675 \r
676 \r
677 //   <o.18> I2C2              <0=> Secure <1=> Non-Secure\r
678 \r
679 //   <o.20> QEI0              <0=> Secure <1=> Non-Secure\r
680 //   <o.21> QEI1              <0=> Secure <1=> Non-Secure\r
681 //   <o.22> ECAP0             <0=> Secure <1=> Non-Secure\r
682 //   <o.23> ECAP1             <0=> Secure <1=> Non-Secure\r
683 //   <o.24> GPH               <0=> Secure <1=> Non-Secure\r
684 //   <o.25> EINT7             <0=> Secure <1=> Non-Secure\r
685 \r
686 \r
687 //   <o.28> USBH              <0=> Secure <1=> Non-Secure\r
688 \r
689 \r
690 \r
691 //\r
692 */\r
693 #define NVIC_INIT_ITNS2_VAL      0x0\r
694 \r
695 \r
696 /*\r
697     Initialize ITNS 3 (Interrupts 0..31)\r
698 */\r
699 #define NVIC_INIT_ITNS3    1\r
700 /*\r
701 //   <o.0>  SPI5              <0=> Secure <1=> Non-Secure\r
702 //   <o.1>  DSRC              <0=> Secure <1=> Non-Secure\r
703 //   <o.2>  PDMA1             <0=> Secure <1=> Non-Secure\r
704 // SCU  Always secure\r
705 //\r
706 //   <o.5>  TRNG              <0=> Secure <1=> Non-Secure\r
707 */\r
708 #define NVIC_INIT_ITNS3_VAL      0x0\r
709 \r
710 \r
711 \r
712 /*\r
713 // </h>\r
714 */\r
715 \r
716 \r
717 \r
718 /*\r
719     max 128 SAU regions.\r
720     SAU regions are defined in partition.h\r
721  */\r
722 \r
723 #define SAU_INIT_REGION(n) \\r
724     SAU->RNR  =  (n                                     & SAU_RNR_REGION_Msk); \\r
725     SAU->RBAR =  (SAU_INIT_START##n                     & SAU_RBAR_BADDR_Msk); \\r
726     SAU->RLAR =  (SAU_INIT_END##n                       & SAU_RLAR_LADDR_Msk) | \\r
727                 ((SAU_INIT_NSC##n << SAU_RLAR_NSC_Pos)  & SAU_RLAR_NSC_Msk)   | 1U\r
728 \r
729 /**\r
730   \brief   Setup a SAU Region\r
731   \details Writes the region information contained in SAU_Region to the\r
732            registers SAU_RNR, SAU_RBAR, and SAU_RLAR\r
733  */\r
734 __STATIC_INLINE void TZ_SAU_Setup(void)\r
735 {\r
736 \r
737 #if defined (__SAU_PRESENT) && (__SAU_PRESENT == 1U)\r
738 \r
739 #if defined (SAU_INIT_REGION0) && (SAU_INIT_REGION0 == 1U)\r
740     SAU_INIT_REGION(0);\r
741 #endif\r
742 \r
743 #if defined (SAU_INIT_REGION1) && (SAU_INIT_REGION1 == 1U)\r
744     SAU_INIT_REGION(1);\r
745 #endif\r
746 \r
747 #if defined (SAU_INIT_REGION2) && (SAU_INIT_REGION2 == 1U)\r
748     SAU_INIT_REGION(2);\r
749 #endif\r
750 \r
751 #if defined (SAU_INIT_REGION3) && (SAU_INIT_REGION3 == 1U)\r
752     SAU_INIT_REGION(3);\r
753 #endif\r
754 \r
755 #if defined (SAU_INIT_REGION4) && (SAU_INIT_REGION4 == 1U)\r
756     SAU_INIT_REGION(4);\r
757 #endif\r
758 \r
759 #if defined (SAU_INIT_REGION5) && (SAU_INIT_REGION5 == 1U)\r
760     SAU_INIT_REGION(5);\r
761 #endif\r
762 \r
763 #if defined (SAU_INIT_REGION6) && (SAU_INIT_REGION6 == 1U)\r
764     SAU_INIT_REGION(6);\r
765 #endif\r
766 \r
767 #if defined (SAU_INIT_REGION7) && (SAU_INIT_REGION7 == 1U)\r
768     SAU_INIT_REGION(7);\r
769 #endif\r
770 \r
771     /* repeat this for all possible SAU regions */\r
772 \r
773 \r
774 #if defined (SAU_INIT_CTRL) && (SAU_INIT_CTRL == 1U)\r
775     SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU_CTRL_ENABLE_Msk) |\r
776                 ((SAU_INIT_CTRL_ALLNS  << SAU_CTRL_ALLNS_Pos)  & SAU_CTRL_ALLNS_Msk)   ;\r
777 #endif\r
778 \r
779 #endif /* defined (__SAU_PRESENT) && (__SAU_PRESENT == 1U) */\r
780 \r
781 #if defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U)\r
782     SCB->SCR   = (SCB->SCR   & ~(SCB_SCR_SLEEPDEEPS_Msk)) |\r
783                  ((SCB_CSR_DEEPSLEEPS_VAL     << SCB_SCR_SLEEPDEEPS_Pos)     & SCB_SCR_SLEEPDEEPS_Msk);\r
784 \r
785 //    SCB->AIRCR = (SCB->AIRCR & ~(SCB_AIRCR_SYSRESETREQS_Msk | SCB_AIRCR_BFHFNMINS_Msk |  SCB_AIRCR_PRIS_Msk)) |\r
786 //                 ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) |\r
787 //                 ((SCB_AIRCR_BFHFNMINS_VAL    << SCB_AIRCR_BFHFNMINS_Pos)    & SCB_AIRCR_BFHFNMINS_Msk)    |\r
788 //                 ((SCB_AIRCR_PRIS_VAL         << SCB_AIRCR_PRIS_Pos)         & SCB_AIRCR_PRIS_Msk);\r
789 \r
790     SCB->AIRCR = (0x05FA << 16) |\r
791                  ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) |\r
792                  ((SCB_AIRCR_BFHFNMINS_VAL    << SCB_AIRCR_BFHFNMINS_Pos)    & SCB_AIRCR_BFHFNMINS_Msk)    |\r
793                  ((SCB_AIRCR_PRIS_VAL         << SCB_AIRCR_PRIS_Pos)         & SCB_AIRCR_PRIS_Msk);\r
794 \r
795 \r
796 \r
797 #endif /* defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) */\r
798 \r
799 #if defined (SCB_ICSR_INIT) && (SCB_ICSR_INIT == 1U)\r
800     SCB->ICSR  = (SCB->ICSR  & ~(SCB_ICSR_STTNS_Msk)) |\r
801                  ((SCB_ICSR_STTNS_VAL         << SCB_ICSR_STTNS_Pos)         & SCB_ICSR_STTNS_Msk);\r
802 #endif /* defined (SCB_ICSR_INIT) && (SCB_ICSR_INIT == 1U) */\r
803 \r
804 #if defined (NVIC_INIT_ITNS0) && (NVIC_INIT_ITNS0 == 1U)\r
805     NVIC->ITNS[0] = NVIC_INIT_ITNS0_VAL;\r
806 #endif\r
807 \r
808 #if defined (NVIC_INIT_ITNS1) && (NVIC_INIT_ITNS1 == 1U)\r
809     NVIC->ITNS[1] = NVIC_INIT_ITNS1_VAL;\r
810 #endif\r
811 \r
812 #if defined (NVIC_INIT_ITNS2) && (NVIC_INIT_ITNS2 == 1U)\r
813     NVIC->ITNS[2] = NVIC_INIT_ITNS2_VAL;\r
814 #endif\r
815 \r
816 #if defined (NVIC_INIT_ITNS3) && (NVIC_INIT_ITNS3 == 1U)\r
817     NVIC->ITNS[3] = NVIC_INIT_ITNS3_VAL;\r
818 #endif\r
819 \r
820 \r
821     /* repeat this for all possible ITNS elements */\r
822 \r
823 }\r
824 \r
825 \r
826 #endif  /* PARTITION_M2351 */\r
827 \r