📄 blinky.lst
字号:
ARM COMPILER V2.42, Blinky 20/12/05 21:08:42 PAGE 1
ARM COMPILER V2.42, COMPILATION OF MODULE Blinky
OBJECT MODULE PLACED IN Blinky.OBJ
COMPILER INVOKED BY: d:\Keil\ARM\BIN\CA.exe Blinky.c THUMB OPTIMIZE(7,SPEED) DEBUG PRINT(.\PHY\BLINKY.LST) TABS(4)
stmt level source
1 /******************************************************************************/
2 /* This file is part of the uVision/ARM development tools */
3 /* Copyright KEIL ELEKTRONIK GmbH 2002-2004 */
4 /******************************************************************************/
5 /* */
6 /* BLINKY.C: LED Flasher */
7 /* */
8 /******************************************************************************/
9
10 #include <stdio.h> /* standard I/O .h-file */
11 #include <LPC21xx.H> /* LPC21xx definitions */
12
13 extern void init_serial (void); /* Initialize Serial Interface */
14
15
16 void sendhex (int hex) { /* Write Hex Digit to Serial Port */
17 1 if (hex > 9) putchar('A' + (hex - 10));
18 1 else putchar('0' + hex);
19 1 }
20
21 void sendstr (char *p) { /* Write string */
22 1 while (*p) {
23 2 putchar (*p++);
24 2 }
25 1 }
26
27
28 void delay (void) { /* Delay function */
29 1 unsigned int cnt;
30 1 unsigned int val;
31 1
32 1 ADCR |= 0x01000000; /* Start A/D Conversion */
33 1 do {
34 2 val = ADDR; /* Read A/D Data Register */
35 2 } while ((val & 0x80000000) == 0); /* Wait for end of A/D Conversion */
36 1 ADCR &= ~0x01000000; /* Stop A/D Conversion */
37 1 val = (val >> 6) & 0x03FF; /* Extract AIN0 Value */
38 1
39 1 sendstr ("\nAIN0 Result = 0x"); /* Output A/D Conversion Result */
40 1 sendhex((val >> 8) & 0x0F); /* Write 1. Hex Digit */
41 1 sendhex((val >> 4) & 0x0F); /* Write 2. Hex Digit */
42 1 sendhex (val & 0x0F); /* Write 3. Hex Digit */
43 1
44 1 val = (val >> 2) << 12; /* Adjust Delay Value */
45 1 for (cnt = 0; cnt < val; cnt++); /* Delay */
46 1 }
47
48
49 int main (void) {
50 1 unsigned int n;
51 1
52 1 IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */
53 1 ADCR = 0x002E0401; /* Setup A/D: 10-bit AIN0 @ 3MHz */
54 1 init_serial(); /* Initialize Serial Interface */
55 1
56 1 while (1) { /* Loop forever */
57 2 for (n = 0x00010000; n <= 0x00800000; n <<= 1) {
58 3 /* Blink LED 0, 1, 2, 3, 4, 5, 6, 7 */
59 3 IOSET1 = n; /* Turn on LED */
ARM COMPILER V2.42, Blinky 20/12/05 21:08:42 PAGE 2
60 3 delay(); /* Delay */
61 3 IOCLR1 = 0x00FF0000; /* Turn off LEDs */
62 3 }
63 2 }
64 1 }
ARM COMPILER V2.42, Blinky 20/12/05 21:08:42 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (putchar?T)
EXTERN CODE16 (init_serial?T)
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC sendhex?T
PUBLIC sendstr?T
PUBLIC delay?T
PUBLIC main
*** DATA SEGMENT '?CON?Blinky':
00000000 ??S_1:
00000000 DB 0x0A,'AIN0 Result = 0x',0x00
*** CODE SEGMENT '?PR?sendhex?T?Blinky':
16: void sendhex (int hex) { /* Write Hex Digit to Serial Port */
00000000 B510 PUSH {R4,LR}
00000002 1C04 MOV R4,R0 ; hex
00000004 ---- Variable 'hex' assigned to Register 'R4' ----
17: if (hex > 9) putchar('A' + (hex - 10));
00000004 1C20 MOV R0,R4 ; hex
00000006 2809 CMP R0,#0x9 ; hex
00000008 DD04 BLE L_1 ; T=0x00000014
0000000A 1C20 MOV R0,R4 ; hex
0000000C 3037 ADD R0,#0x37
0000000E F7FF BL putchar?T ; T=0x0001 (1)
00000010 FFF7 BL putchar?T ; T=0x0001 (2)
00000012 E003 B L_2 ; T=0x0000001C
00000014 L_1:
18: else putchar('0' + hex);
00000014 1C20 MOV R0,R4 ; hex
00000016 3030 ADD R0,#0x30
00000018 F7FF BL putchar?T ; T=0x0001 (1)
0000001A FFF2 BL putchar?T ; T=0x0001 (2)
0000001C L_2:
19: }
0000001C BC10 POP {R4}
0000001E BC08 POP {R3}
00000020 4718 BX R3
00000022 ENDP ; 'sendhex?T'
*** CODE SEGMENT '?PR?sendstr?T?Blinky':
21: void sendstr (char *p) { /* Write string */
00000000 B510 PUSH {R4,LR}
00000002 1C04 MOV R4,R0 ; p
00000004 ---- Variable 'p' assigned to Register 'R4' ----
22: while (*p) {
00000004 E004 B L_3 ; T=0x00000010
00000006 L_5:
23: putchar (*p++);
00000006 1C20 MOV R0,R4 ; p
00000008 3401 ADD R4,#0x1
0000000A 7800 LDRB R0,[R0,#0x0] ; p
0000000C F7FF BL putchar?T ; T=0x0001 (1)
0000000E FFF8 BL putchar?T ; T=0x0001 (2)
24: }
00000010 L_3:
00000010 1C20 MOV R0,R4 ; p
00000012 7800 LDRB R0,[R0,#0x0] ; p
00000014 2800 CMP R0,#0x0
00000016 D1F6 BNE L_5 ; T=0x00000006
25: }
00000018 BC10 POP {R4}
0000001A BC08 POP {R3}
ARM COMPILER V2.42, Blinky 20/12/05 21:08:42 PAGE 4
0000001C 4718 BX R3
0000001E ENDP ; 'sendstr?T'
*** CODE SEGMENT '?PR?delay?T?Blinky':
28: void delay (void) { /* Delay function */
00000000 B510 PUSH {R4,LR}
00000002 ; SCOPE-START
32: ADCR |= 0x01000000; /* Start A/D Conversion */
00000002 4800 LDR R2,=0x1000000
00000004 4800 LDR R0,=0xE0034000
00000006 6801 LDR R1,[R0,#0x0]
00000008 4311 ORR R1,R2
0000000A 6001 STR R1,[R0,#0x0]
33: do {
0000000C L_7:
34: val = ADDR; /* Read A/D Data Register */
0000000C 4800 LDR R0,=0xE0034004
0000000E 6804 LDR R4,[R0,#0x0]
00000010 ---- Variable 'val' assigned to Register 'R4' ----
35: } while ((val & 0x80000000) == 0); /* Wait for end of A/D Conversion */
00000010 1C20 MOV R0,R4 ; val
00000012 4800 LDR R1,=0x80000000
00000014 4208 TST R0,R1 ; val
00000016 D0F9 BEQ L_7 ; T=0x0000000C
36: ADCR &= ~0x01000000; /* Stop A/D Conversion */
00000018 4800 LDR R2,=0x1000000
0000001A 4800 LDR R0,=0xE0034000
0000001C 6801 LDR R1,[R0,#0x0]
0000001E 4391 BIC R1,R2
00000020 6001 STR R1,[R0,#0x0]
37: val = (val >> 6) & 0x03FF; /* Extract AIN0 Value */
00000022 09A4 LSR R4,R4,#0x6 ; val
00000024 4800 LDR R0,=0x3FF
00000026 4004 AND R4,R0
39: sendstr ("\nAIN0 Result = 0x"); /* Output A/D Conversion Result */
00000028 4800 LDR R0,=??S_1 ; ??S_1
0000002A F7FF BL sendstr?T ; T=0x0001 (1)
0000002C FFE9 BL sendstr?T ; T=0x0001 (2)
40: sendhex((val >> 8) & 0x0F); /* Write 1. Hex Digit */
0000002E 1C20 MOV R0,R4 ; val
00000030 0A00 LSR R0,R0,#0x8 ; val
00000032 210F MOV R1,#0xF
00000034 4008 AND R0,R1
00000036 F7FF BL sendhex?T ; T=0x0001 (1)
00000038 FFE3 BL sendhex?T ; T=0x0001 (2)
41: sendhex((val >> 4) & 0x0F); /* Write 2. Hex Digit */
0000003A 1C20 MOV R0,R4 ; val
0000003C 0900 LSR R0,R0,#0x4 ; val
0000003E 210F MOV R1,#0xF
00000040 4008 AND R0,R1
00000042 F7FF BL sendhex?T ; T=0x0001 (1)
00000044 FFDD BL sendhex?T ; T=0x0001 (2)
42: sendhex (val & 0x0F); /* Write 3. Hex Digit */
00000046 1C20 MOV R0,R4 ; val
00000048 210F MOV R1,#0xF
0000004A 4008 AND R0,R1
0000004C F7FF BL sendhex?T ; T=0x0001 (1)
0000004E FFD8 BL sendhex?T ; T=0x0001 (2)
44: val = (val >> 2) << 12; /* Adjust Delay Value */
00000050 08A4 LSR R4,R4,#0x2 ; val
00000052 0324 LSL R4,R4,#0xC
45: for (cnt = 0; cnt < val; cnt++); /* Delay */
00000054 2000 MOV R0,#0x0
00000056 ---- Variable 'cnt' assigned to Register 'R0' ----
00000056 E000 B L_13 ; T=0x0000005A
00000058 L_11:
00000058 3001 ADD R0,#0x1
ARM COMPILER V2.42, Blinky 20/12/05 21:08:42 PAGE 5
0000005A L_13:
0000005A 1C22 MOV R2,R4 ; val
0000005C 1C01 MOV R1,R0 ; cnt
0000005E 4291 CMP R1,R2 ; cnt
00000060 D3FA BCC L_11 ; T=0x00000058
00000062 ; SCOPE-END
46: }
00000062 BC10 POP {R4}
00000064 BC08 POP {R3}
00000066 4718 BX R3
00000068 ENDP ; 'delay?T'
*** CODE SEGMENT '?PR?main?Blinky':
49: int main (void) {
00000000 B500 PUSH {LR}
00000002 ; SCOPE-START
52: IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */
00000002 4800 LDR R1,=0xFF0000
00000004 4800 LDR R0,=0xE0028018
00000006 6001 STR R1,[R0,#0x0]
53: ADCR = 0x002E0401; /* Setup A/D: 10-bit AIN0 @ 3MHz */
00000008 4800 LDR R1,=0x2E0401
0000000A 4800 LDR R0,=0xE0034000
0000000C 6001 STR R1,[R0,#0x0]
54: init_serial(); /* Initialize Serial Interface */
0000000E F7FF BL init_serial?T ; T=0x0001 (1)
00000010 FFF7 BL init_serial?T ; T=0x0001 (2)
57: for (n = 0x00010000; n <= 0x00800000; n <<= 1) {
00000012 L_24:
00000012 4800 LDR R4,=0x10000
00000014 ---- Variable 'n' assigned to Register 'R4' ----
00000014 L_23:
59: IOSET1 = n; /* Turn on LED */
00000014 1C21 MOV R1,R4 ; n
00000016 4800 LDR R0,=0xE0028014
00000018 6001 STR R1,[R0,#0x0]
60: delay(); /* Delay */
0000001A F7FF BL delay?T ; T=0x0001 (1)
0000001C FFF1 BL delay?T ; T=0x0001 (2)
61: IOCLR1 = 0x00FF0000; /* Turn off LEDs */
0000001E 4800 LDR R1,=0xFF0000
00000020 4800 LDR R0,=0xE002801C
00000022 6001 STR R1,[R0,#0x0]
62: }
00000024 0064 LSL R4,R4,#0x1 ; n
00000026 1C20 MOV R0,R4 ; n
00000028 4800 LDR R1,=0x800000
0000002A 4288 CMP R0,R1 ; n
0000002C D9F2 BLS L_23 ; T=0x00000014
63: }
0000002E E7F0 B L_24 ; T=0x00000012
00000030 ; SCOPE-END
64: }
00000030 BC08 POP {R3}
00000032 4718 BX R3
00000034 ENDP ; 'main'
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = 18
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -