?? adc.lst
字號:
ARM COMPILER V2.50a, ADC 28/08/06 09:18:55 PAGE 1
ARM COMPILER V2.50a, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN ADC.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe ADC.c THUMB DEBUG TABS(4)
stmt level source
1 /**********************************************************************
2 ADC.c file
3 LPC213X的ADC函數
4 作者:Computer-lov
5 建立日期:2006-3-25
6 修改日期:2006-3-25
7 最后修改時間:2006-08-25
8 版本:V1.0
9 版權所有,盜版必究。
10 Copyright(C) Computer-lov 2006-2016
11 All rights reserved
12 **********************************************************************/
13
14
15 #include "CPU.H"
16
17 #include "My_type.h"
18 #include "ADC.h"
19 #include "KEYS.H"
20
21 ////////////////////////由軟件啟動一次轉換,并將ADC結果返回//////////////////////////
22 uint16 ADC_software_conversion(void)
23 {
24 1 uint16 result;
25 1
26 1 AD0CR |= 1<<24; //開始啟動一次轉換
27 1 while((AD0DR & 0x80000000)==0); //等待轉換完成
28 1 AD0CR |= 1<<24; //再次啟動一次轉換
29 1 while((AD0DR & 0x80000000)==0); //等待轉換完成
30 1
31 1 result=(AD0DR>>6)&0x3FF; //讀取結果
32 1 return result; //返回結果
33 1 }
34 /////////////////////////////////////////////////////////////////////////////////////
35
36 /////////////////////////////ADC校準/////////////////////////////////////////////////
37 void ADC_calibration(void)
38 {
39 1 //LPC213x的ADC沒有校準功能。
40 1 }
41 //////////////////////////////////////////////////////////////////////////////////
42
43 ////////////////////////////ADC初始化/////////////////////////////////////////////
44 void ADC_init(void)
45 {
46 1 //將P0.30連接到AD0.3
47 1 PINSEL1 &= ~0x20000000;
48 1 PINSEL1 |= 0x10000000;
49 1
50 1 //ADC模塊設置
51 1 AD0CR=(1<<3)|(55<<8)|(1<<21)|(1<<24);
52 1 while((AD0DR & 0x80000000)==0); //等待轉換完成
53 1 }
54 //////////////////////////////////////////////////////////////////////////////////
55
56
57 //////////////////////////選擇通道ch,啟動轉換,并將ADC結果返回///////////////////
58 uint16 read_ADC(uint8 ch)
59 {
ARM COMPILER V2.50a, ADC 28/08/06 09:18:55 PAGE 2
60 1 //設置通道
61 1 AD0CR &= ~0xFF;
62 1 AD0CR |= (1<<ch);
63 1 return ADC_software_conversion();
64 1 }
65 //////////////////////////////////////////////////////////////////////////////////
66
ARM COMPILER V2.50a, ADC 28/08/06 09:18:55 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** PUBLICS:
PUBLIC ADC_init?T
PUBLIC read_ADC?T
PUBLIC ADC_software_conversion?T
PUBLIC ADC_calibration?T
*** CODE SEGMENT '?PR?ADC_software_conversion?T?ADC':
23: {
00000000 ; SCOPE-START
26: AD0CR |= 1<<24; //開始啟動一次轉換
00000000 4800 LDR R2,=0x1000000
00000002 4800 LDR R0,=0xE0034000
00000004 6801 LDR R1,[R0,#0x0]
00000006 4311 ORR R1,R2
00000008 6001 STR R1,[R0,#0x0]
27: while((AD0DR & 0x80000000)==0); //等待轉換完成
0000000A L_1:
0000000A 4800 LDR R0,=0xE0034004
0000000C 6800 LDR R0,[R0,#0x0]
0000000E 4800 LDR R1,=0x80000000
00000010 4208 TST R0,R1
00000012 D0FA BEQ L_1 ; T=0x0000000A
28: AD0CR |= 1<<24; //再次啟動一次轉換
00000014 4800 LDR R2,=0x1000000
00000016 4800 LDR R0,=0xE0034000
00000018 6801 LDR R1,[R0,#0x0]
0000001A 4311 ORR R1,R2
0000001C 6001 STR R1,[R0,#0x0]
29: while((AD0DR & 0x80000000)==0); //等待轉換完成
0000001E L_5:
0000001E 4800 LDR R0,=0xE0034004
00000020 6800 LDR R0,[R0,#0x0]
00000022 4800 LDR R1,=0x80000000
00000024 4208 TST R0,R1
00000026 D0FA BEQ L_5 ; T=0x0000001E
31: result=(AD0DR>>6)&0x3FF; //讀取結果
00000028 4800 LDR R0,=0xE0034004
0000002A 6801 LDR R1,[R0,#0x0]
0000002C 0989 LSR R1,R1,#0x6
0000002E 4800 LDR R0,=0x3FF
00000030 4001 AND R1,R0
00000032 0409 LSL R1,R1,#0x10
00000034 0C09 LSR R1,R1,#0x10
00000036 ---- Variable 'result' assigned to Register 'R1' ----
32: return result; //返回結果
00000036 1C08 MOV R0,R1 ; result
00000038 0400 LSL R0,R0,#0x10 ; result
0000003A 0C00 LSR R0,R0,#0x10
0000003C ; SCOPE-END
33: }
0000003C 4770 BX R14
0000003E ENDP ; 'ADC_software_conversion?T'
*** CODE SEGMENT '?PR?ADC_calibration?T?ADC':
40: }
00000000 4770 BX R14
00000002 ENDP ; 'ADC_calibration?T'
*** CODE SEGMENT '?PR?ADC_init?T?ADC':
47: PINSEL1 &= ~0x20000000;
00000000 4800 LDR R2,=0x20000000
00000002 4800 LDR R0,=0xE002C004
00000004 6801 LDR R1,[R0,#0x0]
00000006 4391 BIC R1,R2
00000008 6001 STR R1,[R0,#0x0]
ARM COMPILER V2.50a, ADC 28/08/06 09:18:55 PAGE 4
48: PINSEL1 |= 0x10000000;
0000000A 4800 LDR R2,=0x10000000
0000000C 4800 LDR R0,=0xE002C004
0000000E 6801 LDR R1,[R0,#0x0]
00000010 4311 ORR R1,R2
00000012 6001 STR R1,[R0,#0x0]
51: AD0CR=(1<<3)|(55<<8)|(1<<21)|(1<<24);
00000014 4800 LDR R1,=0x1203708
00000016 4800 LDR R0,=0xE0034000
00000018 6001 STR R1,[R0,#0x0]
52: while((AD0DR & 0x80000000)==0); //等待轉換完成
0000001A L_10:
0000001A 4800 LDR R0,=0xE0034004
0000001C 6800 LDR R0,[R0,#0x0]
0000001E 4800 LDR R1,=0x80000000
00000020 4208 TST R0,R1
00000022 D0FA BEQ L_10 ; T=0x0000001A
53: }
00000024 4770 BX R14
00000026 ENDP ; 'ADC_init?T'
*** CODE SEGMENT '?PR?read_ADC?T?ADC':
58: uint16 read_ADC(uint8 ch)
00000000 B500 PUSH {LR}
00000002 1C01 MOV R1,R0 ; ch
00000004 ---- Variable 'ch' assigned to Register 'R1' ----
61: AD0CR &= ~0xFF;
00000004 23FF MOV R3,#0xFF
00000006 4800 LDR R0,=0xE0034000
00000008 6802 LDR R2,[R0,#0x0]
0000000A 439A BIC R2,R3
0000000C 6002 STR R2,[R0,#0x0]
62: AD0CR |= (1<<ch);
0000000E 1C08 MOV R0,R1 ; ch
00000010 0600 LSL R0,R0,#0x18 ; ch
00000012 0E00 LSR R0,R0,#0x18
00000014 2201 MOV R2,#0x1
00000016 4082 LSL R2,R0
00000018 4800 LDR R0,=0xE0034000
0000001A 6801 LDR R1,[R0,#0x0]
0000001C 4311 ORR R1,R2
0000001E 6001 STR R1,[R0,#0x0]
63: return ADC_software_conversion();
00000020 F7FF BL ADC_software_conversion?T ; T=0x0001 (1)
00000022 FFEE BL ADC_software_conversion?T ; T=0x0001 (2)
00000024 0400 LSL R0,R0,#0x10 ; ADC_software_conversion?T
00000026 0C00 LSR R0,R0,#0x10
64: }
00000028 BC08 POP {R3}
0000002A 4718 BX R3
0000002C 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 + -