Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:39

0001 /* SPDX-License-Identifier: BSD-3-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSBSPsARMTMS570
0007  *
0008  * @brief This source file contains the parts of the system initialization.
0009  */
0010 
0011 /*--------------------------------------------------------------------------
0012  tms570_sys_core.S
0013 
0014  Copyright (C) 2009-2015 Texas Instruments Incorporated - www.ti.com
0015 
0016 
0017   Redistribution and use in source and binary forms, with or without
0018   modification, are permitted provided that the following conditions
0019   are met:
0020 
0021     Redistributions of source code must retain the above copyright
0022     notice, this list of conditions and the following disclaimer.
0023 
0024     Redistributions in binary form must reproduce the above copyright
0025     notice, this list of conditions and the following disclaimer in the
0026     documentation and/or other materials provided with the
0027     distribution.
0028 
0029     Neither the name of Texas Instruments Incorporated nor the names of
0030     its contributors may be used to endorse or promote products derived
0031     from this software without specific prior written permission.
0032 
0033   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
0034   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
0035   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
0036   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
0037   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
0038   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
0039   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0040   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0041   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0042   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
0043   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0044 
0045 -------------------------------------------------------------------------*/
0046 
0047     .section .text
0048     .syntax unified
0049     .cpu cortex-r4
0050     .arm
0051 
0052 /*-------------------------------------------------------------------------------*/
0053 @ Initialize CPU Registers
0054 @ SourceId : CORE_SourceId_001
0055 @ DesignId : CORE_DesignId_001
0056 @ Requirements: HL_SR477, HL_SR476, HL_SR492
0057 
0058     .weak _coreInitRegisters_
0059     .type _coreInitRegisters_, %function
0060 
0061 _coreInitRegisters_:
0062 
0063     @ After reset, the CPU is in the Supervisor mode (M = 10011)
0064         mov r0, lr
0065         mov r1, #0x0000
0066         mov r2, #0x0000
0067         mov r3, #0x0000
0068         mov r4, #0x0000
0069         mov r5, #0x0000
0070         mov r6, #0x0000
0071         mov r7, #0x0000
0072         mov r8, #0x0000
0073         mov r9, #0x0000
0074         mov r10, #0x0000
0075         mov r11, #0x0000
0076         mov r12, #0x0000
0077         mov r13, #0x0000
0078         mrs r1, cpsr
0079         msr spsr_cxsf, r1
0080         @ Switch to FIQ mode (M = 10001)
0081         cps #17
0082         mov lr, r0
0083         mov r8, #0x0000
0084         mov r9, #0x0000
0085         mov r10, #0x0000
0086         mov r11, #0x0000
0087         mov r12, #0x0000
0088         mrs r1, cpsr
0089         msr spsr_cxsf, r1
0090         @ Switch to IRQ mode (M = 10010)
0091         cps #18
0092         mov lr, r0
0093         mrs r1,cpsr
0094         msr spsr_cxsf, r1             @ Switch to Abort mode (M = 10111)
0095         cps #23
0096         mov lr, r0
0097         mrs r1,cpsr
0098         msr spsr_cxsf, r1             @ Switch to Undefined Instruction Mode (M = 11011)
0099         cps #27
0100         mov lr, r0
0101         mrs r1,cpsr
0102         msr spsr_cxsf, r1             @ Switch to System Mode ( Shares User Mode registers ) (M = 11111)
0103         cps #31
0104         mov lr, r0
0105         mrs r1,cpsr
0106         msr spsr_cxsf, r1
0107 
0108         mrc   p15,     #0x00,      r2,       c1, c0, #0x02
0109         orr   r2,      r2,         #0xF00000
0110         mcr   p15,     #0x00,      r2,       c1, c0, #0x02
0111         mov   r2,      #0x40000000
0112         fmxr  fpexc,   r2
0113 
0114         fmdrr d0, r1, r1
0115         fmdrr d1, r1, r1
0116         fmdrr d2, r1, r1
0117         fmdrr d3, r1, r1
0118         fmdrr d4, r1, r1
0119         fmdrr d5, r1, r1
0120         fmdrr d6, r1, r1
0121         fmdrr d7, r1, r1
0122         fmdrr d8, r1, r1
0123         fmdrr d9, r1, r1
0124         fmdrr d10, r1, r1
0125         fmdrr d11, r1, r1
0126         fmdrr d12, r1, r1
0127         fmdrr d13, r1, r1
0128         fmdrr d14, r1, r1
0129         fmdrr d15, r1, r1
0130 
0131     bl next1
0132 next1:
0133     bl next2
0134 next2:
0135     bl next3
0136 next3:
0137     bl next4
0138 next4:
0139     bx r0
0140 
0141 /*-------------------------------------------------------------------------------*/
0142 @ Take CPU to IDLE state
0143 @ SourceId : CORE_SourceId_004
0144 @ DesignId : CORE_DesignId_004
0145 @ Requirements: HL_SR493
0146 
0147     .weak _gotoCPUIdle_
0148     .type _gotoCPUIdle_, %function
0149 
0150 _gotoCPUIdle_:
0151 
0152         WFI
0153         nop
0154         nop
0155         nop
0156         nop
0157         bx    lr
0158 
0159 /*-------------------------------------------------------------------------------*/
0160 @ Enable VFP Unit
0161 @ SourceId : CORE_SourceId_005
0162 @ DesignId : CORE_DesignId_006
0163 @ Requirements: HL_SR492, HL_SR476
0164 
0165     .weak _coreEnableVfp_
0166     .type _coreEnableVfp_, %function
0167 
0168 _coreEnableVfp_:
0169 
0170         stmfd sp!, {r0}
0171         mrc   p15,     #0x00,      r0,       c1, c0, #0x02
0172         orr   r0,      r0,         #0xF00000
0173         mcr   p15,     #0x00,      r0,       c1, c0, #0x02
0174         mov   r0,      #0x40000000
0175         fmxr  fpexc,   r0
0176         ldmfd sp!, {r0}
0177         bx    lr
0178 
0179 /*-------------------------------------------------------------------------------*/
0180 @ Enable Event Bus Export
0181 @ SourceId : CORE_SourceId_006
0182 @ DesignId : CORE_DesignId_007
0183 @ Requirements: HL_SR479
0184 
0185     .weak _coreEnableEventBusExport_
0186     .type _coreEnableEventBusExport_, %function
0187 
0188 _coreEnableEventBusExport_:
0189 
0190         stmfd sp!, {r0}
0191         mrc   p15, #0x00, r0,         c9, c12, #0x00
0192         orr   r0,  r0,    #0x10
0193         mcr   p15, #0x00, r0,         c9, c12, #0x00
0194         ldmfd sp!, {r0}
0195         bx    lr
0196 
0197 /*-------------------------------------------------------------------------------*/
0198 @ Disable Event Bus Export
0199 @ SourceId : CORE_SourceId_007
0200 @ DesignId : CORE_DesignId_008
0201 @ Requirements: HL_SR481
0202 
0203     .weak _coreDisableEventBusExport_
0204     .type _coreDisableEventBusExport_, %function
0205 
0206 _coreDisableEventBusExport_:
0207 
0208         stmfd sp!, {r0}
0209         mrc   p15, #0x00, r0,         c9, c12, #0x00
0210         bic   r0,  r0,    #0x10
0211         mcr   p15, #0x00, r0,         c9, c12, #0x00
0212         ldmfd sp!, {r0}
0213         bx    lr
0214 
0215 /*-------------------------------------------------------------------------------*/
0216 @ Enable RAM ECC Support
0217 @ SourceId : CORE_SourceId_008
0218 @ DesignId : CORE_DesignId_009
0219 @ Requirements: HL_SR480
0220 
0221     .weak _coreEnableRamEcc_
0222     .type _coreEnableRamEcc_, %function
0223 
0224 _coreEnableRamEcc_:
0225 
0226         stmfd sp!, {r0}
0227         mrc   p15, #0x00, r0,         c1, c0,  #0x01
0228         orr   r0,  r0,    #0x0C000000
0229         mcr   p15, #0x00, r0,         c1, c0,  #0x01
0230         ldmfd sp!, {r0}
0231         bx    lr
0232 
0233 /*-------------------------------------------------------------------------------*/
0234 @ Disable RAM ECC Support
0235 @ SourceId : CORE_SourceId_009
0236 @ DesignId : CORE_DesignId_010
0237 @ Requirements: HL_SR482
0238 
0239     .weak _coreDisableRamEcc_
0240     .type _coreDisableRamEcc_, %function
0241 
0242 _coreDisableRamEcc_:
0243 
0244         stmfd sp!, {r0}
0245         mrc   p15, #0x00, r0,         c1, c0,  #0x01
0246         bic   r0,  r0,    #0x0C000000
0247         mcr   p15, #0x00, r0,         c1, c0,  #0x01
0248         ldmfd sp!, {r0}
0249         bx    lr
0250 
0251 /*-------------------------------------------------------------------------------*/
0252 @ Enable Flash ECC Support
0253 @ SourceId : CORE_SourceId_010
0254 @ DesignId : CORE_DesignId_011
0255 @ Requirements: HL_SR480
0256 
0257     .weak _coreEnableFlashEcc_
0258     .type _coreEnableFlashEcc_, %function
0259 
0260 _coreEnableFlashEcc_:
0261 
0262         stmfd sp!, {r0}
0263         mrc   p15, #0x00, r0,         c1, c0,  #0x01
0264         orr   r0,  r0,    #0x02000000
0265         dmb
0266         mcr   p15, #0x00, r0,         c1, c0,  #0x01
0267         ldmfd sp!, {r0}
0268         bx    lr
0269 
0270 /*-------------------------------------------------------------------------------*/
0271 @ Disable Flash ECC Support
0272 @ SourceId : CORE_SourceId_011
0273 @ DesignId : CORE_DesignId_012
0274 @ Requirements: HL_SR482
0275 
0276     .weak _coreDisableFlashEcc_
0277     .type _coreDisableFlashEcc_, %function
0278 
0279 _coreDisableFlashEcc_:
0280 
0281         stmfd sp!, {r0}
0282         mrc   p15, #0x00, r0,         c1, c0,  #0x01
0283         bic   r0,  r0,    #0x02000000
0284         mcr   p15, #0x00, r0,         c1, c0,  #0x01
0285         ldmfd sp!, {r0}
0286         bx    lr
0287 
0288 /*-------------------------------------------------------------------------------*/
0289 @ Enable Offset via Vic controller
0290 @ SourceId : CORE_SourceId_012
0291 @ DesignId : CORE_DesignId_005
0292 @ Requirements: HL_SR483
0293 
0294     .weak _coreEnableIrqVicOffset_
0295     .type _coreEnableIrqVicOffset_, %function
0296 
0297 _coreEnableIrqVicOffset_:
0298 
0299         stmfd sp!, {r0}
0300         mrc   p15, #0, r0,         c1, c0,  #0
0301         orr   r0,  r0,    #0x01000000
0302         mcr   p15, #0, r0,         c1, c0,  #0
0303         ldmfd sp!, {r0}
0304         bx    lr
0305 
0306 /*-------------------------------------------------------------------------------*/
0307 @ Get data fault status register
0308 @ SourceId : CORE_SourceId_013
0309 @ DesignId : CORE_DesignId_013
0310 @ Requirements: HL_SR495
0311 
0312     .weak _coreGetDataFault_
0313     .type _coreGetDataFault_, %function
0314 
0315 _coreGetDataFault_:
0316 
0317         mrc   p15, #0, r0, c5, c0,  #0
0318         bx    lr
0319 
0320 /*-------------------------------------------------------------------------------*/
0321 @ Clear data fault status register
0322 @ SourceId : CORE_SourceId_014
0323 @ DesignId : CORE_DesignId_014
0324 @ Requirements: HL_SR495
0325 
0326     .weak _coreClearDataFault_
0327     .type _coreClearDataFault_, %function
0328 
0329 _coreClearDataFault_:
0330 
0331         stmfd sp!, {r0}
0332         mov   r0,  #0
0333         mcr   p15, #0, r0, c5, c0,  #0
0334         ldmfd sp!, {r0}
0335         bx    lr
0336 
0337 /*-------------------------------------------------------------------------------*/
0338 @ Get instruction fault status register
0339 @ SourceId : CORE_SourceId_015
0340 @ DesignId : CORE_DesignId_015
0341 @ Requirements: HL_SR495
0342 
0343     .weak _coreGetInstructionFault_
0344     .type _coreGetInstructionFault_, %function
0345 
0346 _coreGetInstructionFault_:
0347 
0348         mrc   p15, #0, r0, c5, c0, #1
0349         bx    lr
0350 
0351 /*-------------------------------------------------------------------------------*/
0352 @ Clear instruction fault status register
0353 @ SourceId : CORE_SourceId_016
0354 @ DesignId : CORE_DesignId_016
0355 @ Requirements: HL_SR495
0356 
0357     .weak _coreClearInstructionFault_
0358     .type _coreClearInstructionFault_, %function
0359 
0360 _coreClearInstructionFault_:
0361 
0362         stmfd sp!, {r0}
0363         mov   r0,  #0
0364         mcr   p15, #0, r0, c5, c0, #1
0365         ldmfd sp!, {r0}
0366         bx    lr
0367 
0368 /*-------------------------------------------------------------------------------*/
0369 @ Get data fault address register
0370 @ SourceId : CORE_SourceId_017
0371 @ DesignId : CORE_DesignId_017
0372 @ Requirements: HL_SR495
0373 
0374     .weak _coreGetDataFaultAddress_
0375     .type _coreGetDataFaultAddress_, %function
0376 
0377 _coreGetDataFaultAddress_:
0378 
0379         mrc   p15, #0, r0, c6, c0,  #0
0380         bx    lr
0381 
0382 /*-------------------------------------------------------------------------------*/
0383 @ Clear data fault address register
0384 @ SourceId : CORE_SourceId_018
0385 @ DesignId : CORE_DesignId_018
0386 @ Requirements: HL_SR495
0387 
0388     .weak _coreClearDataFaultAddress_
0389     .type _coreClearDataFaultAddress_, %function
0390 
0391 _coreClearDataFaultAddress_:
0392 
0393         stmfd sp!, {r0}
0394         mov   r0,  #0
0395         mcr   p15, #0, r0, c6, c0,  #0
0396         ldmfd sp!, {r0}
0397         bx    lr
0398 
0399 /*-------------------------------------------------------------------------------*/
0400 @ Get instruction fault address register
0401 @ SourceId : CORE_SourceId_019
0402 @ DesignId : CORE_DesignId_019
0403 @ Requirements: HL_SR495
0404 
0405     .weak _coreGetInstructionFaultAddress_
0406     .type _coreGetInstructionFaultAddress_, %function
0407 
0408 _coreGetInstructionFaultAddress_:
0409 
0410         mrc   p15, #0, r0, c6, c0, #2
0411         bx    lr
0412 
0413 /*-------------------------------------------------------------------------------*/
0414 @ Clear instruction fault address register
0415 @ SourceId : CORE_SourceId_020
0416 @ DesignId : CORE_DesignId_020
0417 @ Requirements: HL_SR495
0418 
0419     .weak _coreClearInstructionFaultAddress_
0420     .type _coreClearInstructionFaultAddress_, %function
0421 
0422 _coreClearInstructionFaultAddress_:
0423 
0424         stmfd sp!, {r0}
0425         mov   r0,  #0
0426         mcr   p15, #0, r0, c6, c0, #2
0427         ldmfd sp!, {r0}
0428         bx    lr
0429 
0430 /*-------------------------------------------------------------------------------*/
0431 @ Get auxiliary data fault status register
0432 @ SourceId : CORE_SourceId_021
0433 @ DesignId : CORE_DesignId_021
0434 @ Requirements: HL_SR496
0435 
0436     .weak _coreGetAuxiliaryDataFault_
0437     .type _coreGetAuxiliaryDataFault_, %function
0438 
0439 _coreGetAuxiliaryDataFault_:
0440 
0441         mrc   p15, #0, r0, c5, c1, #0
0442         bx    lr
0443 
0444 /*-------------------------------------------------------------------------------*/
0445 @ Clear auxiliary data fault status register
0446 @ SourceId : CORE_SourceId_022
0447 @ DesignId : CORE_DesignId_022
0448 @ Requirements: HL_SR496
0449 
0450     .weak _coreClearAuxiliaryDataFault_
0451     .type _coreClearAuxiliaryDataFault_, %function
0452 
0453 _coreClearAuxiliaryDataFault_:
0454 
0455         stmfd sp!, {r0}
0456         mov   r0,  #0
0457         mcr   p15, #0, r0, c5, c1, #0
0458         ldmfd sp!, {r0}
0459         bx    lr
0460 
0461 /*-------------------------------------------------------------------------------*/
0462 @ Get auxiliary instruction fault status register
0463 @ SourceId : CORE_SourceId_023
0464 @ DesignId : CORE_DesignId_023
0465 @ Requirements: HL_SR496
0466 
0467     .weak _coreGetAuxiliaryInstructionFault_
0468     .type _coreGetAuxiliaryInstructionFault_, %function
0469 
0470 _coreGetAuxiliaryInstructionFault_:
0471 
0472         mrc   p15, #0, r0, c5, c1, #1
0473         bx    lr
0474 
0475 /*-------------------------------------------------------------------------------*/
0476 @ Clear auxiliary instruction fault status register
0477 @ SourceId : CORE_SourceId_024
0478 @ DesignId : CORE_DesignId_024
0479 @ Requirements: HL_SR496
0480 
0481     .weak _coreClearAuxiliaryInstructionFault_
0482     .type _coreClearAuxiliaryInstructionFault_, %function
0483 
0484 _coreClearAuxiliaryInstructionFault_:
0485 
0486         stmfd sp!, {r0}
0487         mov   r0,  #0
0488         mrc   p15, #0, r0, c5, c1, #1
0489         ldmfd sp!, {r0}
0490         bx    lr
0491 
0492 /*-------------------------------------------------------------------------------*/
0493 @ Clear ESM CCM errorss
0494 
0495     .weak _esmCcmErrorsClear_
0496     .type _esmCcmErrorsClear_, %function
0497 
0498 _esmCcmErrorsClear_:
0499 
0500         stmfd sp!, {r0-r2}
0501         ldr   r0, ESMSR1_REG      @ load the ESMSR1 status register address
0502         ldr   r2, ESMSR1_ERR_CLR
0503         str   r2, [r0]            @ clear the ESMSR1 register
0504 
0505         ldr   r0, ESMSR2_REG      @ load the ESMSR2 status register address
0506         ldr   r2, ESMSR2_ERR_CLR
0507         str   r2, [r0]            @ clear the ESMSR2 register
0508 
0509         ldr   r0, ESMSSR2_REG     @ load the ESMSSR2 status register address
0510         ldr   r2, ESMSSR2_ERR_CLR
0511         str   r2, [r0]            @ clear the ESMSSR2 register
0512 
0513         ldr   r0, ESMKEY_REG      @ load the ESMKEY register address
0514         mov   r2, #0x5            @ load R2 with 0x5
0515         str   r2, [r0]            @ clear the ESMKEY register
0516 
0517         ldr   r0, VIM_INTREQ      @ load the INTREQ register address
0518         ldr   r2, VIM_INT_CLR
0519         str   r2, [r0]            @ clear the INTREQ register
0520         ldr   r0, CCMR4_STAT_REG  @ load the CCMR4 status register address
0521         ldr   r2, CCMR4_ERR_CLR
0522         str   r2, [r0]            @ clear the CCMR4 status register
0523         ldmfd sp!, {r0-r2}
0524         bx    lr
0525 
0526 ESMSR1_REG:      .word 0xFFFFF518
0527 ESMSR2_REG:      .word 0xFFFFF51C
0528 ESMSR3_REG:      .word 0xFFFFF520
0529 ESMKEY_REG:      .word 0xFFFFF538
0530 ESMSSR2_REG:     .word 0xFFFFF53C
0531 CCMR4_STAT_REG:  .word 0xFFFFF600
0532 ERR_CLR_WRD:     .word 0xFFFFFFFF
0533 CCMR4_ERR_CLR:   .word 0x00010000
0534 ESMSR1_ERR_CLR:  .word 0x80000000
0535 ESMSR2_ERR_CLR:  .word 0x00000004
0536 ESMSSR2_ERR_CLR: .word 0x00000004
0537 VIM_INT_CLR:     .word 0x00000001
0538 VIM_INTREQ:      .word 0xFFFFFE20
0539 
0540 
0541 #if 1/*-------------------------------------------------------------------------------*/
0542 @ Work Around for Errata CORTEX-R4#57:
0543 @
0544 @ Errata Description:
0545 @            Conditional VMRS APSR_Nzcv, FPSCR May Evaluate With Incorrect Flags
0546 @ Workaround:
0547 @            Disable out-of-order single-precision floating point
0548 @            multiply-accumulate instruction completion
0549 
0550     .weak _errata_CORTEXR4_57_
0551     .type _errata_CORTEXR4_57_, %function
0552 
0553 _errata_CORTEXR4_57_:
0554 
0555         push {r0}
0556         mrc p15, #0, r0, c15, c0, #0 @ Read Secondary Auxiliary Control Register
0557         orr r0, r0, #0x10000         @ Set BIT 16 (Set DOOFMACS)
0558         mcr p15, #0, r0, c15, c0, #0 @ Write Secondary Auxiliary Control Register
0559         pop {r0}
0560         bx lr
0561 #endif
0562 
0563 /*-------------------------------------------------------------------------------*/
0564 @ Work Around for Errata CORTEX-R4#66:
0565 @
0566 @ Errata Description:
0567 @            Register Corruption During A Load-Multiple Instruction At
0568 @            an Exception Vector
0569 @ Workaround:
0570 @            Disable out-of-order completion for divide instructions in
0571 @            Auxiliary Control register
0572 
0573     .weak _errata_CORTEXR4_66_
0574     .type _errata_CORTEXR4_66_, %function
0575 
0576 _errata_CORTEXR4_66_:
0577 
0578         push {r0}
0579         mrc p15, #0, r0, c1, c0, #1 @ Read Auxiliary Control register
0580         orr r0, r0, #0x80           @ Set BIT 7 (Disable out-of-order completion
0581                                     @ for divide instructions.)
0582         mcr p15, #0, r0, c1, c0, #1 @ Write Auxiliary Control register
0583         pop {r0}
0584         bx lr
0585 
0586 /*-------------------------------------------------------------------------------*/
0587 @ Initialize Mpu: pulled from LC4357 R5f Halcogen generation
0588 
0589     .weak _mpuInit_    
0590     .type _mpuInit_, %function  
0591 
0592 _mpuInit_:
0593         @ Disable mpu
0594         mrc   p15, #0, r0, c1, c0, #0
0595         bic   r0,  r0, #1
0596         dsb
0597         mcr   p15, #0, r0, c1, c0, #0
0598         isb
0599         @ Disable background region
0600         mrc   p15, #0, r0,      c1, c0, #0
0601         bic   r0,  r0, #0x20000
0602         mcr   p15, #0, r0,      c1, c0, #0
0603         @ Setup region 1
0604         mov   r0,  #0
0605         mcr   p15, #0,    r0, c6, c2, #0
0606         ldr   r0,  r1Base
0607         mcr   p15, #0,    r0, c6, c1, #0
0608         mov   r0,  #0x0008
0609         orr   r0,  r0,    #0x1000
0610         mcr   p15, #0,    r0, c6, c1, #4
0611         movw  r0,  #((1 << 15) + (1 << 14) + (1 << 13) + (1 << 12) + (1 << 11) + (1 << 10) + (1 <<  9) + (1 <<  8) + (0x1F << 1) + (1)) 
0612         mcr   p15, #0,    r0, c6, c1, #2
0613         @ Setup region 2
0614         mov   r0,  #1
0615         mcr   p15, #0,    r0, c6, c2, #0
0616         ldr   r0,  r2Base
0617         mcr   p15, #0,    r0, c6, c1, #0
0618         mov   r0,  #0x0002
0619         orr   r0,  r0,    #0x0600
0620         mcr   p15, #0,    r0, c6, c1, #4
0621         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x15 << 1) + (1))
0622         mcr   p15, #0,    r0, c6, c1, #2
0623         @ Setup region 3 - Internal RAM
0624         mov   r0,  #2
0625         mcr   p15, #0,    r0, c6, c2, #0
0626         ldr   r0,  r3Base
0627         mcr   p15, #0,    r0, c6, c1, #0    
0628         mov   r0,  #0x000B
0629         orr   r0,  r0,    #0x0300
0630         mcr   p15, #0,    r0, c6, c1, #4
0631         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x12 << 1) + (1))
0632         mcr   p15, #0,    r0, c6, c1, #2
0633         @ Setup region 4
0634         mov   r0,  #3
0635         mcr   p15, #0,    r0, c6, c2, #0
0636         ldr   r0,  r4Base
0637         mcr   p15, #0,    r0, c6, c1, #0
0638         mov   r0,  #0x0010
0639         orr   r0,  r0,    #0x1300
0640         mcr   p15, #0,    r0, c6, c1, #4
0641         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (1 << 10) + (1 <<  9) + (1 <<  8) + (0x1A << 1) + (1))
0642         mcr   p15, #0,    r0, c6, c1, #2
0643         @ Setup region 5
0644         mov   r0,  #4
0645         mcr   p15, #0,    r0, c6, c2, #0
0646         ldr   r0,  r5Base
0647         mcr   p15, #0,    r0, c6, c1, #0
0648         mov   r0,  #0x0000
0649         orr   r0,  r0,    #0x0300
0650         mcr   p15, #0,    r0, c6, c1, #4
0651         movw  r0,  #((1 << 15) + (1 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x1B << 1) + (1))
0652         mcr   p15, #0,    r0, c6, c1, #2
0653         @ Setup region 6 - EMIF CS0 == External SDRAM
0654         mov   r0,  #5
0655         mcr   p15, #0,    r0, c6, c2, #0
0656         ldr   r0,  r6Base
0657         mcr   p15, #0,    r0, c6, c1, #0
0658         mov   r0,  #0x000B
0659         orr   r0,  r0,    #0x0300
0660         mcr   p15, #0,    r0, c6, c1, #4
0661         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x1A << 1) + (1))
0662         mcr   p15, #0,    r0, c6, c1, #2
0663         @ Setup region 7
0664         mov   r0,  #6
0665         mcr   p15, #0,    r0, c6, c2, #0
0666         ldr   r0,  r7Base
0667         mcr   p15, #0,    r0, c6, c1, #0
0668         mov   r0,  #0x0008
0669         orr   r0,  r0,    #0x1200
0670         mcr   p15, #0,    r0, c6, c1, #4
0671         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x16 << 1) + (1))
0672         mcr   p15, #0,    r0, c6, c1, #2
0673         @ Setup region 8
0674         mov   r0,  #7
0675         mcr   p15, #0,    r0, c6, c2, #0
0676         ldr   r0,  r8Base
0677         mcr   p15, #0,    r0, c6, c1, #0
0678         mov   r0,  #0x0010
0679         orr   r0,  r0,    #0x1200
0680         mcr   p15, #0,    r0, c6, c1, #4
0681         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0682         mcr   p15, #0,    r0, c6, c1, #2
0683         @ Setup region 9
0684         mov   r0,  #8
0685         mcr   p15, #0,    r0, c6, c2, #0
0686         ldr   r0,  r9Base
0687         mcr   p15, #0,    r0, c6, c1, #0
0688         mov   r0,  #0x0006
0689         orr   r0,  r0,    #0x1200
0690         mcr   p15, #0,    r0, c6, c1, #4
0691         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0692         mcr   p15, #0,    r0, c6, c1, #2
0693         @ Setup region 10
0694         mov   r0,  #9
0695         mcr   p15, #0,    r0, c6, c2, #0
0696         ldr   r0,  r10Base
0697         mcr   p15, #0,    r0, c6, c1, #0
0698         mov   r0,  #0x000C
0699         orr   r0,  r0,    #0x1300
0700         mcr   p15, #0,    r0, c6, c1, #4
0701         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0702         mcr   p15, #0,    r0, c6, c1, #2
0703         @ Setup region 11
0704         mov   r0,  #10
0705         mcr   p15, #0,    r0, c6, c2, #0
0706         ldr   r0,  r11Base
0707         mcr   p15, #0,    r0, c6, c1, #0
0708         mov   r0,  #0x0006
0709         orr   r0,  r0,    #0x0600
0710         mcr   p15, #0,    r0, c6, c1, #4
0711         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0712         mcr   p15, #0,    r0, c6, c1, #2
0713         @ Setup region 12
0714         mov   r0,  #11
0715         mcr   p15, #0,    r0, c6, c2, #0
0716         ldr   r0,  r12Base
0717         mcr   p15, #0,    r0, c6, c1, #0
0718         mov   r0,  #0x0006
0719         orr   r0,  r0,    #0x1600
0720         mcr   p15, #0,    r0, c6, c1, #4
0721         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0722         mcr   p15, #0,    r0, c6, c1, #2
0723         @ Setup region 13
0724         mov   r0,  #12
0725         mcr   p15, #0,    r0, c6, c2, #0
0726         ldr   r0,  r13Base
0727         mcr   p15, #0,    r0, c6, c1, #0
0728         mov   r0,  #0x0006
0729         orr   r0,  r0,    #0x1600
0730         mcr   p15, #0,    r0, c6, c1, #4
0731         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0732         mcr   p15, #0,    r0, c6, c1, #2
0733         @ Setup region 14
0734         mov   r0,  #13
0735         mcr   p15, #0,    r0, c6, c2, #0
0736         ldr   r0,  r14Base
0737         mcr   p15, #0,    r0, c6, c1, #0
0738         mov   r0,  #0x0006
0739         orr   r0,  r0,    #0x1600
0740         mcr   p15, #0,    r0, c6, c1, #4
0741         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0742         mcr   p15, #0,    r0, c6, c1, #2
0743         @ Setup region 15
0744         mov   r0,  #14
0745         mcr   p15, #0,    r0, c6, c2, #0
0746         ldr   r0,  r15Base
0747         mcr   p15, #0,    r0, c6, c1, #0
0748         mov   r0,  #0x0006
0749         orr   r0,  r0,    #0x1600
0750         mcr   p15, #0,    r0, c6, c1, #4
0751         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x04 << 1) + (0))
0752         mcr   p15, #0,    r0, c6, c1, #2
0753         @ Setup region 16
0754         mov   r0,  #15
0755         mcr   p15, #0,    r0, c6, c2, #0
0756         ldr   r0,  r16Base
0757         mcr   p15, #0,    r0, c6, c1, #0
0758         mov   r0,  #0x0010
0759         orr   r0,  r0,    #0x1200
0760         mcr   p15, #0,    r0, c6, c1, #4
0761         movw  r0,  #((0 << 15) + (0 << 14) + (0 << 13) + (0 << 12) + (0 << 11) + (0 << 10) + (0 <<  9) + (0 <<  8) + (0x12 << 1) + (1))
0762         mcr   p15, #0,    r0, c6, c1, #2
0763 
0764         @ Enable mpu
0765         mrc   p15, #0, r0, c1, c0, #0
0766         orr   r0,  r0, #1
0767         dsb
0768         mcr   p15, #0, r0, c1, c0, #0
0769         isb
0770         bx    lr
0771 
0772 r1Base:  .word 0x00000000  
0773 r2Base:  .word 0x00000000  
0774 r3Base:  .word 0x08000000  
0775 r4Base:  .word 0xF8000000  
0776 r5Base:  .word 0x60000000  
0777 r6Base:  .word 0x80000000  
0778 r7Base:  .word 0xF0000000  
0779 r8Base:  .word 0x00000000  
0780 r9Base:  .word 0x00000000  
0781 r10Base:  .word 0x00000000  
0782 r11Base:  .word 0x00000000  
0783 r12Base:  .word 0x00000000  
0784 r13Base:  .word 0x00000000  
0785 r14Base:  .word 0x00000000  
0786 r15Base:  .word 0x00000000  
0787 r16Base:  .word 0xFFF80000