📄 lpc210x_crt0.lst
字号:
1 # 1 "build/lpc210x_crt0.S"
2 # 1 "<built-in>"
1 .global main // int main(void)
0
0
2 .global swiirqp // void swiirq(void)
3
4 .global _etext // -> .data initial values in ROM
5 .global _data // -> .data area in RAM
6 .global _edata // end of .data area
7 .global __bss_start // -> .bss area in RAM
8 .global __bss_end__ // end of .bss area
9 .global _stack // top of stack
10
11 // Stack Sizes
12 .set UND_STACK_SIZE, 0x00000004
13 .set ABT_STACK_SIZE, 0x00000004
14 .set FIQ_STACK_SIZE, 0x00000004
15 .set IRQ_STACK_SIZE, 0X00000080
16 .set SVC_STACK_SIZE, 0x00000004
17
18 // Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
19 .set MODE_USR, 0x10 // User Mode
20 .set MODE_FIQ, 0x11 // FIQ Mode
21 .set MODE_IRQ, 0x12 // IRQ Mode
22 .set MODE_SVC, 0x13 // Supervisor Mode
23 .set MODE_ABT, 0x17 // Abort Mode
24 .set MODE_UND, 0x1B // Undefined Mode
25 .set MODE_SYS, 0x1F // System Mode
26
27 .equ I_BIT, 0x80 // when I bit is set, IRQ is disabled
28 .equ F_BIT, 0x40 // when F bit is set, FIQ is disabled
29
30 .text
31 .code 32
32 .align 2
33
34 .global _boot
35 .func _boot
36
37 _boot:
38
39 // Runtime Interrupt Vectors
40 // -------------------------
41 Vectors:
42 0000 FEFFFFEA b _start // reset - _start
43 0004 14F09FE5 ldr pc,_undf // undefined - _undf
44 0008 14F09FE5 ldr pc,_swi // SWI - _swi
45 000c 14F09FE5 ldr pc,_pabt // program abort - _pabt
46 0010 14F09FE5 ldr pc,_dabt // data abort - _dabt
47 0014 0000A0E1 nop
48 0018 F0FF1FE5 ldr pc,[pc,#-0xFF0] // IRQ - read the VIC
49 001c 10F09FE5 ldr pc,_fiq // FIQ - _fiq
50
51 // Use this group for development
52 0020 04000081 _undf: .word 0x81000004 // undefined
53 0024 08000081 _swi: .word 0x81000008 // SWI
54 0028 0C000081 _pabt: .word 0x8100000C // program abort
55 002c 10000081 _dabt: .word 0x81000010 // data abort
56 0030 18000081 _irq: .word 0x81000018 // IRQ
57 0034 1C000081 _fiq: .word 0x8100001C // FIQ
58
59 0038 FEFFFFEA __undf: b . // undefined
60 003c FEFFFFEA __swi: b . // SWI
61 0040 FEFFFFEA __pabt: b . // program abort
62 0044 FEFFFFEA __dabt: b . // data abort
63 0048 FEFFFFEA __irq: b . // IRQ
64 004c FEFFFFEA __fiq: b . // FIQ
65
67 .endfunc
68
69
70 // Setup the operating mode & stack.
71 // ---------------------------------
72 .global _start, start, _mainCRTStartup
73 .func _start
74
75 _swiirq:
76 swiirq:
77 0050 88A09FE5 ldr r10,=swiirqp
78 0054 0FE0A0E1 mov lr,pc
79 0058 1AFF2FE1 bx r10 // enter main()
80
81 _start:
82 start:
83 _mainCRTStartup:
84
85 // Initialize Interrupt System
86 // - Set stack location for each mode
87 // - Leave in System Mode with Interrupts Disabled
88 // -----------------------------------------------
89 005c 80009FE5 ldr r0,=_stack
90 0060 DBF021E3 msr CPSR_c,#MODE_UND|I_BIT|F_BIT // Undefined Instruction Mode
91 0064 00D0A0E1 mov sp,r0
92 0068 040040E2 sub r0,r0,#UND_STACK_SIZE
93 006c D7F021E3 msr CPSR_c,#MODE_ABT|I_BIT|F_BIT // Abort Mode
94 0070 00D0A0E1 mov sp,r0
95 0074 040040E2 sub r0,r0,#ABT_STACK_SIZE
96 0078 D1F021E3 msr CPSR_c,#MODE_FIQ|I_BIT|F_BIT // FIQ Mode
97 007c 00D0A0E1 mov sp,r0
98 0080 040040E2 sub r0,r0,#FIQ_STACK_SIZE
99 0084 D2F021E3 msr CPSR_c,#MODE_IRQ|I_BIT|F_BIT // IRQ Mode
100 0088 00D0A0E1 mov sp,r0
101 008c 800040E2 sub r0,r0,#IRQ_STACK_SIZE
102 0090 D3F021E3 msr CPSR_c,#MODE_SVC|I_BIT|F_BIT // Supervisor Mode
103 0094 00D0A0E1 mov sp,r0
104 0098 040040E2 sub r0,r0,#SVC_STACK_SIZE
105 009c DFF021E3 msr CPSR_c,#MODE_SYS|I_BIT|F_BIT // System Mode
106 00a0 00D0A0E1 mov sp,r0
107
108 // Copy initialized data to its execution address in RAM
109 // -----------------------------------------------------
110 #ifdef ROM_RUN
111 ldr r1,=_etext // -> ROM data start
112 ldr r2,=_data // -> data start
113 ldr r3,=_edata // -> end of data
114 1: cmp r2,r3 // check if data to move
115 ldrlo r0,[r1],#4 // copy it
116 strlo r0,[r2],#4
117 blo 1b // loop until done
118 #endif
119 // Clear .bss
120 // ----------
121 00a4 0000A0E3 mov r0,#0 // get a zero
122 00a8 38109FE5 ldr r1,=__bss_start // -> bss start
123 00ac 38209FE5 ldr r2,=__bss_end__ // -> bss end
124 00b0 020051E1 2: cmp r1,r2 // check if data to clear
125 00b4 04008134 strlo r0,[r1],#4 // clear 4 bytes
126 00b8 FCFFFF3A blo 2b // loop until done
127
128 // Call main program: main(0)
129 // --------------------------
130 00bc 0000A0E3 mov r0,#0 // no arguments (argc = 0)
131 00c0 0010A0E1 mov r1,r0
132 00c4 0020A0E1 mov r2,r0
133 00c8 00B0A0E1 mov fp,r0 // null frame pointer
134 00cc 0070A0E1 mov r7,r0 // null frame pointer for thumb
135 00d0 18A09FE5 ldr r10,=main
136 00d4 0FE0A0E1 mov lr,pc
137 00d8 1AFF2FE1 bx r10 // enter main()
138
140 .endfunc
141
142 .global _reset, reset, exit, abort
143 .func _reset
144 _reset:
145 reset:
146 exit:
147 abort:
148 #if 0
149 // Disable interrupts, then force a hardware reset by driving P23 low
150 // -------------------------------------------------------------------
151 mrs r0,cpsr // get PSR
152 orr r0,r0,#I_BIT|F_BIT // disable IRQ and FIQ
153 msr cpsr,r0 // set up status register
154
155 ldr r1,=(PS_BASE) // PS Base Address
156 ldr r0,=(PS_PIO) // PIO Module
157 str r0,[r1,#PS_PCER_OFF] // enable its clock
158 ldr r1,=(PIO_BASE) // PIO Base Address
159 ldr r0,=(1<<23) // P23
160 str r0,[r1,#PIO_PER_OFF] // make sure pin is contolled by PIO
161 str r0,[r1,#PIO_CODR_OFF] // set the pin low
162 str r0,[r1,#PIO_OER_OFF] // make it an output
163 #endif
164 00dc FEFFFFEA b . // loop until reset
165
167 .endfunc
168
169 00e0 00000000 .end
169 00000000
169 00000000
169 00000000
169 00000000
DEFINED SYMBOLS
*ABS*:00000000 build/lpc210x_crt0.S
build/lpc210x_crt0.S:12 *ABS*:00000004 UND_STACK_SIZE
build/lpc210x_crt0.S:13 *ABS*:00000004 ABT_STACK_SIZE
build/lpc210x_crt0.S:14 *ABS*:00000004 FIQ_STACK_SIZE
build/lpc210x_crt0.S:15 *ABS*:00000080 IRQ_STACK_SIZE
build/lpc210x_crt0.S:16 *ABS*:00000004 SVC_STACK_SIZE
build/lpc210x_crt0.S:19 *ABS*:00000010 MODE_USR
build/lpc210x_crt0.S:20 *ABS*:00000011 MODE_FIQ
build/lpc210x_crt0.S:21 *ABS*:00000012 MODE_IRQ
build/lpc210x_crt0.S:22 *ABS*:00000013 MODE_SVC
build/lpc210x_crt0.S:23 *ABS*:00000017 MODE_ABT
build/lpc210x_crt0.S:24 *ABS*:0000001b MODE_UND
build/lpc210x_crt0.S:25 *ABS*:0000001f MODE_SYS
build/lpc210x_crt0.S:27 *ABS*:00000080 I_BIT
build/lpc210x_crt0.S:28 *ABS*:00000040 F_BIT
build/lpc210x_crt0.S:31 .text:00000000 $a
build/lpc210x_crt0.S:37 .text:00000000 _boot
build/lpc210x_crt0.S:41 .text:00000000 Vectors
build/lpc210x_crt0.S:81 .text:0000005c _start
build/lpc210x_crt0.S:52 .text:00000020 _undf
build/lpc210x_crt0.S:53 .text:00000024 _swi
build/lpc210x_crt0.S:54 .text:00000028 _pabt
build/lpc210x_crt0.S:55 .text:0000002c _dabt
build/lpc210x_crt0.S:57 .text:00000034 _fiq
build/lpc210x_crt0.S:52 .text:00000020 $d
build/lpc210x_crt0.S:56 .text:00000030 _irq
build/lpc210x_crt0.S:59 .text:00000038 __undf
build/lpc210x_crt0.S:59 .text:00000038 $a
build/lpc210x_crt0.S:60 .text:0000003c __swi
build/lpc210x_crt0.S:61 .text:00000040 __pabt
build/lpc210x_crt0.S:62 .text:00000044 __dabt
build/lpc210x_crt0.S:63 .text:00000048 __irq
build/lpc210x_crt0.S:64 .text:0000004c __fiq
build/lpc210x_crt0.S:82 .text:0000005c start
build/lpc210x_crt0.S:83 .text:0000005c _mainCRTStartup
build/lpc210x_crt0.S:75 .text:00000050 _swiirq
build/lpc210x_crt0.S:76 .text:00000050 swiirq
build/lpc210x_crt0.S:144 .text:000000dc _reset
build/lpc210x_crt0.S:145 .text:000000dc reset
build/lpc210x_crt0.S:146 .text:000000dc exit
build/lpc210x_crt0.S:147 .text:000000dc abort
build/lpc210x_crt0.S:169 .text:000000e0 $d
UNDEFINED SYMBOLS
main
swiirqp
_etext
_data
_edata
__bss_start
__bss_end__
_stack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -