📄 adccont.lst
字号:
ARM COMPILER V2.32c, ADCcont 10/09/05 18:11:23 PAGE 1
ARM COMPILER V2.32c, COMPILATION OF MODULE ADCcont
OBJECT MODULE PLACED IN ADCcont.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe ADCcont.c THUMB DEBUG TABS(4)
stmt level source
1 /*********************************************************************
2
3 Author : ADI - Apps www.analog.com/MicroConverter
4
5 Date : Sept. 2005
6
7 File : ADCcont.c
8
9 Hardware : Applicable to ADuC702x rev H or I silicon
10 Currently targetting ADuC7026.
11
12 Description : Performs 1024 continuous ADC conversions on ADC0,
13 store the results in SRAM and send them through UART
14 at 9600bps when the 1024 conversions are done
15
16 *********************************************************************/
17 #include <ADuC7026.h>
18
19 void senddata(short);
20 void ADCpoweron(int);
21 char hex2ascii(char);
22
23 int main (void) {
24 1
25 1 unsigned short ADCDATA[32];
26 1 int i;
27 1
28 1 ADCpoweron(20000); // power on ADC
29 1
30 1 ADCCP = 0x00; // select ADC channel 0
31 1 REFCON = 0x01; // internal 2.5V reference. 2.5V on Vref pin
32 1
33 1 GP0CON = 0x100000; // Enable ADCbusy on P0.5
34 1
35 1 GP4DAT = 0x04000000; // P4.2 configured as an output. LED is turned on
36 1
37 1 GP1CON = 0x011; // Setup tx & rx pins on P1.0 and P1.1
38 1
39 1 // Setting up UART at 9600 (CD=0)
40 1 COMCON0 = 0x80; // Setting DLAB
41 1 COMDIV0 = 0x88;
42 1 COMDIV1 = 0x00;
43 1 COMCON0 = 0x07; // Clearing DLAB
44 1
45 1 ADCCON = 0x4E4; // ADC Config: fADC/2, acq. time = 2 clocks => ADC Speed = 1MSPS
46 1
47 1 while(1)
48 1 { // start continuous conversion
49 2 for (i=0; i <1024; i++) {
50 3 while (!ADCSTA){} // wait for end of conversion
51 3 ADCDATA[i] = (ADCDAT >> 16);
52 3 if (ADCCP == 0) ADCCP = 1; // change channel
53 3 else ADCCP = 0;
54 3 }
55 2 GP4DAT ^= 0x00040000; // Complement P4.2
56 2 for (i=0; i <1024; i++) senddata (ADCDATA[i]);
57 2 GP4DAT ^= 0x00040000; // Complement P4.2
58 2 }
59 1 }
ARM COMPILER V2.32c, ADCcont 10/09/05 18:11:23 PAGE 2
60
61 void senddata(short to_send)
62 {
63 1 while(!(0x020==(COMSTA0 & 0x020))){}
64 1 COMTX = 0x0A; // output LF
65 1 while(!(0x020==(COMSTA0 & 0x020))){}
66 1 COMTX = 0x0D; // output CR
67 1 while(!(0x020==(COMSTA0 & 0x020))){}
68 1 COMTX = hex2ascii ((to_send >> 8) & 0x0F);
69 1 while(!(0x020==(COMSTA0 & 0x020))){}
70 1 COMTX = hex2ascii ((to_send >> 4) & 0x0F);
71 1 while(!(0x020==(COMSTA0 & 0x020))){}
72 1 COMTX = hex2ascii (to_send & 0x0F);
73 1 }
74
75
76 char hex2ascii(char toconv)
77 {
78 1 if (toconv<0x0A)
79 1 {
80 2 toconv += 0x30;
81 2 }
82 1 else
83 1 {
84 2 toconv += 0x37;
85 2 }
86 1
87 1 return (toconv);
88 1 }
89
90 void ADCpoweron(int time)
91 {
92 1 ADCCON = 0x20; // power-on the ADC
93 1 while (time >=0) // wait for ADC to be fully powered on
94 1 time--;
95 1 }
96
ARM COMPILER V2.32c, ADCcont 10/09/05 18:11:23 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC senddata?T
PUBLIC ADCpoweron?T
PUBLIC hex2ascii?T
PUBLIC main
*** CODE SEGMENT '?PR?main?ADCcont':
23: int main (void) {
00000000 B500 PUSH {LR}
00000002 B090 SUB R13,#0x40
00000004 ; SCOPE-START
28: ADCpoweron(20000); // power on ADC
00000004 4800 LDR R0,=0x4E20
00000006 F7FF BL ADCpoweron?T ; T=0x0001 (1)
00000008 FFFB BL ADCpoweron?T ; T=0x0001 (2)
30: ADCCP = 0x00; // select ADC channel 0
0000000A 2100 MOV R1,#0x0
0000000C 4800 LDR R0,=0xFFFF0504
0000000E 6001 STR R1,[R0,#0x0]
31: REFCON = 0x01; // internal 2.5V reference. 2.5V on Vref pin
00000010 2101 MOV R1,#0x1
00000012 4800 LDR R0,=0xFFFF048C
00000014 6001 STR R1,[R0,#0x0]
33: GP0CON = 0x100000; // Enable ADCbusy on P0.5
00000016 4800 LDR R1,=0x100000
00000018 4800 LDR R0,=0xFFFFF400
0000001A 6001 STR R1,[R0,#0x0]
35: GP4DAT = 0x04000000; // P4.2 configured as an output. LED is turned on
0000001C 4800 LDR R1,=0x4000000
0000001E 4800 LDR R0,=0xFFFFF460
00000020 6001 STR R1,[R0,#0x0]
37: GP1CON = 0x011; // Setup tx & rx pins on P1.0 and P1.1
00000022 2111 MOV R1,#0x11
00000024 4800 LDR R0,=0xFFFFF404
00000026 6001 STR R1,[R0,#0x0]
40: COMCON0 = 0x80; // Setting DLAB
00000028 2180 MOV R1,#0x80
0000002A 4800 LDR R0,=0xFFFF070C
0000002C 6001 STR R1,[R0,#0x0]
41: COMDIV0 = 0x88;
0000002E 2188 MOV R1,#0x88
00000030 4800 LDR R0,=0xFFFF0700
00000032 6001 STR R1,[R0,#0x0]
42: COMDIV1 = 0x00;
00000034 2100 MOV R1,#0x0
00000036 4800 LDR R0,=0xFFFF0704
00000038 6001 STR R1,[R0,#0x0]
43: COMCON0 = 0x07; // Clearing DLAB
0000003A 2107 MOV R1,#0x7
0000003C 4800 LDR R0,=0xFFFF070C
0000003E 6001 STR R1,[R0,#0x0]
45: ADCCON = 0x4E4; // ADC Config: fADC/2, acq. time = 2 clocks => ADC Speed = 1MSPS
00000040 4800 LDR R1,=0x4E4
00000042 4800 LDR R0,=0xFFFF0500
00000044 6001 STR R1,[R0,#0x0]
49: for (i=0; i <1024; i++) {
00000046 L_9:
00000046 2400 MOV R4,#0x0
00000048 ---- Variable 'i' assigned to Register 'R4' ----
50: while (!ADCSTA){} // wait for end of conversion
ARM COMPILER V2.32c, ADCcont 10/09/05 18:11:23 PAGE 4
00000048 L_13:
00000048 L_10:
00000048 4800 LDR R0,=0xFFFF050C
0000004A 6800 LDR R0,[R0,#0x0]
0000004C 2800 CMP R0,#0x0
0000004E D0FB BEQ L_10 ; T=0x00000048
51: ADCDATA[i] = (ADCDAT >> 16);
00000050 4800 LDR R0,=0xFFFF0510
00000052 6800 LDR R0,[R0,#0x0]
00000054 0C00 LSR R0,R0,#0x10
00000056 1C22 MOV R2,R4 ; i
00000058 0052 LSL R2,R2,#0x1 ; i
0000005A A900 ADD R1,R13,#0x0
0000005C 5288 STRH R0,[R1,R2]
52: if (ADCCP == 0) ADCCP = 1; // change channel
0000005E 4800 LDR R0,=0xFFFF0504
00000060 6800 LDR R0,[R0,#0x0]
00000062 2800 CMP R0,#0x0
00000064 D103 BNE L_14 ; T=0x0000006E
00000066 2101 MOV R1,#0x1
00000068 4800 LDR R0,=0xFFFF0504
0000006A 6001 STR R1,[R0,#0x0]
0000006C E002 B L_5 ; T=0x00000074
0000006E L_14:
53: else ADCCP = 0;
0000006E 2100 MOV R1,#0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -