📄 startup.s
字号:
.text .align 4 .global begin .type begin,functionbegin: @set the IRQ stack mov r0, #0xd2 @IRQMode msr cpsr_c,r0 @IRQMode ldr sp,=IRQstack_beg mov r0, #211 @ make sure svc mode msr CPSR_c, r0 @ and all irqs disabled adr r5, startup_data ldmia r5, {r5, r8, sp} @ Setup bss and stack , r5 is length /* Copy data sections to their new home. */ /* r8 is bss addr */ /* Clear BSS */ 1: mov r4, #0 str r4, [r8],#4 sub r5, r5, #1 cmp r5, #0 bgt 1b /* Pretend we know what our processor code is (for arm_id) */@@@ ldr r2, =0x41000000@@@ orr r2, r2, #0x7000 @ FIXME --> 0x41007000 ldr r2, L_AT91_SF_CIDR ldr r2, [r2] @ read processor id str r2, pid_adr /* MACH_TYPE_ATMEL is 89 0x59 */ mov r2, #89 str r2, mid_adr /* at91_init*/ mov fp, #0 bl init_kernel mov fp, #0 b start_kernel @----------------------------------------------------------------------/* .align 2 .global ARMDisableInt .type ARMDisableInt,functionARMDisableInt: STMDB sp!, {r0} MRS r0, CPSR ORR r0, r0, #0x80 @NoInterrupt MSR CPSR_c, r0 LDMIA sp!, {r0} MOV pc, lr @------------------------------------------------------------------------ .align 2 .global ARMEnableInt .type ARMEnableInt,functionARMEnableInt: STMDB sp!, {r0} MRS r0, CPSR BIC r0, r0, #0x80 @NoInterrupt MSR CPSR_c, r0 LDMIA sp!, {r0} MOV pc, lr*/@------------------------------------------------------------------------ .align 2 .global AT91_IRQHandler .type AT91_IRQHandler,functionAT91_IRQHandler: @Interrupt Handler Prologue SUB lr, lr, #4 STMFD sp!, {r0-r12, lr} @; push registers and return address MRS r4, SPSR @; get SPSR STMFD sp!, {r4} @; push SPSR @; End Interrupt Handler Prologue @; Call main IRQ service dispatcher BL do_IRQ /* chy test ------------ LDR r12, =swap_context_flag LDR r11, [r12] TST r11, #1 BEQ 2f MOV r11, #0 STR r11, [r12] B IRQContextSwap ------------------ */ @; Interrupt Handler Epilogue2: LDMFD sp!, {r4} @; pop SPSR MSR SPSR_c, r4 @; restore SPSR LDMFD sp!, {r0-r12, pc}^ @; restore registers and RFI @; End Interrupt Handler Epilogue @; @; End of IRQHandler @;L_AT91_SF_CIDR: .long 0xfff00000startup_data: .word 4096 .word stack_beg .word bss_begpid_adr: .word proc_idmid_adr: .word mach_id .data .align 2proc_id: .word 0mach_id: .word 0 .align 2 .type stack_beg,object .size stack_beg,4096stack_beg: .word 0 .space 4096stak_end: .word 0 .space 4096IRQstack_beg: .word 0 .space 4096IRQstack_end: .word 0 .space 4096.bss .align 2 .type bss_beg,object .size bss_beg,4096bss_beg: .word 0 .space 4096
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -