📄 timerdemo.lst
字号:
0000000C C6 DB 0xC6
0000000D A1 DB 0xA1
0000000E 86 DB 0x86
0000000F 8E DB 0x8E
00000010 END_INIT
*** DATA SEGMENT '?DT0?TIMERDEMO':
00000000 Count:
00000000 BEGIN_INIT
00000000 00000000 DD 0x0
00000004 END_INIT
00000004 val:
00000004 BEGIN_INIT
00000004 00 DB 0x0
00000005 END_INIT
*** CODE SEGMENT '?PR?IRQ_Timer0?A?TIMERDEMO':
131: void IRQ_Timer0 (void) __irq
00000000 E92D5F0F STMDB R13!,{R0-R3,R8-R12,LR}
135: if (Count < 2) {
00000004 E5100000 LDR R0,=Count ; Count
00000008 E5901000 LDR R1,[R0,#0x0] ; Count
0000000C E3510002 CMP R1,#0x0002
00000010 2A000003 BCS L_1 ; Targ=0x24
136: Count ++;
00000014 E5100000 LDR R0,=Count ; Count
00000018 E2811001 ADD R1,R1,#0x0001
0000001C E5801000 STR R1,[R0,#0x0] ; Count
137: }
00000020 EA000015 B L_2 ; Targ=0x7C
00000024 L_1:
139: Count = 0;
00000024 E3A01000 MOV R1,#0x0
00000028 E5100000 LDR R0,=Count ; Count
0000002C E5801000 STR R1,[R0,#0x0] ; Count
ARM COMPILER V2.42, TIMERDEMO 12/01/06 09:38:31 PAGE 7
140: IO1PIN ^= (1 << LED1)
00000030 E5100000 LDR R0,=0xE0028010
00000034 E5901000 LDR R1,[R0,#0x0]
00000038 E22117FF EOR R1,R1,#0x3FC0000
0000003C E5801000 STR R1,[R0,#0x0]
148: LedDisplay(LedTab[val]);
00000040 E5100000 LDR R0,=val ; val
00000044 E5D00000 LDRB R0,[R0,#0x0] ; val
00000048 E1A01000 MOV R1,R0
0000004C E5100000 LDR R0,=LedTab ; LedTab
00000050 E7D00001 LDRB R0,[R0,+R1]
00000054 EBFFFFE9 BL LedDisplay?A ; Targ=0x0
149: val ++;
00000058 E5100000 LDR R0,=val ; val
0000005C E5D01000 LDRB R1,[R0,#0x0] ; val
00000060 E2811001 ADD R1,R1,#0x0001
00000064 E5C01000 STRB R1,[R0,#0x0] ; val
150: val &= 0x0f;
00000068 E5100000 LDR R0,=val ; val
0000006C E5D01000 LDRB R1,[R0,#0x0] ; val
00000070 E201100F AND R1,R1,#0x000F
00000074 E5100000 LDR R0,=val ; val
00000078 E5C01000 STRB R1,[R0,#0x0] ; val
151: }
0000007C L_2:
152: IO0PIN ^= (1 << BEEP);//BEEP蜂鸣
0000007C E5100000 LDR R0,=0xE0028000
00000080 E5901000 LDR R1,[R0,#0x0]
00000084 E2211080 EOR R1,R1,#0x0080
00000088 E5801000 STR R1,[R0,#0x0]
153: T0IR = 0x01; /* 清除中断标志 */
0000008C E3A01001 MOV R1,#0x1
00000090 E5100000 LDR R0,=0xE0004000
00000094 E5801000 STR R1,[R0,#0x0]
154: VICVectAddr = 0x00; /* 通知VIC中断处理结束 */
00000098 E3A01000 MOV R1,#0x0
0000009C E5100000 LDR R0,=0xFFFFF030
000000A0 E5801000 STR R1,[R0,#0x0]
155: }
000000A4 E8BD5F0F LDMIA R13!,{R0-R3,R8-R12,LR}
000000A8 E25EF004 SUBS R15,R14,#0x0004
000000AC ENDP ; 'IRQ_Timer0?A'
*** CODE SEGMENT '?PR?VicIntSetup?T?TIMERDEMO':
161: VICIntSelect = 0x00; /* 所有中断通道设置为IRQ中断 */
00000000 2100 MOV R1,#0x0
00000002 4800 LDR R0,=0xFFFFF00C
00000004 6001 STR R1,[R0,#0x0]
162: VICVectCntl0 = 0x20 | 0x04; /* 设置定时器0中断通道分配最高优先级 */
00000006 2124 MOV R1,#0x24
00000008 4800 LDR R0,=0xFFFFF200
0000000A 6001 STR R1,[R0,#0x0]
163: VICVectAddr0 = (uint32)IRQ_Timer0; /* 设置中断服务程序地址 */
0000000C 4900 LDR R1,=IRQ_Timer0?A ; IRQ_Timer0?A
0000000E 4800 LDR R0,=0xFFFFF100
00000010 6001 STR R1,[R0,#0x0]
164: VICIntEnable = 1 << 0x04; /* 使能定时器0中断 */
00000012 2110 MOV R1,#0x10
00000014 4800 LDR R0,=0xFFFFF010
00000016 6001 STR R1,[R0,#0x0]
165: }
00000018 4770 BX R14
0000001A ENDP ; 'VicIntSetup?T'
*** CODE SEGMENT '?PR?PortInit?T?TIMERDEMO':
169: PINSEL0 = 0x00000000; // 设置管脚连接GPIO
00000000 2100 MOV R1,#0x0
00000002 4800 LDR R0,=0xE002C000
ARM COMPILER V2.42, TIMERDEMO 12/01/06 09:38:31 PAGE 8
00000004 6001 STR R1,[R0,#0x0]
170: PINSEL1 = 0x00000000; // 设置管脚连接GPIO
00000006 4800 LDR R0,=0xE002C004
00000008 6001 STR R1,[R0,#0x0]
171: IO0DIR = 0x00000000; // 设置P0口为输入
0000000A 4800 LDR R0,=0xE0028008
0000000C 6001 STR R1,[R0,#0x0]
172: IO1DIR = 0x00000000; // 设置P1口为输入
0000000E 4800 LDR R0,=0xE0028018
00000010 6001 STR R1,[R0,#0x0]
188: IO0DIR |= (1 << BEEP); // 设置BEEP控制口为输出
00000012 2280 MOV R2,#0x80
00000014 4800 LDR R0,=0xE0028008
00000016 6801 LDR R1,[R0,#0x0]
00000018 4311 ORR R1,R2
0000001A 6001 STR R1,[R0,#0x0]
190: IO0DIR |= (1 << RCLK); // 设置RCLK控制口为输出
0000001C 4800 LDR R2,=0x20000000
0000001E 4800 LDR R0,=0xE0028008
00000020 6801 LDR R1,[R0,#0x0]
00000022 4311 ORR R1,R2
00000024 6001 STR R1,[R0,#0x0]
191: IO0DIR |= (1 << SCK0); // 设置SCK0控制口为输出
00000026 2210 MOV R2,#0x10
00000028 4800 LDR R0,=0xE0028008
0000002A 6801 LDR R1,[R0,#0x0]
0000002C 4311 ORR R1,R2
0000002E 6001 STR R1,[R0,#0x0]
192: IO0DIR |= (1 << MOSI0); // 设置MOSI0控制口为输出
00000030 2240 MOV R2,#0x40
00000032 4800 LDR R0,=0xE0028008
00000034 6801 LDR R1,[R0,#0x0]
00000036 4311 ORR R1,R2
00000038 6001 STR R1,[R0,#0x0]
194: IO1DIR |= (1 << LED1) // 设置LED1为输出
0000003A 4800 LDR R2,=0x3FC0000
0000003C 4800 LDR R0,=0xE0028018
0000003E 6801 LDR R1,[R0,#0x0]
00000040 4311 ORR R1,R2
00000042 6001 STR R1,[R0,#0x0]
203: IO0PIN = (0 << RCLK)
00000044 21D0 MOV R1,#0xD0
00000046 4800 LDR R0,=0xE0028000
00000048 6001 STR R1,[R0,#0x0]
208: IO1PIN = (1 << LED1)
0000004A 4800 LDR R1,=0x1540000
0000004C 4800 LDR R0,=0xE0028010
0000004E 6001 STR R1,[R0,#0x0]
212: }
00000050 4770 BX R14
00000052 ENDP ; 'PortInit?T'
*** CODE SEGMENT '?PR?Timer0Init?T?TIMERDEMO':
217: T0TC = 0; /* 定时器设置为0 */
00000000 2100 MOV R1,#0x0
00000002 4800 LDR R0,=0xE0004008
00000004 6001 STR R1,[R0,#0x0]
218: T0PR = 0; /* 时钟不分频 */
00000006 4800 LDR R0,=0xE000400C
00000008 6001 STR R1,[R0,#0x0]
219: T0MCR = 0x03; /* 设置T0MR0匹配后复位T0TC,并产生中断标志 */
0000000A 2103 MOV R1,#0x3
0000000C 4800 LDR R0,=0xE0004014
0000000E 6001 STR R1,[R0,#0x0]
220: T0MR0 = Fpclk / 2; /* 0.5秒钟定时 */
00000010 4800 LDR R1,=0x546000
00000012 4800 LDR R0,=0xE0004018
ARM COMPILER V2.42, TIMERDEMO 12/01/06 09:38:31 PAGE 9
00000014 6001 STR R1,[R0,#0x0]
221: T0TCR = 0x01; /* 启动定时器 */
00000016 2101 MOV R1,#0x1
00000018 4800 LDR R0,=0xE0004004
0000001A 6001 STR R1,[R0,#0x0]
222: }
0000001C 4770 BX R14
0000001E ENDP ; 'Timer0Init?T'
*** CODE SEGMENT '?PR?LedDisplay?T?TIMERDEMO':
224: void LedDisplay(unsigned char data)
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; data
00000004 ---- Variable 'data' assigned to Register 'R1' ----
226: MSPI_SendData(data);
00000004 1C08 MOV R0,R1 ; data
00000006 0600 LSL R0,R0,#0x18 ; data
00000008 0E00 LSR R0,R0,#0x18
0000000A F7FF BL MSPI_SendData?T ; T=0x0001 (1)
0000000C FFF9 BL MSPI_SendData?T ; T=0x0001 (2)
227: IO0SET = (1 << RCLK);
0000000E 4800 LDR R1,=0x20000000
00000010 4800 LDR R0,=0xE0028004
00000012 6001 STR R1,[R0,#0x0]
228: IO0CLR = (1 << RCLK);
00000014 4800 LDR R0,=0xE002800C
00000016 6001 STR R1,[R0,#0x0]
229: }
00000018 BC08 POP {R3}
0000001A 4718 BX R3
0000001C ENDP ; 'LedDisplay?T'
*** CODE SEGMENT '?PR?MSPI_SendData?T?TIMERDEMO':
231: void MSPI_SendData(unsigned char data)
00000000 B410 PUSH {R4}
00000002 ---- Variable 'data' assigned to Register 'R0' ----
232: {
00000002 ; SCOPE-START
234: for (i = 0; i < 8; i ++) {
00000002 2100 MOV R1,#0x0
00000004 ---- Variable 'i' assigned to Register 'R1' ----
00000004 E017 B L_5 ; T=0x00000036
00000006 L_6:
235: IO0CLR = (1 << SCK0);
00000006 2310 MOV R3,#0x10
00000008 4800 LDR R2,=0xE002800C
0000000A 6013 STR R3,[R2,#0x0]
236: if (data & 0x80) {
0000000C 1C02 MOV R2,R0 ; data
0000000E 0612 LSL R2,R2,#0x18 ; data
00000010 0E12 LSR R2,R2,#0x18
00000012 2480 MOV R4,#0x80
00000014 4222 TST R2,R4
00000016 D003 BEQ L_8 ; T=0x00000020
237: IO0SET = (1 << MOSI0);
00000018 2440 MOV R4,#0x40
0000001A 4800 LDR R2,=0xE0028004
0000001C 6014 STR R4,[R2,#0x0]
238: }
0000001E E002 B L_9 ; T=0x00000026
00000020 L_8:
240: IO0CLR = (1 << MOSI0);
00000020 2440 MOV R4,#0x40
00000022 4800 LDR R2,=0xE002800C
00000024 6014 STR R4,[R2,#0x0]
241: }
00000026 L_9:
242: data <<= 1;
ARM COMPILER V2.42, TIMERDEMO 12/01/06 09:38:31 PAGE 10
00000026 0040 LSL R0,R0,#0x1 ; data
00000028 0600 LSL R0,R0,#0x18
0000002A 0E00 LSR R0,R0,#0x18
243: IO0SET = (1 << SCK0);
0000002C 4800 LDR R2,=0xE0028004
0000002E 6013 STR R3,[R2,#0x0]
244: }
00000030 3101 ADD R1,#0x1
00000032 0609 LSL R1,R1,#0x18
00000034 0E09 LSR R1,R1,#0x18
00000036 L_5:
00000036 1C0A MOV R2,R1 ; i
00000038 0612 LSL R2,R2,#0x18 ; i
0000003A 0E12 LSR R2,R2,#0x18
0000003C 2A08 CMP R2,#0x8
0000003E DBE2 BLT L_6 ; T=0x00000006
00000040 ; SCOPE-END
245: }
00000040 BC10 POP {R4}
00000042 4770 BX R14
00000044 ENDP ; 'MSPI_SendData?T'
*** CODE SEGMENT '?PR?DelayNS?T?TIMERDEMO':
255: void DelayNS (uint32 dly)
00000000 ---- Variable 'dly' assigned to Register 'R0' ----
256: {
00000000 ; SCOPE-START
259: for ( ; dly>0; dly--)
00000000 E006 B L_12 ; T=0x00000010
260: for (i=0; i<50000; i++);
00000002 L_19:
00000002 2100 MOV R1,#0x0
00000004 ---- Variable 'i' assigned to Register 'R1' ----
00000004 L_15:
00000004 3101 ADD R1,#0x1
00000006 1C0A MOV R2,R1 ; i
00000008 4800 LDR R3,=0xC350
0000000A 429A CMP R2,R3 ; i
0000000C D3FA BCC L_15 ; T=0x00000004
0000000E 3801 SUB R0,#0x1
00000010 L_12:
00000010 1C01 MOV R1,R0 ; dly
00000012 2900 CMP R1,#0x0 ; dly
00000014 D8F5 BHI L_19 ; T=0x00000002
00000016 ; SCOPE-END
261: }
00000016 4770 BX R14
00000018 ENDP ; 'DelayNS?T'
*** CODE SEGMENT '?PR?main?TIMERDEMO':
270: int main (void)
00000000 B500 PUSH {LR}
272: PortInit();
00000002 F7FF BL PortInit?T ; T=0x0001 (1)
00000004 FFFD BL PortInit?T ; T=0x0001 (2)
273: Timer0Init();
00000006 F7FF BL Timer0Init?T ; T=0x0001 (1)
00000008 FFFB BL Timer0Init?T ; T=0x0001 (2)
274: VicIntSetup();
0000000A F7FF BL VicIntSetup?T ; T=0x0001 (1)
0000000C FFF9 BL VicIntSetup?T ; T=0x0001 (2)
277: }
0000000E L_20:
0000000E E7FE B L_20 ; T=0x0000000E
279: }
00000010 BC08 POP {R3}
00000012 4718 BX R3
00000014 ENDP ; 'main'
ARM COMPILER V2.42, TIMERDEMO 12/01/06 09:38:31 PAGE 11
Module Information Static
----------------------------------
code size = ------
data size = 5
const size = 16
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -