📄 init.lst
字号:
ARM Macro Assembler Page 1
1 00000000 ;*******************************************************
***********************
2 00000000 ;
3 00000000 ; STARTUP CODE
4 00000000 ; LPC2378
5 00000000 ; KEIL's uVision3
6 00000000 ; (RealView Microprocessor Developer K
it)
7 00000000 ;
8 00000000 ; Filename : init.s
9 00000000 ;*******************************************************
***********************
10 00000000
11 00000000 PRESERVE8
12 00000000 AREA INIT, CODE, READONLY ; Name thi
s block of code
;
13 00000000 ARM
14 00000000
15 00000000 ;*******************************************************
***********************
16 00000000 ; IMPORTS
17 00000000 ;*******************************************************
***********************
18 00000000
19 00000000 IMPORT __main
20 00000000 IMPORT ||Image$$ARM_LIB_STACK$$ZI$$Lim
it||
; Import stack limi
t from scatter-load
ing file
;
21 00000000
22 00000000 ;*******************************************************
***********************
23 00000000 ; EXPORTS
24 00000000 ;*******************************************************
***********************
25 00000000
26 00000000 EXPORT ResetHndlr
27 00000000
28 00000000 ;*******************************************************
***********************
29 00000000 ; DEFINITIONS
30 00000000 ;*******************************************************
***********************
31 00000000
32 00000000 0000001F
MODE_BITS
EQU 0x1F ; Bit mask for mode
bits in CPSR
33 00000000 00000010
USR_MODE
EQU 0x10 ; User mode
34 00000000 00000011
FIQ_MODE
EQU 0x11 ; Fast Interrupt Re
quest mode
ARM Macro Assembler Page 2
35 00000000 00000012
IRQ_MODE
EQU 0x12 ; Interrupt Request
mode
36 00000000 00000013
SVC_MODE
EQU 0x13 ; Supervisor mode
37 00000000 00000017
ABT_MODE
EQU 0x17 ; Abort mode
38 00000000 0000001B
UND_MODE
EQU 0x1B ; Undefined Instruc
tion mode
39 00000000 0000001F
SYS_MODE
EQU 0x1F ; System mode
40 00000000
41 00000000 00000080
I_BIT EQU 0x80
42 00000000 00000040
F_BIT EQU 0x40
43 00000000
44 00000000 ; Define stack sizes
;
45 00000000 00000400
IRQ_STK_SIZE
EQU 0x00000400
46 00000000 00000100
FIQ_STK_SIZE
EQU 0x00000100
47 00000000 00000400
SVC_STK_SIZE
EQU 0x00000400
48 00000000 00000080
ABT_STK_SIZE
EQU 0x00000080
49 00000000 00000080
UND_STK_SIZE
EQU 0x00000080
50 00000000 00000100
SYS_STK_SIZE
EQU 0x00000100
51 00000000
52 00000000 E01FC040
MEMMAP EQU 0xE01FC040
53 00000000
54 00000000 ; Define stack pointers
;
55 00000000
56 00000000 ;*******************************************************
***********************
57 00000000 ; PERFORM ROM/RAM REMAPPING
58 00000000 ;*******************************************************
***********************
59 00000000
60 00000000 ENTRY
61 00000000 ResetHndlr
62 00000000 ; If interrupt vectors in RAM, then perform remap
ARM Macro Assembler Page 3
;
63 00000000 IF :DEF: REMAP
69 ENDIF
70 00000000
71 00000000 ;*******************************************************
***********************
72 00000000 ; SETUP STACK POINTERS
73 00000000 ;*******************************************************
***********************
74 00000000
75 00000000 E59F107C ldr r1, =||Image$$ARM_LIB_STACK$$ZI
$$Limit||
76 00000004
77 00000004 E10F0000 mrs r0,cpsr ; Original PSR valu
e
;
78 00000008 E3C0001F bic r0,r0,#MODE_BITS ; Clear the mo
de bits
;
79 0000000C E3800012 orr r0,r0,#IRQ_MODE ; Set IRQ mode
bits
;
80 00000010 E121F000 msr cpsr_c,r0 ; Change the mode
;
81 00000014 E1A0D001 mov sp, r1
82 00000018 E2411B01 sub r1, r1, #IRQ_STK_SIZE
83 0000001C
84 0000001C E10F0000 mrs r0,cpsr ; Original PSR valu
e
;
85 00000020 E3C0001F bic r0,r0,#MODE_BITS ; Clear the mo
de bits
;
86 00000024 E3800017 orr r0,r0,#ABT_MODE ; Set IRQ mode
bits
;
87 00000028 E121F000 msr cpsr_c,r0 ; Change the mode
;
88 0000002C E1A0D001 mov sp, r1
89 00000030 E2411080 sub r1, r1, #ABT_STK_SIZE
90 00000034
91 00000034 E10F0000 mrs r0,cpsr ; Original PSR valu
e
;
92 00000038 E3C0001F bic r0,r0,#MODE_BITS ; Clear the mo
de bits
;
ARM Macro Assembler Page 4
93 0000003C E380001B orr r0,r0,#UND_MODE ; Set IRQ mode
bits
;
94 00000040 E121F000 msr cpsr_c,r0 ; Change the mode
;
95 00000044 E1A0D001 mov sp, r1
96 00000048 E2411080 sub r1, r1, #UND_STK_SIZE
97 0000004C
98 0000004C E10F0000 mrs r0,cpsr ; Original PSR valu
e
;
99 00000050 E3C0001F bic r0,r0,#MODE_BITS ; Clear the mo
de bits
;
100 00000054 E3800011 orr r0,r0,#FIQ_MODE ; Set IRQ mode
bits
;
101 00000058 E121F000 msr cpsr_c,r0 ; Change the mode
;
102 0000005C E1A0D001 mov sp, r1
103 00000060 E2411C01 sub r1, r1, #FIQ_STK_SIZE
104 00000064
105 00000064 E10F0000 mrs r0,cpsr ; Original PSR valu
e
;
106 00000068 E3C0001F bic r0,r0,#MODE_BITS ; Clear the mo
de bits
;
107 0000006C E3800013 orr r0,r0,#SVC_MODE ; Set IRQ mode
bits
;
108 00000070 E121F000 msr cpsr_c,r0 ; Change the mode
;
109 00000074 E1A0D001 mov sp, r1
110 00000078
111 00000078 E321F053 msr cpsr_c, #SVC_MODE:OR:F_BIT ; En
able interrupts, if
required
;
112 0000007C
113 0000007C ;*******************************************************
***********************
114 0000007C ; MOVE TO MAIN
115 0000007C ;*******************************************************
***********************
ARM Macro Assembler Page 5
116 0000007C E59F0004 ldr r0, =__main
117 00000080 E12FFF10 bx r0 ; Save this in regi
ster for possible l
ong jump
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -