📄 adcts.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\adcts.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
ReadAdc PROC
;;;54 int ReadAdc(int ch)
;;;55 {
|L1.0|
000000 e1a01000 MOV r1,r0
;;;56 int i;
;;;57 static int prevCh=-1;
;;;58
;;;59 if(prevCh!=ch)
000004 e59f0138 LDR r0,|L1.324|
000008 e5900000 LDR r0,[r0,#0] ; prevCh@ReadAdc_0
00000c e1500001 CMP r0,r1
000010 0a00000a BEQ |L1.64|
;;;60 {
;;;61 rADCCON=(1<<14)+(ADCPRS<<6)+(ch<<3); //setup channel, ADCPRS
000014 e59f012c LDR r0,|L1.328|
000018 e0800181 ADD r0,r0,r1,LSL #3
00001c e3a03458 MOV r3,#0x58000000
000020 e5830000 STR r0,[r3,#0]
;;;62 for(i=0;i<LOOP;i++); //delay to set up the next channel
000024 e3a02000 MOV r2,#0
|L1.40|
000028 e3520001 CMP r2,#1
00002c aa000001 BGE |L1.56|
000030 e2822001 ADD r2,r2,#1
000034 eafffffb B |L1.40|
;;;63 prevCh=ch;
|L1.56|
000038 e59f0104 LDR r0,|L1.324|
00003c e5801000 STR r1,[r0,#0] ; prevCh@ReadAdc_0
;;;64 }
;;;65 rADCCON=(1<<14)+(ADCPRS<<6)+(ch<<3); //setup channel, ADCPRS
|L1.64|
000040 e59f0100 LDR r0,|L1.328|
000044 e0800181 ADD r0,r0,r1,LSL #3
000048 e3a03458 MOV r3,#0x58000000
00004c e5830000 STR r0,[r3,#0]
;;;66 rADCTSC = rADCTSC & 0xfb; //Normal ADC conversion & No TS operation
000050 e3a00458 MOV r0,#0x58000000
000054 e5900004 LDR r0,[r0,#4]
000058 e20000fb AND r0,r0,#0xfb
00005c e3a03458 MOV r3,#0x58000000
000060 e5830004 STR r0,[r3,#4]
;;;67 rADCCON|=0x1; //start ADC
000064 e3a00458 MOV r0,#0x58000000
000068 e5900000 LDR r0,[r0,#0]
00006c e3800001 ORR r0,r0,#1
000070 e3a03458 MOV r3,#0x58000000
000074 e5830000 STR r0,[r3,#0]
;;;68
;;;69 while(rADCCON & 0x1); //check if Enable_start is low
000078 e1a00000 NOP
|L1.124|
00007c e3a00458 MOV r0,#0x58000000
000080 e5900000 LDR r0,[r0,#0]
000084 e3100001 TST r0,#1
000088 1afffffb BNE |L1.124|
;;;70 while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high
00008c e1a00000 NOP
|L1.144|
000090 e3a00458 MOV r0,#0x58000000
000094 e5900000 LDR r0,[r0,#0]
000098 e3100c80 TST r0,#0x8000
00009c 0afffffb BEQ |L1.144|
;;;71 return (rADCDAT0&0x3ff);
0000a0 e3a00458 MOV r0,#0x58000000
0000a4 e590000c LDR r0,[r0,#0xc]
0000a8 e1a00b00 MOV r0,r0,LSL #22
0000ac e1a00b20 MOV r0,r0,LSR #22
;;;72 }
0000b0 e1a0f00e MOV pc,lr
ENDP
Test_Adc PROC
;;;23 void Test_Adc(void)
;;;24 {
0000b4 e92d4ff8 STMFD sp!,{r3-r11,lr}
;;;25 int a0=0,a1=0,a2=0,a3=0; //Initialize variables
0000b8 e3a05000 MOV r5,#0
0000bc e3a04000 MOV r4,#0
0000c0 e3a06000 MOV r6,#0
0000c4 e3a07000 MOV r7,#0
;;;26 int a4=0,a5=0,a6=0,a7=0; //Initialize variables
0000c8 e3a08000 MOV r8,#0
0000cc e3a09000 MOV r9,#0
0000d0 e3a0a000 MOV r10,#0
0000d4 e3a0b000 MOV r11,#0
;;;27
;;;28 Uart_Printf("The ADC_IN are adjusted to the following values.\n");
0000d8 e28f006c ADR r0,|L1.332|
0000dc ebfffffe BL Uart_Printf
;;;29 Uart_Printf("Push any key to exit!!!\n");
0000e0 e28f0098 ADR r0,|L1.384|
0000e4 ebfffffe BL Uart_Printf
;;;30 Uart_Printf("ADC conv. freq.=%d(Hz)\n",(int)(PCLK/(ADCPRS+1.))); // ADC Freq. = PCLK/(ADCPSR+1), ADC conversion time = 5CYCLES*(1/(ADC Freq.))
0000e8 e59f10ac LDR r1,|L1.412|
0000ec e28f00ac ADR r0,|L1.416|
0000f0 ebfffffe BL Uart_Printf
;;;31
;;;32 while(Uart_GetKey()==0)
0000f4 e1a00000 NOP
|L1.248|
0000f8 ebfffffe BL Uart_GetKey
0000fc e3500000 CMP r0,#0
000100 1a000006 BNE |L1.288|
;;;33 {
;;;34
;;;35 //a0=ReadAdc(0);
;;;36 a1=ReadAdc(0);
000104 e3a00000 MOV r0,#0
000108 ebfffffe BL ReadAdc
00010c e1a04000 MOV r4,r0
;;;37 //a2=ReadAdc(2);
;;;38 //a3=ReadAdc(3);
;;;39 //a4=ReadAdc(4);
;;;40 //a5=ReadAdc(5);
;;;41 //a6=ReadAdc(6);
;;;42 //a7=ReadAdc(7);
;;;43
;;;44 Uart_Printf("AIN0: %04d\n", a1);
000110 e1a01004 MOV r1,r4
000114 e28f009c ADR r0,|L1.440|
000118 ebfffffe BL Uart_Printf
;;;45 //Uart_Printf("AIN0: %04d AIN1: %04d AIN2: %04d AIN3: %04d", a0,a1,a2,a3);
;;;46 //Uart_Printf("AIN4: %04d AIN5: %04d AIN6: %04d AIN7: %04d \n", a4,a5,a6,a7);
;;;47 }
00011c eafffff5 B |L1.248|
;;;48
;;;49 rADCCON=(0<<14)+(19<<6)+(7<<3)+(1<<2); //stand by mode to reduce power consumption
|L1.288|
000120 e59f009c LDR r0,|L1.452|
000124 e3a01458 MOV r1,#0x58000000
000128 e5810000 STR r0,[r1,#0]
;;;50 Uart_Printf("rADCCON = 0x%x\n", rADCCON);
00012c e3a00458 MOV r0,#0x58000000
000130 e5900000 LDR r0,[r0,#0]
000134 e1a01000 MOV r1,r0
000138 e28f0088 ADR r0,|L1.456|
00013c ebfffffe BL Uart_Printf
;;;51 }
000140 e8bd8ff8 LDMFD sp!,{r3-r11,pc}
|L1.324|
000144 00000000 DCD ||.data$0||
|L1.328|
000148 00004c80 DCD 0x00004c80
|L1.332|
00014c 20656854 DCB "The "
000150 5f434441 DCB "ADC_"
000154 61204e49 DCB "IN a"
000158 61206572 DCB "re a"
00015c 73756a64 DCB "djus"
000160 20646574 DCB "ted "
000164 74206f74 DCB "to t"
000168 66206568 DCB "he f"
00016c 6f6c6c6f DCB "ollo"
000170 676e6977 DCB "wing"
000174 6c617620 DCB " val"
000178 2e736575 DCB "ues."
00017c 0000000a DCB "\n\0\0\0"
|L1.384|
000180 68737550 DCB "Push"
000184 796e6120 DCB " any"
000188 79656b20 DCB " key"
00018c 206f7420 DCB " to "
000190 74697865 DCB "exit"
000194 0a212121 DCB "!!!\n"
000198 00000000 DCB "\0\0\0\0"
|L1.412|
00019c 000ec716 DCD 0x000ec716
|L1.416|
0001a0 20434441 DCB "ADC "
0001a4 766e6f63 DCB "conv"
0001a8 7266202e DCB ". fr"
0001ac 3d2e7165 DCB "eq.="
0001b0 48286425 DCB "%d(H"
0001b4 000a297a DCB "z)\n\0"
|L1.440|
0001b8 304e4941 DCB "AIN0"
0001bc 3025203a DCB ": %0"
0001c0 000a6434 DCB "4d\n\0"
|L1.452|
0001c4 000004fc DCD 0x000004fc
|L1.456|
0001c8 43444172 DCB "rADC"
0001cc 204e4f43 DCB "CON "
0001d0 7830203d DCB "= 0x"
0001d4 000a7825 DCB "%x\n\0"
ENDP
AdcTsAuto PROC
;;;100 void __irq AdcTsAuto(void)
;;;101 {
0001d8 e92d501f STMFD sp!,{r0-r4,r12,lr}
0001dc e24dd004 SUB sp,sp,#4
;;;102 int i;
;;;103 U32 saveAdcdly;
;;;104
;;;105 if(rADCDAT0&0x8000)
0001e0 e3a00458 MOV r0,#0x58000000
0001e4 e590000c LDR r0,[r0,#0xc]
0001e8 e3100c80 TST r0,#0x8000
0001ec 0a000007 BEQ |L1.528|
;;;106 {
;;;107 Uart_Printf("\nStylus Up!!\n");
0001f0 e28f0f7b ADR r0,|L1.996|
0001f4 ebfffffe BL Uart_Printf
;;;108 rADCTSC&=0xff; // Set stylus down interrupt bit
0001f8 e3a00458 MOV r0,#0x58000000
0001fc e5900004 LDR r0,[r0,#4]
000200 e20000ff AND r0,r0,#0xff
000204 e3a01458 MOV r1,#0x58000000
000208 e5810004 STR r0,[r1,#4]
00020c ea000001 B |L1.536|
;;;109 }
;;;110 else
;;;111 Uart_Printf("\nStylus Down!!\n");
|L1.528|
000210 e28f0f77 ADR r0,|L1.1012|
000214 ebfffffe BL Uart_Printf
;;;112
;;;113 rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure.
|L1.536|
000218 e3a0000c MOV r0,#0xc
00021c e3a01458 MOV r1,#0x58000000
000220 e5810004 STR r0,[r1,#4]
;;;114 saveAdcdly=rADCDLY;
000224 e3a00458 MOV r0,#0x58000000
000228 e5904008 LDR r4,[r0,#8]
;;;115 rADCDLY=40000; //Normal conversion mode delay about (1/50M)*40000=0.8ms
00022c e59f01d0 LDR r0,|L1.1028|
000230 e3a01458 MOV r1,#0x58000000
000234 e5810008 STR r0,[r1,#8]
;;;116
;;;117 rADCCON|=0x1; //start ADC
000238 e3a00458 MOV r0,#0x58000000
00023c e5900000 LDR r0,[r0,#0]
000240 e3800001 ORR r0,r0,#1
000244 e3a01458 MOV r1,#0x58000000
000248 e5810000 STR r0,[r1,#0]
;;;118
;;;119 while(rADCCON & 0x1); //check if Enable_start is low
00024c e1a00000 NOP
|L1.592|
000250 e3a00458 MOV r0,#0x58000000
000254 e5900000 LDR r0,[r0,#0]
000258 e3100001 TST r0,#1
00025c 1afffffb BNE |L1.592|
;;;120 while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
000260 e1a00000 NOP
|L1.612|
000264 e3a00458 MOV r0,#0x58000000
000268 e5900000 LDR r0,[r0,#0]
00026c e3100c80 TST r0,#0x8000
000270 0afffffb BEQ |L1.612|
;;;121
;;;122 while(!(rSRCPND & (BIT_ADC))); //check if ADC is finished with interrupt bit
000274 e1a00000 NOP
|L1.632|
000278 e3a0044a MOV r0,#0x4a000000
00027c e5900000 LDR r0,[r0,#0]
000280 e3100480 TST r0,#0x80000000
000284 0afffffb BEQ |L1.632|
;;;123
;;;124 xdata=(rADCDAT0&0x3ff);
000288 e3a00458 MOV r0,#0x58000000
00028c e590000c LDR r0,[r0,#0xc]
000290 e1a00b00 MOV r0,r0,LSL #22
000294 e1a00b20 MOV r0,r0,LSR #22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -