File indexing completed on 2025-05-11 08:23:39
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
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