📄 adc.lst
字号:
42: if(result==0x01)
0000001E 1C10 MOV R0,R2 ; result
00000020 0400 LSL R0,R0,#0x10 ; result
00000022 0C00 LSR R0,R0,#0x10
00000024 2801 CMP R0,#0x1
00000026 D106 BNE L_6 ; T=0x00000036
44: ADCOF=i-3;
00000028 1C18 MOV R0,R3 ; i
0000002A 0401 LSL R1,R0,#0x10 ; i
0000002C 0C09 LSR R1,R1,#0x10
0000002E 3903 SUB R1,#0x3
00000030 4800 LDR R0,=0xFFFF0534
00000032 6001 STR R1,[R0,#0x0]
45: break;
00000034 E008 B L_7 ; T=0x00000048
47: }
00000036 L_6:
00000036 3301 ADD R3,#0x1
00000038 041B LSL R3,R3,#0x10
0000003A 0C1B LSR R3,R3,#0x10
0000003C L_8:
0000003C 1C18 MOV R0,R3 ; i
0000003E 0400 LSL R0,R0,#0x10 ; i
00000040 0C00 LSR R0,R0,#0x10
00000042 4800 LDR R1,=0x3FF
00000044 4288 CMP R0,R1
00000046 D3E2 BCC L_9 ; T=0x0000000E
00000048 L_7:
48: ADCCP=0x12; //将输入连接到内部参考电压
00000048 2112 MOV R1,#0x12
0000004A 4800 LDR R0,=0xFFFF0504
0000004C 6001 STR R1,[R0,#0x0]
49: for(i=0;i<0x03FF;i++) //增益校准
0000004E 1C23 MOV R3,R4 ; i
00000050 E02A B L_14 ; T=0x000000A8
00000052 L_15:
51: ADCGN=i; //设置ADCGN的值
00000052 1C18 MOV R0,R3 ; i
00000054 0401 LSL R1,R0,#0x10 ; i
00000056 0C09 LSR R1,R1,#0x10
00000058 4800 LDR R0,=0xFFFF0530
0000005A 6001 STR R1,[R0,#0x0]
52: result=ADC_software_conversion();
0000005C F7FF BL ADC_software_conversion?T ; T=0x0001 (1)
0000005E FFD0 BL ADC_software_conversion?T ; T=0x0001 (2)
00000060 1C02 MOV R2,R0 ; result
53: if(result==4094)
00000062 0400 LSL R0,R0,#0x10 ; result
00000064 0C00 LSR R0,R0,#0x10
00000066 4800 LDR R1,=0xFFE
00000068 4288 CMP R0,R1
0000006A D11A BNE L_12 ; T=0x000000A2
55: ADCGN=i+6; //再将ADCGN加的一点
0000006C 1C18 MOV R0,R3 ; i
0000006E 0401 LSL R1,R0,#0x10 ; i
00000070 0C09 LSR R1,R1,#0x10
00000072 3106 ADD R1,#0x6
00000074 4800 LDR R0,=0xFFFF0530
00000076 6001 STR R1,[R0,#0x0]
56: result=ADC_software_conversion();
00000078 F7FF BL ADC_software_conversion?T ; T=0x0001 (1)
0000007A FFC2 BL ADC_software_conversion?T ; T=0x0001 (2)
0000007C 1C02 MOV R2,R0 ; result
57: if(result==4095)
ARM COMPILER V2.50a, ADC 16/05/06 14:55:46 PAGE 5
0000007E 0400 LSL R0,R0,#0x10 ; result
00000080 0C00 LSR R0,R0,#0x10
00000082 4800 LDR R1,=0xFFF
00000084 4288 CMP R0,R1
00000086 D106 BNE L_18 ; T=0x00000096
59: ADCGN=i+4;
00000088 1C18 MOV R0,R3 ; i
0000008A 0401 LSL R1,R0,#0x10 ; i
0000008C 0C09 LSR R1,R1,#0x10
0000008E 3104 ADD R1,#0x4
00000090 4800 LDR R0,=0xFFFF0530
00000092 6001 STR R1,[R0,#0x0]
60: break;
00000094 E00E B L_13 ; T=0x000000B4
61: }
00000096 L_18:
64: ADCGN=i-4;
00000096 1C18 MOV R0,R3 ; i
00000098 0401 LSL R1,R0,#0x10 ; i
0000009A 0C09 LSR R1,R1,#0x10
0000009C 3904 SUB R1,#0x4
0000009E 4800 LDR R0,=0xFFFF0530
000000A0 6001 STR R1,[R0,#0x0]
67: }
000000A2 L_12:
000000A2 3301 ADD R3,#0x1
000000A4 041B LSL R3,R3,#0x10
000000A6 0C1B LSR R3,R3,#0x10
000000A8 L_14:
000000A8 1C18 MOV R0,R3 ; i
000000AA 0400 LSL R0,R0,#0x10 ; i
000000AC 0C00 LSR R0,R0,#0x10
000000AE 4800 LDR R1,=0x3FF
000000B0 4288 CMP R0,R1
000000B2 D3CE BCC L_15 ; T=0x00000052
000000B4 L_13:
000000B4 ; SCOPE-END
68: }
000000B4 BC10 POP {R4}
000000B6 BC08 POP {R3}
000000B8 4718 BX R3
000000BA ENDP ; 'ADC_calibration?T'
*** CODE SEGMENT '?PR?ADC_init?T?ADC':
72: void ADC_init(void)
00000000 B510 PUSH {R4,LR}
74: ADCCON=0x0023; //ADC时钟1MHz,打开ADC电源,单端模式,并选择软件转换模式
00000002 2123 MOV R1,#0x23
00000004 4800 LDR R0,=0xFFFF0500
00000006 6001 STR R1,[R0,#0x0]
75: ADCCP=0x00; //通道0
00000008 2400 MOV R4,#0x0
0000000A 4800 LDR R0,=0xFFFF0504
0000000C 6004 STR R4,[R0,#0x0]
76: ADCCN=0x00; //通道0
0000000E 4800 LDR R0,=0xFFFF0508
00000010 6004 STR R4,[R0,#0x0]
77: REFCON=0x01; //使用内部2.5V参考电压
00000012 2101 MOV R1,#0x1
00000014 4800 LDR R0,=0xFFFF048C
00000016 6001 STR R1,[R0,#0x0]
78: ADC_calibration(); //ADC校准
00000018 F7FF BL ADC_calibration?T ; T=0x0001 (1)
0000001A FFF2 BL ADC_calibration?T ; T=0x0001 (2)
79: ADCCP=0x00; //选择通道0
0000001C 4800 LDR R0,=0xFFFF0504
0000001E 6004 STR R4,[R0,#0x0]
ARM COMPILER V2.50a, ADC 16/05/06 14:55:46 PAGE 6
80: }
00000020 BC10 POP {R4}
00000022 BC08 POP {R3}
00000024 4718 BX R3
00000026 ENDP ; 'ADC_init?T'
*** CODE SEGMENT '?PR?read_ADC?T?ADC':
85: uint16 read_ADC(uint8 ch)
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; ch
00000004 ---- Variable 'ch' assigned to Register 'R1' ----
87: ADCCP=ch & 0x1F; //设置通道
00000004 1C08 MOV R0,R1 ; ch
00000006 0601 LSL R1,R0,#0x18 ; ch
00000008 0E09 LSR R1,R1,#0x18
0000000A 201F MOV R0,#0x1F
0000000C 4001 AND R1,R0
0000000E 4800 LDR R0,=0xFFFF0504
00000010 6001 STR R1,[R0,#0x0]
88: return ADC_software_conversion();
00000012 F7FF BL ADC_software_conversion?T ; T=0x0001 (1)
00000014 FFF5 BL ADC_software_conversion?T ; T=0x0001 (2)
00000016 0400 LSL R0,R0,#0x10 ; ADC_software_conversion?T
00000018 0C00 LSR R0,R0,#0x10
89: }
0000001A BC08 POP {R3}
0000001C 4718 BX R3
0000001E ENDP ; 'read_ADC?T'
Module Information Static
----------------------------------
code size = ------
data size = ------
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 + -