📄 adc.txt
字号:
0002ec e3a01480 MOV r1,#0x80000000
0002f0 e1c22001 BIC r2,r2,r1
0002f4 e5821010 STR r1,[r2,#0x10]
;;;134
;;;135
;;;136 }
0002f8 e8bd0007 LDMFD sp!,{r0-r2}
0002fc e25ef004 SUBS pc,lr,#4
ENDP
AdcDisplayFunction PROC
;;;199 void AdcDisplayFunction(void)
;;;200 {
000300 e92d4010 STMFD sp!,{r4,lr}
;;;201 int i;
;;;202
;;;203 i=0;
000304 e3a04000 MOV r4,#0
;;;204 Uart_Printf("\n\n");
000308 e28f0064 ADR r0,|L1.884|
00030c ebfffffe BL _printf
;;;205 while(1) { //display menu
000310 e1a00000 NOP
|L1.788|
000314 e1a00000 NOP
;;;206 Uart_Printf("%2d:%s",i,adc_function[i][1]);
000318 e59f0058 LDR r0,|L1.888|
00031c e0800184 ADD r0,r0,r4,LSL #3
000320 e1a01004 MOV r1,r4
000324 e5902004 LDR r2,[r0,#4]
000328 e28f004c ADR r0,|L1.892|
00032c ebfffffe BL _printf
;;;207 i++;
000330 e2844001 ADD r4,r4,#1
;;;208 if((int)(adc_function[i][0])==0) {
000334 e59f003c LDR r0,|L1.888|
000338 e7900184 LDR r0,[r0,r4,LSL #3]
00033c e3500000 CMP r0,#0
000340 1a000002 BNE |L1.848|
;;;209 Uart_Printf("\n");
000344 e24f0fb1 ADR r0,|L1.136|
000348 ebfffffe BL _printf
;;;210 break;
00034c ea000004 B |L1.868|
;;;211 }
;;;212 if((i%2)==0) Uart_Printf("\n");
|L1.848|
000350 e3140001 TST r4,#1
000354 1a000001 BNE |L1.864|
000358 e24f0fb6 ADR r0,|L1.136|
00035c ebfffffe BL _printf
;;;213 }
|L1.864|
000360 eaffffeb B |L1.788|
;;;214 }
|L1.868|
000364 e8bd8010 LDMFD sp!,{r4,pc}
|L1.872|
000368 00000008 DCD ||.bss$2|| + 8
|L1.876|
00036c 0000000c DCD ||.bss$2|| + 12
|L1.880|
000370 45800000 DCD 0x45800000
|L1.884|
000374 00000a0a DCB "\n\n\0\0"
|L1.888|
000378 00000000 DCD adc_function
|L1.892|
00037c 3a643225 DCB "%2d:"
000380 00007325 DCB "%s\0\0"
ENDP
Ch30_ADC PROC
;;;216 void Ch30_ADC(void)
;;;217 {
000384 e92d4010 STMFD sp!,{r4,lr}
;;;218 int i;
;;;219
;;;220 while(1) {
000388 e1a00000 NOP
|L1.908|
00038c e1a00000 NOP
;;;221 AdcDisplayFunction();
000390 ebfffffe BL AdcDisplayFunction
;;;222 Uart_Printf("\nSelect(-1 to exit): ");
000394 e28f0038 ADR r0,|L1.980|
000398 ebfffffe BL _printf
;;;223 i = Uart_GetIntNum();
00039c ebfffffe BL Uart_GetIntNum
0003a0 e1a04000 MOV r4,r0
;;;224 //Uart_Printf("IN:%d.\n\n", i);
;;;225 if(i==-1) break;
0003a4 e3740001 CMN r4,#1
0003a8 1a000000 BNE |L1.944|
0003ac ea000007 B |L1.976|
;;;226
;;;227 if(i>=0 && (i<(sizeof(adc_function)/8)) )
|L1.944|
0003b0 e3540000 CMP r4,#0
0003b4 ba000004 BLT |L1.972|
0003b8 e3540006 CMP r4,#6
0003bc 2a000002 BCS |L1.972|
;;;228 ( (void (*)(void)) (adc_function[i][0]) )(); // execute selected function.
0003c0 e51f1050 LDR r1,|L1.888|
0003c4 e7910184 LDR r0,[r1,r4,LSL #3]
0003c8 e12fff30 BLX r0
;;;229 }
|L1.972|
0003cc eaffffee B |L1.908|
;;;230
;;;231 }
|L1.976|
0003d0 e8bd8010 LDMFD sp!,{r4,pc}
|L1.980|
0003d4 6c65530a DCB "\nSel"
0003d8 28746365 DCB "ect("
0003dc 7420312d DCB "-1 t"
0003e0 7865206f DCB "o ex"
0003e4 3a297469 DCB "it):"
0003e8 00000020 DCB " \0\0\0"
ENDP
ReadAdc PROC
;;;355 int ReadAdc(int ch)
;;;356 {
0003ec e1a01000 MOV r1,r0
;;;357 int i;
;;;358 static int prevCh=-1;
;;;359
;;;360 rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel
0003f0 e59f0194 LDR r0,|L1.1420|
0003f4 e5900000 LDR r0,[r0,#0] ; preScaler
0003f8 e1a00300 MOV r0,r0,LSL #6
0003fc e1800181 ORR r0,r0,r1,LSL #3
000400 e3800c40 ORR r0,r0,#0x4000
000404 e51f309c LDR r3,|L1.880|
000408 e5830000 STR r0,[r3,#0]
;;;361
;;;362 if(prevCh!=ch)
00040c e59f017c LDR r0,|L1.1424|
000410 e5900000 LDR r0,[r0,#0] ; prevCh@ReadAdc_0
000414 e1500001 CMP r0,r1
000418 0a00000d BEQ |L1.1108|
;;;363 {
;;;364 rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel
00041c e59f0168 LDR r0,|L1.1420|
000420 e5900000 LDR r0,[r0,#0] ; preScaler
000424 e1a00300 MOV r0,r0,LSL #6
000428 e1800181 ORR r0,r0,r1,LSL #3
00042c e3800c40 ORR r0,r0,#0x4000
000430 e5830000 STR r0,[r3,#0]
;;;365 for(i=0;i<LOOPADC;i++); //delay to set up the next channel
000434 e3a02000 MOV r2,#0
|L1.1080|
000438 e252cd80 SUBS r12,r2,#0x2000
00043c a25cce71 SUBGES r12,r12,#0x710
000440 aa000001 BGE |L1.1100|
000444 e2822001 ADD r2,r2,#1
000448 eafffffa B |L1.1080|
;;;366 prevCh=ch;
|L1.1100|
00044c e59f013c LDR r0,|L1.1424|
000450 e5801000 STR r1,[r0,#0] ; prevCh@ReadAdc_0
;;;367 }
;;;368 rADCCON|=0x1; //start ADC
|L1.1108|
000454 e51f00ec LDR r0,|L1.880|
000458 e5900000 LDR r0,[r0,#0]
00045c e3800001 ORR r0,r0,#1
000460 e51f30f8 LDR r3,|L1.880|
000464 e5830000 STR r0,[r3,#0]
;;;369
;;;370 while(rADCCON & 0x1); //check if Enable_start is low, waiting for 0
000468 e1a00000 NOP
|L1.1132|
00046c e51f0104 LDR r0,|L1.880|
000470 e5900000 LDR r0,[r0,#0]
000474 e3100001 TST r0,#1
000478 1afffffb BNE |L1.1132|
;;;371 while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, waiting for 1
00047c e1a00000 NOP
|L1.1152|
000480 e51f0118 LDR r0,|L1.880|
000484 e5900000 LDR r0,[r0,#0]
000488 e3100c80 TST r0,#0x8000
00048c 0afffffb BEQ |L1.1152|
;;;372
;;;373 return ( (int)rADCDAX & 0x3ff );
000490 e51f0128 LDR r0,|L1.880|
000494 e590000c LDR r0,[r0,#0xc]
000498 e1a00b00 MOV r0,r0,LSL #22
00049c e1a00b20 MOV r0,r0,LSR #22
;;;374 }
0004a0 e12fff1e BX lr
ENDP
Test_Adc PROC
;;;235 void Test_Adc(void)
;;;236 {
0004a4 e92d4ff0 STMFD sp!,{r4-r11,lr}
0004a8 e24dd024 SUB sp,sp,#0x24
;;;237 int i,key,j;
;;;238 int a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0; //Initialize variables
0004ac e3a00000 MOV r0,#0
0004b0 e58d0018 STR r0,[sp,#0x18]
0004b4 e3a00000 MOV r0,#0
0004b8 e58d0014 STR r0,[sp,#0x14]
0004bc e3a05000 MOV r5,#0
0004c0 e3a06000 MOV r6,#0
0004c4 e3a07000 MOV r7,#0
0004c8 e3a08000 MOV r8,#0
0004cc e3a09000 MOV r9,#0
0004d0 e3a0a000 MOV r10,#0
;;;239 int value;
;;;240
;;;241 Uart_Printf("[ ADC_IN Test ]\n");
0004d4 e28f00b8 ADR r0,|L1.1428|
0004d8 ebfffffe BL _printf
;;;242 Uart_Printf("0. Dispaly Count 100 1. Continued ...\n\n");
0004dc e28f00c4 ADR r0,|L1.1448|
0004e0 ebfffffe BL _printf
;;;243 Uart_Printf("Select : ");
0004e4 e28f00e8 ADR r0,|L1.1492|
0004e8 ebfffffe BL _printf
;;;244 key = Uart_GetIntNum();
0004ec ebfffffe BL Uart_GetIntNum
0004f0 e58d0020 STR r0,[sp,#0x20]
;;;245 Uart_Printf("\n\n");
0004f4 e24f0f62 ADR r0,|L1.884|
0004f8 ebfffffe BL _printf
;;;246
;;;247 Uart_Printf("The ADC_IN are adjusted to the following values.\n");
0004fc e28f00dc ADR r0,|L1.1504|
000500 ebfffffe BL _printf
;;;248 Uart_Printf("Push any key to exit!!!\n");
000504 e28f0f42 ADR r0,|L1.1556|
000508 ebfffffe BL _printf
;;;249
;;;250 Uart_Printf("ADC conv. freq. = %dHz\n",ADC_FREQ);
00050c e59f111c LDR r1,|L1.1584|
000510 e28f0f47 ADR r0,|L1.1588|
000514 ebfffffe BL _printf
;;;251 preScaler = PCLK/(ADC_FREQ) -1; //PCLK:50.7MHz
000518 e3a00013 MOV r0,#0x13
00051c e59f1068 LDR r1,|L1.1420|
000520 e5810000 STR r0,[r1,#0] ; preScaler
;;;252 Uart_Printf("preScaler:%d\n", preScaler);
000524 e59f0060 LDR r0,|L1.1420|
000528 e5901000 LDR r1,[r0,#0] ; preScaler
00052c e28f0f46 ADR r0,|L1.1612|
000530 ebfffffe BL _printf
;;;253 //ADC conversion time = 5CYCLES*(1/(ADC Freq.)), ADC Freq. = PCLK/(ADCPSR+1)
;;;254
;;;255 //pISR_ADC_PENUP_DOWN=(unsigned)Adc_Manual;
;;;256 //rINTMSK=~(BIT_ADC_PENUP_DOWN);
;;;257 //rINTSUBMSK=~(BIT_SUB_ADC|BIT_SUB_PENUP|BIT_SUB_PENDN);
;;;258
;;;259 Uart_Printf("PCLK/ADC_FREQ - 1 = %d\n",preScaler);
000534 e59f0050 LDR r0,|L1.1420|
000538 e5901000 LDR r1,[r0,#0] ; preScaler
00053c e28f0f46 ADR r0,|L1.1628|
000540 ebfffffe BL _printf
;;;260
;;;261 Uart_Printf("rADCCON:%x\n", rADCCON);
000544 e51f01dc LDR r0,|L1.880|
000548 e5900000 LDR r0,[r0,#0]
00054c e1a01000 MOV r1,r0
000550 e28f0f47 ADR r0,|L1.1652|
000554 ebfffffe BL _printf
;;;262 if (key == 0)
000558 e59d0020 LDR r0,[sp,#0x20]
00055c e3500000 CMP r0,#0
000560 1a00005f BNE |L1.1764|
;;;263 {
;;;264
;;;265 Uart_Printf("Select the channel[0~3]:\n");
000564 e28f0f45 ADR r0,|L1.1664|
000568 ebfffffe BL _printf
;;;266 j=Uart_GetIntNum();
00056c ebfffffe BL Uart_GetIntNum
000570 e58d001c STR r0,[sp,#0x1c]
;;;267
;;;268 while(1) {
000574 e1a00000 NOP
|L1.1400|
000578 e1a00000 NOP
;;;269 for(i=0; i<REQCNT; i++) {
00057c e3a04000 MOV r4,#0
|L1.1408|
000580 e3540064 CMP r4,#0x64
000584 aa00004d BGE |L1.1728|
000588 ea000045 B |L1.1700|
|L1.1420|
00058c 00000000 DCD ||.bss$2||
|L1.1424|
000590 00000030 DCD ||.data$0|| + 48
|L1.1428|
000594 4441205b DCB "[ AD"
000598 4e495f43 DCB "C_IN"
00059c 73655420 DCB " Tes"
0005a0 0a5d2074 DCB "t ]\n"
0005a4 00000000 DCB "\0\0\0\0"
|L1.1448|
0005a8 44202e30 DCB "0. D"
0005ac 61707369 DCB "ispa"
0005b0 4320796c DCB "ly C"
0005b4 746e756f DCB "ount"
0005b8 30303120 DCB " 100"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -