?? main.lst
字號(hào):
ARM COMPILER V2.00f, main 19/02/05 10:38:45 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 ARM OPTIMIZE(7,SIZE) BROWSE DEBUG TABS(4)
stmt level source
1 /************************************************************/
2 /* PROJECT NAME: MAM */
3 /* Project: LPC2100 Training course */
4 /* Engineer: T Martin tmartin@hitex.co.uk */
5 /* Filename: main.c */
6 /* Language: C */
7 /* Compiler: Keil ARM V2.00b */
8 /* Assembler: */
9 /* */
10 /************************************************************/
11 /* COPYRIGHT: Hitex UK Ltd 2005 */
12 /* LICENSE: THIS VERSION CREATED FOR FREE DISTRIBUTION */
13 /************************************************************/
14 /* Function: */
15 /* */
16 /* Example Demo of Memory Accelerator Module performance */
17 /* */
18 /* Demonstrates Use of the LPC2100 MAM */
19 /* */
20 /* Oscillator frequency 12.000 Mhz */
21 /* Target board Keil MCB21000 */
22 /************************************************************/
23
24 #include <LPC21xx.H>
25
26 void ChangeGPIOPinState(unsigned int state);
27
28 unsigned val;
29
30
31 int main(void)
32 {
33 1 unsigned int delay;
34 1 unsigned int flasher = 0x00010000; // define locals
35 1
36 1 IODIR1 = 0x00FF0000; // set all ports to output
37 1
38 1 VPBDIV = 0x00000002;
39 1
40 1 ADCR = 0x00270601; // Setup A/D: 10-bit AIN0 @ 3MHz
41 1 ADCR |= 0x01000000; // Start A/D Conversion
42 1
43 1 while(1)
44 1 {
45 2 do
46 2 {
47 3 val = ADDR; // Read A/D Data Register
48 3 }
49 2 while ((val & 0x80000000) == 0x00000000);
50 2 val = ((val >> 6) & 0x000003FF);
51 2
52 2 if (val <0x0000000080)
53 2 {
54 3 MAMCR = 0x00000000;
55 3 MAMTIM = 0x00000004;
56 3 MAMCR = 0x00000002;
57 3 }
58 2 else
59 2 {
ARM COMPILER V2.00f, main 19/02/05 10:38:45 PAGE 2
60 3 MAMCR = 0x00000000;
61 3 }
62 2
63 2 for(delay = 0;delay<0x100000;delay++) //simple delay loop
64 2 {
65 3 ;
66 3 }
67 2
68 2 ChangeGPIOPinState(flasher); //set the state of the ports
69 2 flasher = flasher <<1; //shift the active led
70 2 if(flasher&0x01000000) flasher = 0x00010000; //Increment flasher led and test for overflow
71 2
72 2 }
73 1 }
74
75 void ChangeGPIOPinState(unsigned int state)
76 {
77 1 IOCLR1 = ~state; //clear output pins
78 1 IOSET1 = state; //set output pins
79 1
80 1 }
81
82
ARM COMPILER V2.00f, main 19/02/05 10:38:45 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC ChangeGPIOPinState?A
PUBLIC main
PUBLIC val
*** DATA SEGMENT '?DT0?main':
00000000 val:
00000000 DS 4
*** CODE SEGMENT '?PR?main?main':
31: int main(void)
00000000 E92D4000 STMDB R13!,{LR}
32: {
00000004 ; SCOPE-START
34: unsigned int flasher = 0x00010000; // define locals
00000004 E3A04801 MOV R4,#0x10000
00000008 ---- Variable 'flasher' assigned to Register 'R4' ----
36: IODIR1 = 0x00FF0000; // set all ports to output
00000008 E3A018FF MOV R1,#0xFF0000
0000000C E5100000 LDR R0,=0xE0028018
00000010 E5801000 STR R1,[R0,#0x0]
38: VPBDIV = 0x00000002;
00000014 E3A01002 MOV R1,#0x2
00000018 E5100000 LDR R0,=0xE01FC100
0000001C E5C01000 STRB R1,[R0,#0x0]
40: ADCR = 0x00270601; // Setup A/D: 10-bit AIN0 @ 3MHz
00000020 E5101000 LDR R1,=0x270601
00000024 E5100000 LDR R0,=0xE0034000
00000028 E5801000 STR R1,[R0,#0x0]
41: ADCR |= 0x01000000; // Start A/D Conversion
0000002C E5100000 LDR R0,=0xE0034000
00000030 E5901000 LDR R1,[R0,#0x0]
00000034 E3811401 ORR R1,R1,#0x1000000
00000038 E5801000 STR R1,[R0,#0x0]
45: do
0000003C L_6:
0000003C L_5:
47: val = ADDR; // Read A/D Data Register
0000003C E5100000 LDR R0,=0xE0034004
00000040 E5901000 LDR R1,[R0,#0x0]
00000044 E5100000 LDR R0,=val ; val
00000048 E5801000 STR R1,[R0,#0x0] ; val
48: }
0000004C E5100000 LDR R0,=val ; val
00000050 E5901000 LDR R1,[R0,#0x0] ; val
00000054 E3110102 TST R1,#0x80000000
00000058 0AFFFFF7 BEQ L_5 ; Targ=0x3C
50: val = ((val >> 6) & 0x000003FF);
0000005C E1A01321 MOV R1,R1,LSR #6
00000060 E5100000 LDR R0,=0x3FF
00000064 E0011000 AND R1,R1,R0
00000068 E5100000 LDR R0,=val ; val
0000006C E5801000 STR R1,[R0,#0x0] ; val
52: if (val <0x0000000080)
00000070 E5100000 LDR R0,=val ; val
00000074 E5900000 LDR R0,[R0,#0x0] ; val
00000078 E3500080 CMP R0,#0x0080
0000007C 2A000009 BCS L_9 ; Targ=0xA8
54: MAMCR = 0x00000000;
00000080 E3A01000 MOV R1,#0x0
ARM COMPILER V2.00f, main 19/02/05 10:38:45 PAGE 4
00000084 E5100000 LDR R0,=0xE01FC000
00000088 E5C01000 STRB R1,[R0,#0x0]
55: MAMTIM = 0x00000004;
0000008C E3A01004 MOV R1,#0x4
00000090 E5100000 LDR R0,=0xE01FC004
00000094 E5C01000 STRB R1,[R0,#0x0]
56: MAMCR = 0x00000002;
00000098 E3A01002 MOV R1,#0x2
0000009C E5100000 LDR R0,=0xE01FC000
000000A0 E5C01000 STRB R1,[R0,#0x0]
57: }
000000A4 EA000002 B L_15 ; Targ=0xB4
000000A8 L_9:
60: MAMCR = 0x00000000;
000000A8 E3A01000 MOV R1,#0x0
000000AC E5100000 LDR R0,=0xE01FC000
000000B0 E5C01000 STRB R1,[R0,#0x0]
63: for(delay = 0;delay<0x100000;delay++) //simple delay loop
000000B4 L_15:
000000B4 E3A00000 MOV R0,#0x0
000000B8 ---- Variable 'delay' assigned to Register 'R0' ----
66: }
000000B8 L_11:
000000B8 E2800001 ADD R0,R0,#0x0001 ; delay
000000BC E3500601 CMP R0,#0x100000 ; delay
000000C0 3AFFFFFC BCC L_11 ; Targ=0xB8
68: ChangeGPIOPinState(flasher); //set the state of the ports
000000C4 E1A00004 MOV R0,R4
000000C8 EBFFFFCC BL ChangeGPIOPinState?A ; Targ=0x0
69: flasher = flasher <<1; //shift the active led
000000CC E1A04084 MOV R4,R4,LSL #1 ; flasher
70: if(flasher&0x01000000) flasher = 0x00010000; //Increment flasher led and test for overflow
000000D0 E3140401 TST R4,#0x1000000 ; flasher
000000D4 0AFFFFD8 BEQ L_6 ; Targ=0x3C
000000D8 E3A04801 MOV R4,#0x10000
72: }
000000DC EAFFFFD6 B L_6 ; Targ=0x3C
000000E0 ; SCOPE-END
000000E0 E8BD0008 LDMIA R13!,{R3}
000000E4 E12FFF13 BX R3
000000E8 ENDP ; 'main'
*** CODE SEGMENT '?PR?ChangeGPIOPinState?A?main':
75: void ChangeGPIOPinState(unsigned int state)
00000000 E1A03000 MOV R3,R0 ; state
00000004 ---- Variable 'state' assigned to Register 'R3' ----
77: IOCLR1 = ~state; //clear output pins
00000004 E1A01003 MOV R1,R3 ; state
00000008 E1E02001 MVN R2,R1 ; state
0000000C E5100000 LDR R0,=0xE002801C
00000010 E5802000 STR R2,[R0,#0x0]
78: IOSET1 = state; //set output pins
00000014 E5100000 LDR R0,=0xE0028014
00000018 E5801000 STR R1,[R0,#0x0]
80: }
0000001C E12FFF1E BX R14
00000020 ENDP ; 'ChangeGPIOPinState?A'
Module Information Static
----------------------------------
code size = ------
data size = 4
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -