📄 in_reset.s
字号:
adr r0, irqvec @ @ where to read values ldmia r0!, {r1-r2} @ read the vectors mov r0, #(6*4) @ @ of the interrupt vector stmia r0!, {r1-r2} @ store them ENDIF*//* IF :DEF: AT91EB01@ - | -- Get the top of the SRAM@ - | top <- InitMainSram()*/ stmfd r13!, {lr} ldr r0, =InitMainSram mov lr, pc bx r0 ldmfd r13!, {lr}/* ENDIF IF :DEF: AT91DB01@ - | -- Get the top of the SSRAM@ - | top <- SSRAM_BASE ldr r0, =SSRAM_LIMIT ENDIF@ - | -- Save current CPSR and work registers*/ mrs r12, cpsr/* @ - | Get the size of the stacks */ ldr r2, =InitTableStack/* @ - | Reserve debugger stack size */ ldr r3, [r2, #0] sub r0, r0, r3/* IF :LNOT::DEF:AT91_DEBUG_ANGEL@ - | If (FIQ size defined)*/ ldr r3, [r2, #0] teq r3, #0/* @ - | Then */ beq InitFiqEnd/* @ - | | -- Set up Fast Interrupt mode and set FIQ stack */ mov r1, #ARM_MODE_FIQ | I_BIT | F_BIT msr cpsr, r1/* @ - | | FIQ_r13 <- top */ mov r13, r0/* @ - | | top <- top - size_FIQ */ sub r0, r0, r3/* @ - | Endif */InitFiqEnd:/*@ - | If (IRQ size defined)*/ ldr r3, [r2, #4] teq r3, #0/* @ - | Then */ beq InitIrqEnd/* @ - | | -- Set up Interrupt mode and set IRQ stack */ mov r1, #ARM_MODE_IRQ | I_BIT | F_BIT msr cpsr, r1/* @ - | | IRQ_r13 <- top */ mov r13, r0/* @ - | | top <- top - size_IRQ */ sub r0, r0, r3/* @ - | Endif */InitIrqEnd:/* IF :LNOT::DEF:AT91_DEBUG_ICE@ - | If (SVC size defined)*/ ldr r3, [r2, #8] teq r3, #0/* @ - | Then */ beq InitSvcEnd/* @ - | | -- Set up Supervisor mode and set SVC stack */ mov r1, #ARM_MODE_SVC | I_BIT | F_BIT msr cpsr, r1/* @ - | | SVC_r13 <- top */ mov r13, r0/* @ - | | top <- top - size_SVC */ sub r0, r0, r3/* @ - | Endif */InitSvcEnd:/* ENDIF ENDIF@ - | If (ABORT size defined)*/ ldr r3, [r2, #12] teq r3, #0/* @ - | Then */ beq InitAbortEnd/* @ - | | -- Set up Abort mode and set ABORT stack */ mov r1, #ARM_MODE_ABORT | I_BIT | F_BIT msr cpsr, r1/* @ - | | Abort_r13 <- top */ mov r13, r0/* @ - | | top <- top - size_ABORT */ sub r0, r0, r3/* @ - | Endif */InitAbortEnd:/* @ - | If (UNDEF size defined) */ ldr r3, [r2, #16] teq r3, #0/* @ - | Then */ beq InitUndefEnd/* @ - | | -- Set up Undefined mode and set UNDEF stack */ mov r1, #ARM_MODE_UNDEF | I_BIT | F_BIT msr cpsr, r1/* @ - | | UNDEF_r13 <- top */ mov r13, r0/* @ - | | top <- top - size_UNDEF */ sub r0, r0, r3/* @ - | Endif */InitUndefEnd:/* @ - | -- Set up USER/SYStem mode and set USER/SYStem stack */ mov r1, #ARM_MODE_SYS | I_BIT | F_BIT msr cpsr, r1/* @ - | r13 <- top */ mov r13, r0/* @ - | -- Restore current CPSR enabling interrupt and fast interrupt */ bic r12, r12, #I_BIT | F_BIT msr cpsr, r12/* @ - | return */ bx lr/*@ ------------------------------------------------------------------------------@ - ATMEL Microcontroller Software Support - ROUSSET -@ ------------------------------------------------------------------------------@ The software is delivered "AS IS" without warranty or condition of any@ kind, either express, implied or statutory. This includes without@ limitation any warranty or condition with respect to merchantability or@ fitness for any particular purpose, or against the infringements of@ intellectual property rights of others.@ -----------------------------------------------------------------------------@ - File source : in_eb01.s@ - Object : table for AT91EB01 initialization@ - Translator : ARM Software Development Toolkit V2.11a@ -@ - Exported Resources : InitTableEBI - InitTableStack@ - Imported Resources : None@ -@ - 1.0 15/09/98 JLV : Creation@ - 2.0 21/10/98 JCZ : Clean up.@ - 2.1 16/03/99 JCZ : SDT V2.5@ - : Reserve stack space on top of memory for ICE Debug.@ ------------------------------------------------------------------------------ AREA Init, CODE, READONLY@ -------------------------- List of Included Files ---------------------------@ INCLUDE Include/ebi.inc*/ EBI_BASE = 0xFFE00000/* @ -------------------------- List of Macro definitions ------------------------ *//* MACRO STACK_SIZE $debug, $fiq, $irq, $svc, $abort, $undef DCD $debug*4 DCD $fiq*4 DCD $irq*4 DCD $svc*4 DCD $abort*4 DCD $undef*4 MEND*/ .macro STACK_SIZE debug, fiq, irq, svc, abort, undef .word \debug*4 .word \fiq*4 .word \irq*4 .word \svc*4 .word \abort*4 .word \undef*4 .endm /*@ ------------------------ List of constants and types ------------------------@ None@ ------------------------ List of Imported resources -------------------------@ None@ ------------------------ List of Internal resources -------------------------@ None@ ------------------------ List of Exported resources ------------------------- IF :DEF:AT91_DEBUG_NONE@ ------------------------------------------------------------------------------@ - Function : InitTableEBI@ - Treatments : Table for EBI initialization@ - Input Parameters : None@ - Output Parameters : None@ - Registers lost : None@ - Called Functions : None@ - Called Macros : None@ ------------------------------------------------------------------------------@ .global InitTableEBI@ 32,768 MHz master clock assumed*/InitTableEBI: .word 0x01002535 @ 0x01000000, 16MB, 2 hold, 16 bits, 6 WS .word 0x02002121 @ 0x02000000, 16MB, 0 hold, 16 bits, 1 WS .word 0x20000000 @ unused .word 0x30000000 @ unused .word 0x40000000 @ unused .word 0x50000000 @ unused .word 0x60000000 @ unused .word 0x70000000 @ unused .word 0x00000001 @ REMAP command .word 0x00000006 @ 7 memory regions, standard read .word EBI_BASE @ EBI Base address/* ENDIF @ ------------------------------------------------------------------------------@ - Function : InitTableStack@ - Treatments : Table for stack initialization ( stack sizes)@ - Input Parameters : None@ - Output Parameters : None@ - Registers lost : None@ - Called Functions : None@ - Called Macros : None@ ------------------------------------------------------------------------------@ .global InitTableStack*/InitTableStack:/* IF :DEF:AT91_DEBUG_NONE*/ STACK_SIZE 0, 3, 3*8, 256, 3, 3/* ENDIF IF :DEF:AT91_DEBUG_ANGEL STACK_SIZE 0, 0, 0, 0, 0, 0 ENDIF IF :DEF:AT91_DEBUG_ICE STACK_SIZE 1024, 3, 3*8, 0, 3, 3 ENDIF END*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -