📄 main.lst
字号:
00000014 E3A01801 MOV R1,#0x10000
00000018 E5100000 LDR R0,=0xFFFFF458
0000001C E5801000 STR R1,[R0,#0x0]
44: }
00000020 L_2:
00000020 E8BD0003 LDMIA R13!,{R0-R1}
00000024 E25EF004 SUBS R15,R14,#0x0004
00000028 ENDP ; 'IRQ_Handler?A'
*** CODE SEGMENT '?PR?FIQ_Handler?A?main':
50: if(FIQSTA & EXTERNAL_IRQ1) //读取FIQ中断状态,判断FIQ中断源
ARM COMPILER V2.50a, main 22/04/06 16:43:25 PAGE 4
00000000 E5108000 LDR R0,=0xFFFF0100
00000004 E5988000 LDR R8,[R8,#0x0]
00000008 E3180701 TST R8,#0x40000
0000000C 0A000002 BEQ L_4 ; Targ=0x1C
52: ON_LED5();
00000010 E3A09802 MOV R9,#0x20000
00000014 E5108000 LDR R0,=0xFFFFF458
00000018 E5889000 STR R9,[R8,#0x0]
55: }
0000001C L_4:
0000001C E25EF004 SUBS R15,R14,#0x0004
00000020 ENDP ; 'FIQ_Handler?A'
*** CODE SEGMENT '?PR?SWI_0?A?main':
61: ON_LED6();
00000000 E3A01701 MOV R1,#0x40000
00000004 E5100000 LDR R0,=0xFFFFF458
00000008 E5801000 STR R1,[R0,#0x0]
62: }
0000000C E12FFF1E BX R14
00000010 ENDP ; 'SWI_0?A'
*** CODE SEGMENT '?PR?SWI_1?A?main':
69: ON_LED7();
00000000 E3A01702 MOV R1,#0x80000
00000004 E5100000 LDR R0,=0xFFFFF458
00000008 E5801000 STR R1,[R0,#0x0]
70: }
0000000C E12FFF1E BX R14
00000010 ENDP ; 'SWI_1?A'
*** CODE SEGMENT '?PR?SWI_2?A?main':
74: uint32 SWI_2(uint32 a,uint32 b) __swi(2) //2号软中断,实现两个整数相加
00000000 E1A03001 MOV R3,R1 ; b
00000004 ---- Variable 'b' assigned to Register 'R3' ----
00000004 E1A02000 MOV R2,R0 ; a
00000008 ---- Variable 'a' assigned to Register 'R2' ----
76: return a+b;
00000008 E1A01003 MOV R1,R3 ; b
0000000C E1A00002 MOV R0,R2 ; a
00000010 E0800001 ADD R0,R0,R1 ; a
77: }
00000014 E12FFF1E BX R14
00000018 ENDP ; 'SWI_2?A'
*** CODE SEGMENT '?PR?main?main':
81: void main(void)
00000000 E92D4000 STMDB R13!,{LR}
84: sys_clk_init();
00000004 EBFFFFFD BL sys_clk_init?A ; Targ=0x0
86: EN_LED4(); //使能LED
00000008 E5100000 LDR R0,=0xFFFFF40C
0000000C E5901000 LDR R1,[R0,#0x0]
00000010 E3C1100F BIC R1,R1,#0x000F
00000014 E5801000 STR R1,[R0,#0x0]
00000018 E5100000 LDR R0,=0xFFFFF450
0000001C E5901000 LDR R1,[R0,#0x0]
00000020 E3811401 ORR R1,R1,#0x1000000
00000024 E5801000 STR R1,[R0,#0x0]
87: EN_LED5();
00000028 E5100000 LDR R0,=0xFFFFF40C
0000002C E5901000 LDR R1,[R0,#0x0]
00000030 E3C110F0 BIC R1,R1,#0x00F0
00000034 E5801000 STR R1,[R0,#0x0]
00000038 E5100000 LDR R0,=0xFFFFF450
0000003C E5901000 LDR R1,[R0,#0x0]
00000040 E3811402 ORR R1,R1,#0x2000000
00000044 E5801000 STR R1,[R0,#0x0]
88: EN_LED6();
00000048 E5100000 LDR R0,=0xFFFFF40C
ARM COMPILER V2.50a, main 22/04/06 16:43:25 PAGE 5
0000004C E5901000 LDR R1,[R0,#0x0]
00000050 E3C11C0F BIC R1,R1,#0x0F00
00000054 E5801000 STR R1,[R0,#0x0]
00000058 E5100000 LDR R0,=0xFFFFF450
0000005C E5901000 LDR R1,[R0,#0x0]
00000060 E3811301 ORR R1,R1,#0x4000000
00000064 E5801000 STR R1,[R0,#0x0]
89: EN_LED7();
00000068 E5100000 LDR R0,=0xFFFFF40C
0000006C E5901000 LDR R1,[R0,#0x0]
00000070 E3C11A0F BIC R1,R1,#0xF000
00000074 E5801000 STR R1,[R0,#0x0]
00000078 E5100000 LDR R0,=0xFFFFF450
0000007C E5901000 LDR R1,[R0,#0x0]
00000080 E3811302 ORR R1,R1,#0x8000000
00000084 E5801000 STR R1,[R0,#0x0]
90: EN_LED8();
00000088 E5100000 LDR R0,=0xFFFFF408
0000008C E5901000 LDR R1,[R0,#0x0]
00000090 E3C1180F BIC R1,R1,#0xF0000
00000094 E5801000 STR R1,[R0,#0x0]
00000098 E5100000 LDR R0,=0xFFFFF440
0000009C E5901000 LDR R1,[R0,#0x0]
000000A0 E3811201 ORR R1,R1,#0x10000000
000000A4 E5801000 STR R1,[R0,#0x0]
92: OFF_LED4(); //初始化关掉LED
000000A8 E3A01801 MOV R1,#0x10000
000000AC E5100000 LDR R0,=0xFFFFF454
000000B0 E5801000 STR R1,[R0,#0x0]
93: OFF_LED5();
000000B4 E3A01802 MOV R1,#0x20000
000000B8 E5100000 LDR R0,=0xFFFFF454
000000BC E5801000 STR R1,[R0,#0x0]
94: OFF_LED6();
000000C0 E3A01701 MOV R1,#0x40000
000000C4 E5100000 LDR R0,=0xFFFFF454
000000C8 E5801000 STR R1,[R0,#0x0]
95: OFF_LED7();
000000CC E3A01702 MOV R1,#0x80000
000000D0 E5100000 LDR R0,=0xFFFFF454
000000D4 E5801000 STR R1,[R0,#0x0]
96: OFF_LED8();
000000D8 E3A01601 MOV R1,#0x100000
000000DC E5100000 LDR R0,=0xFFFFF444
000000E0 E5801000 STR R1,[R0,#0x0]
98: SWI_0(); //用软中断的方法来打开LED6
000000E4 EF000000 SWI 0x0 ; SWI_0?A
99: SWI_1(); //用软中断的方法来打开LED7
000000E8 EF000001 SWI 0x1 ; SWI_1?A
100: if(SWI_2(100,200)==300) //调用软中断,计算100加200,如果结果等于300,则点亮LED8
000000EC E3A00064 MOV R0,#0x64
000000F0 E3A010C8 MOV R1,#0xC8
000000F4 EF000002 SWI 0x2 ; SWI_2?A
000000F8 E3500F4B CMP R0,#0x012C ; SWI_2?A
000000FC 1A000002 BNE L_6 ; Targ=0x10C
102: ON_LED8();
00000100 E3A01601 MOV R1,#0x100000
00000104 E5100000 LDR R0,=0xFFFFF448
00000108 E5801000 STR R1,[R0,#0x0]
103: }
0000010C L_6:
105: IRQEN |= EXTERNAL_IRQ0; //将外部中断0配置成IRQ中断(按键S4)
0000010C E5100000 LDR R0,=0xFFFF0008
00000110 E5901000 LDR R1,[R0,#0x0]
00000114 E3811902 ORR R1,R1,#0x8000
00000118 E5801000 STR R1,[R0,#0x0]
ARM COMPILER V2.50a, main 22/04/06 16:43:25 PAGE 6
106: FIQEN |= EXTERNAL_IRQ1; //将外部中断1配置成FIQ中断(按键S3)
0000011C E5100000 LDR R0,=0xFFFF0108
00000120 E5901000 LDR R1,[R0,#0x0]
00000124 E3811701 ORR R1,R1,#0x40000
00000128 E5801000 STR R1,[R0,#0x0]
108: while(1) //由于是高电平触发中断,所以要同时按住S4、S3键才能运行主程序,即熄灭LED
0000012C L_9:
110: OFF_LED4(); //当先放开S4,后放开S3时,FIQ可中断IRQ,从而能点亮LED5。相反,如果先放开
0000012C E3A01801 MOV R1,#0x10000
00000130 E5100000 LDR R0,=0xFFFFF454
00000134 E5801000 STR R1,[R0,#0x0]
111: OFF_LED5(); //S3,后放开S4,则IRQ不能中断FIQ,所以不能点亮LED4。
00000138 E3A01802 MOV R1,#0x20000
0000013C E5100000 LDR R0,=0xFFFFF454
00000140 E5801000 STR R1,[R0,#0x0]
112: }
00000144 EAFFFFF8 B L_9 ; Targ=0x12C
113: }
00000148 E8BD0008 LDMIA R13!,{R3}
0000014C E12FFF13 BX R3
00000150 ENDP ; 'main'
Module Information Static
----------------------------------
code size = ------
data size = 4
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -