📄 main.lst
字号:
ARM COMPILER V2.00f, main 20/02/05 12:51:49 PAGE 1
ARM COMPILER V2.00f, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe main.c THUMB OPTIMIZE(7,SPEED) BROWSE DEBUG TABS(4)
stmt level source
1 /************************************************************/
2 /* PROJECT NAME: AtoD */
3 /* Project: LPC2100 Training course */
4 /* Engineer: T Martin tmartin@hitex.co.uk */
5 /* Filename: main.c */
6 /* Language: C */
7 /* Compiler: Keil ARM V1.3 */
8 /* Assembler: */
9 /* */
10 /************************************************************/
11 /* COPYRIGHT: Hitex UK Ltd 2004 */
12 /* LICENSE: THIS VERSION CREATED FOR FREE DISTRIBUTION */
13 /************************************************************/
14 /* Function: */
15 /* */
16 /* Example Analogue convertor program for LPC2100 */
17 /* */
18 /* Demonstrates A/Dconversion in hardware mode with */
19 /* */
20 /* Oscillator frequency 12.000 Mhz */
21 /* Target board Keil MCB2100 */
22 /************************************************************/
23
24 #include <lpc21xx.h>
25
26 unsigned val = 0;
27
28 int main(void)
29 {
30 1
31 1 VPBDIV = 0x02; //Set the Pclk to 30 Mhz
32 1 IODIR1 = 0x00FF0000; // P1.16..23 defined as Outputs
33 1 ADCR = 0x00270601; // Setup A/D: 10-bit AIN0 @ 3MHz
34 1 ADCR |= 0x01000000; // Start A/D Conversion
35 1
36 1 while(1)
37 1 {
38 2
39 2 do
40 2 {
41 3 val = ADDR; // Read A/D Data Register
42 3 }
43 2 while ((val & 0x80000000) == 0); //Wait for the conversion to complete
44 2 val = ((val >> 6) & 0x03FF)<<16; //Extract the A/D result
45 2
46 2 IOCLR1 = ~val; //write the result onto the LED pins
47 2 IOSET1 = val;
48 2 }
49 1
50 1 }
51
52
ARM COMPILER V2.00f, main 20/02/05 12:51:49 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC main
PUBLIC val
*** DATA SEGMENT '?DT0?main':
00000000 val:
00000000 BEGIN_INIT
00000000 00000000 DD 0x0
00000004 END_INIT
*** CODE SEGMENT '?PR?main?main':
28: int main(void)
00000000 B500 PUSH {LR}
31: VPBDIV = 0x02; //Set the Pclk to 30 Mhz
00000002 2102 MOV R1,#0x2
00000004 4800 LDR R0,=0xE01FC100
00000006 7001 STRB R1,[R0,#0x0]
32: IODIR1 = 0x00FF0000; // P1.16..23 defined as Outputs
00000008 4800 LDR R1,=0xFF0000
0000000A 4800 LDR R0,=0xE0028018
0000000C 6001 STR R1,[R0,#0x0]
33: ADCR = 0x00270601; // Setup A/D: 10-bit AIN0 @ 3MHz
0000000E 4800 LDR R1,=0x270601
00000010 4800 LDR R0,=0xE0034000
00000012 6001 STR R1,[R0,#0x0]
34: ADCR |= 0x01000000; // Start A/D Conversion
00000014 4800 LDR R2,=0x1000000
00000016 4800 LDR R0,=0xE0034000
00000018 6801 LDR R1,[R0,#0x0]
0000001A 4311 ORR R1,R2
0000001C 6001 STR R1,[R0,#0x0]
39: do
0000001E L_6:
0000001E L_5:
41: val = ADDR; // Read A/D Data Register
0000001E 4800 LDR R0,=0xE0034004
00000020 6801 LDR R1,[R0,#0x0]
00000022 4800 LDR R0,=val ; val
00000024 6001 STR R1,[R0,#0x0] ; val
42: }
00000026 4800 LDR R0,=val ; val
00000028 6801 LDR R1,[R0,#0x0] ; val
0000002A 4800 LDR R0,=0x80000000
0000002C 4201 TST R1,R0
0000002E D0F6 BEQ L_5 ; T=0x0000001E
44: val = ((val >> 6) & 0x03FF)<<16; //Extract the A/D result
00000030 0989 LSR R1,R1,#0x6
00000032 4800 LDR R0,=0x3FF
00000034 4001 AND R1,R0
00000036 0409 LSL R1,R1,#0x10
00000038 4800 LDR R0,=val ; val
0000003A 6001 STR R1,[R0,#0x0] ; val
46: IOCLR1 = ~val; //write the result onto the LED pins
0000003C 4800 LDR R0,=val ; val
0000003E 6801 LDR R1,[R0,#0x0] ; val
00000040 43CA MVN R2,R1
00000042 4800 LDR R0,=0xE002801C
00000044 6002 STR R2,[R0,#0x0]
47: IOSET1 = val;
00000046 4800 LDR R0,=0xE0028014
ARM COMPILER V2.00f, main 20/02/05 12:51:49 PAGE 3
00000048 6001 STR R1,[R0,#0x0]
48: }
0000004A E7E8 B L_6 ; T=0x0000001E
0000004C BC08 POP {R3}
0000004E 4718 BX R3
00000050 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 + -