📄 blinky.lst
字号:
ARM COMPILER V2.50a, Blinky 26/02/08 10:34:29 PAGE 1
ARM COMPILER V2.50a, 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) BROWSE DEBUG 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 {
18 1 if(hex > 9) putchar('A' + (hex - 10));
19 1 else putchar('0' + hex);
20 1 }
21
22 void sendstr(char *p) /* Write string */
23 {
24 1 while(*p)
25 1 {
26 2 putchar(*p++);
27 2 }
28 1 }
29
30 void delay (void) /* Delay function */
31 {
32 1 unsigned int cnt;
33 1 unsigned int val;
34 1
35 1 ADCR |= 0x01000000; /* Start A/D Conversion */
36 1 do
37 1 {
38 2 val = ADDR; /* Read A/D Data Register */
39 2 }while((val & 0x80000000) == 0); /* Wait for end of A/D Conversion */
40 1 ADCR &= ~0x01000000; /* Stop A/D Conversion */
41 1 val = (val >> 6) & 0x03FF; /* Extract AIN0 Value */
42 1
43 1 sendstr("\nAIN0 Result = 0x"); /* Output A/D Conversion Result */
44 1 sendhex((val >> 8) & 0x0F); /* Write 1. Hex Digit */
45 1 sendhex((val >> 4) & 0x0F); /* Write 2. Hex Digit */
46 1 sendhex(val & 0x0F); /* Write 3. Hex Digit */
47 1
48 1 val = (val >> 2) << 12; /* Adjust Delay Value */
49 1 for (cnt = 0; cnt < val; cnt++); /* Delay */
50 1 }
51
52 int main (void)
53 {
54 1 unsigned int n;
55 1
56 1 IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */
57 1 ADCR = 0x002E0401; /* Setup A/D: 10-bit AIN0 @ 3MHz */
58 1 init_serial(); /* Initialize Serial Interface */
59 1
ARM COMPILER V2.50a, Blinky 26/02/08 10:34:29 PAGE 2
60 1 while(1)
61 1 { /* Loop forever */
62 2 for(n = 0x00010000; n <= 0x00800000; n <<= 1)
63 2 {
64 3 /* Blink LED 0, 1, 2, 3, 4, 5, 6, 7 */
65 3 IOSET1 = n; /* Turn on LED */
66 3 delay(); /* Delay */
67 3 IOCLR1 = 0x00FF0000; /* Turn off LEDs */
68 3 }
69 2 }
70 1 }
ARM COMPILER V2.50a, Blinky 26/02/08 10:34:29 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' ----
18: 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:
19: 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:
20: }
0000001C BC10 POP {R4}
0000001E BC08 POP {R3}
00000020 4718 BX R3
00000022 ENDP ; 'sendhex?T'
*** CODE SEGMENT '?PR?sendstr?T?Blinky':
22: void sendstr(char *p) /* Write string */
00000000 B510 PUSH {R4,LR}
00000002 1C04 MOV R4,R0 ; p
00000004 ---- Variable 'p' assigned to Register 'R4' ----
24: while(*p)
00000004 E004 B L_3 ; T=0x00000010
00000006 L_5:
26: 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)
27: }
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
28: }
00000018 BC10 POP {R4}
0000001A BC08 POP {R3}
ARM COMPILER V2.50a, Blinky 26/02/08 10:34:29 PAGE 4
0000001C 4718 BX R3
0000001E ENDP ; 'sendstr?T'
*** CODE SEGMENT '?PR?delay?T?Blinky':
30: void delay (void) /* Delay function */
00000000 B510 PUSH {R4,LR}
31: {
00000002 ; SCOPE-START
35: 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]
36: do
0000000C L_7:
38: 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' ----
39: }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
40: 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]
41: val = (val >> 6) & 0x03FF; /* Extract AIN0 Value */
00000022 09A4 LSR R4,R4,#0x6 ; val
00000024 4800 LDR R0,=0x3FF
00000026 4004 AND R4,R0
43: 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)
44: 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)
45: 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)
46: 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)
48: val = (val >> 2) << 12; /* Adjust Delay Value */
00000050 08A4 LSR R4,R4,#0x2 ; val
00000052 0324 LSL R4,R4,#0xC
49: 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:
ARM COMPILER V2.50a, Blinky 26/02/08 10:34:29 PAGE 5
00000058 3001 ADD R0,#0x1
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
50: }
00000062 BC10 POP {R4}
00000064 BC08 POP {R3}
00000066 4718 BX R3
00000068 ENDP ; 'delay?T'
*** CODE SEGMENT '?PR?main?Blinky':
52: int main (void)
00000000 B500 PUSH {LR}
53: {
00000002 ; SCOPE-START
56: IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */
00000002 4800 LDR R1,=0xFF0000
00000004 4800 LDR R0,=0xE0028018
00000006 6001 STR R1,[R0,#0x0]
57: 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]
58: init_serial(); /* Initialize Serial Interface */
0000000E F7FF BL init_serial?T ; T=0x0001 (1)
00000010 FFF7 BL init_serial?T ; T=0x0001 (2)
62: 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:
65: IOSET1 = n; /* Turn on LED */
00000014 1C21 MOV R1,R4 ; n
00000016 4800 LDR R0,=0xE0028014
00000018 6001 STR R1,[R0,#0x0]
66: delay(); /* Delay */
0000001A F7FF BL delay?T ; T=0x0001 (1)
0000001C FFF1 BL delay?T ; T=0x0001 (2)
67: IOCLR1 = 0x00FF0000; /* Turn off LEDs */
0000001E 4800 LDR R1,=0xFF0000
00000020 4800 LDR R0,=0xE002801C
00000022 6001 STR R1,[R0,#0x0]
68: }
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
69: }
0000002E E7F0 B L_24 ; T=0x00000012
00000030 ; SCOPE-END
70: }
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 + -