📄 crt0.s.bak
字号:
// file: crt0.s
.global main // int main(void)
.global _etext // -> .data initial values in ROM
.global _data // -> .data area in RAM
.global _edata // end of .data area
.global __bss_start__ // -> .bss area in RAM
.global __bss_end__ // end of .bss area
.global __stack_start__ // top of stack
// Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
.set MODE_USR, 0x10 // User Mode
.set MODE_FIQ, 0x11 // FIQ Mode
.set MODE_IRQ, 0x12 // IRQ Mode
.set MODE_SVC, 0x13 // Supervisor Mode
.set MODE_ABT, 0x17 // Abort Mode
.set MODE_UND, 0x1B // Undefined Mode
.set MODE_SYS, 0x1F // System Mode
.equ I_BIT, 0x80 // when I bit is set, IRQ is disabled
.equ F_BIT, 0x40 // when F bit is set, FIQ is disabled
.text
.code 32
.align 2
//------------------------------------------------
//------------------------------------------------
//ENTRY
/* b _start //; 0x00
b _start //; 0x04
b _start //; 0x08
b _start //; 0x0c
b _start //; 0x10
b . // 0x14
b HandlerIRQ //; 0x18
b HandlerFIQ //; 0x1c
ldr pc,=HandlerEINT0 //; 0x20
ldr pc,=HandlerEINT1
ldr pc,=HandlerEINT2
ldr pc,=HandlerEINT3
ldr pc,=HandlerEINT4567
ldr pc,=HandlerTICK //; 0x34
b .
b .
ldr pc,=HandlerZDMA0 //; 0x40
ldr pc,=HandlerZDMA1
ldr pc,=HandlerBDMA0
ldr pc,=HandlerBDMA1
ldr pc,=_start //;=HandlerWDT
ldr pc,=HandlerUERR01 //; 0x54
b .
b .
ldr pc,=HandlerTIMER0 //; 0x60
ldr pc,=HandlerTIMER1
ldr pc,=HandlerTIMER2
ldr pc,=HandlerTIMER3
ldr pc,=HandlerTIMER4
ldr pc,=HandlerTIMER5 //; 0x74
b .
b .
ldr pc,=HandlerURXD0 //; 0x80
ldr pc,=HandlerURXD1
ldr pc,=HandlerIIC
ldr pc,=HandlerSIO
ldr pc,=HandlerUTXD0
ldr pc,=HandlerUTXD1 //; 0x94
b .
b .
ldr pc,=HandlerRTC //; 0xa0
b .
b .
b .
b .
b .
b .
ldr pc,=HandlerADC //; 0xb4
*/
// Setup the operating mode & stack.
// ---------------------------------
.global _start, start, _mainCRTStartup, ResetHandler
.func _start
//----------------------------------------------
ResetHandler:
_start:
start:
_mainCRTStartup:
mrs r0,cpsr // get PSR
orr r0,r0,#I_BIT|F_BIT // disable IRQ and FIQ
msr cpsr,r0 // set up status register
ldr r0,=__stack_start__
mov sp,r0
mov r0,#0 // get a zero
ldr r1,=__bss_start__ // -> bss start
ldr r2,=__bss_end__ // -> bss end
2: cmp r1,r2 // check if data to clear
strlo r0,[r1],#4 // clear 4 bytes
blo 2b // loop until done
ldr r1,=main
mov lr,pc
bx r1 // enter main()
.size _start, . - _start
.endfunc
.func ResetHandler
/*
HandlerUndef: //; 0x04
HandlerSWI: //; 0x08
HandlerPabort: //; 0x0c
HandlerDabort: //; 0x10
HandlerIRQ: //; 0x18
HandlerFIQ: //; 0x1c
HandlerEINT0: //; 0x20
HandlerEINT1:
HandlerEINT2:
HandlerEINT3:
HandlerEINT4567:
HandlerTICK: //; 0x34
HandlerZDMA0: //; 0x40
HandlerZDMA1:
HandlerBDMA0:
HandlerBDMA1:
HandlerWDT:
HandlerUERR01: //; 0x54
HandlerTIMER0: //; 0x60
HandlerTIMER1:
HandlerTIMER2:
HandlerTIMER3:
HandlerTIMER4:
HandlerTIMER5: //; 0x74
HandlerURXD0: //; 0x80
HandlerURXD1:
HandlerIIC:
HandlerSIO:
HandlerUTXD0:
HandlerUTXD1: //; 0x94
HandlerRTC: //; 0xa0
HandlerADC: //; 0xb4*/
ldr pc,=ResetHandler //; 0x20
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -