ZigBee_CC2530_03H_ADC寄存器
? ? ADC支持多達(dá)14位模數(shù)轉(zhuǎn)換,有效位數(shù)(ENOB)多達(dá)12位。ADC包括一個(gè)具有多達(dá)8個(gè)獨(dú)立配置通道的模擬多路轉(zhuǎn)換器和參考電壓發(fā)生器,并且通過DMA將轉(zhuǎn)換結(jié)果寫入存儲(chǔ)器。具有多種運(yùn)行模式。ADC主要特征如下:
可選的采樣率,可設(shè)置分辨率(7~12位)。
8個(gè)獨(dú)立的輸入通道,單端或者差分。
參考電壓可選為內(nèi)部、外部單端、外部差分或AVDD5。
中斷請(qǐng)求產(chǎn)生。
轉(zhuǎn)換結(jié)束時(shí)DMA觸發(fā)。
溫度傳感器輸入。
電池測(cè)量能力。
ADC輸入
???? 當(dāng)使用ADC時(shí),端口0引腳必須配置為ADC輸入。ADC輸入最多可以使用8個(gè),這些端口引腳將被稱為AIN0~AIN7引腳。輸入引腳AIN0~AIN7連接至ADC。為了配置端口0的引腳為ADC輸入,寄存器APCCFG的對(duì)應(yīng)位必須設(shè)置為1.該寄存器的默認(rèn)值為選擇端口0的引腳為非ADC輸入,即數(shù)字輸入/輸出。
可以把輸入配置為單端或者差分輸入。在選擇差分輸入的情況下,差分輸入包括輸入對(duì)AIN0~1、AIN2~3、AIN4~5和AIN6~7。注意:這些引腳不能使用負(fù)電源,或者大于VDD(未校準(zhǔn)電源)的電源。
??? 除了輸入引腳AIN0~AIN7,片上溫度傳感器的輸出也可以選擇作為用于溫度測(cè)量的ADC輸入。為了實(shí)現(xiàn)作為溫度測(cè)量的ADC輸入,寄存器TR0.ADCTM和ATEST.ATESTCTRL必須分別進(jìn)行設(shè)置。
??? 還可以選擇一個(gè)對(duì)應(yīng)AVDD5/3的電壓作為ADC輸入。這個(gè)輸入允許實(shí)現(xiàn)例如要求電池檢測(cè)功能的應(yīng)用。注意,這種情況下的參考電壓不能由電池電壓決定,例如,AVDD5電壓不能作為參考電壓。
?? 單端輸入AIN0~AIN7以通道號(hào)碼0~7表示。通道8~11表示由AIN0~1、AIN2~3、AIN4~5和AIN6~7組成的差分輸入。通道號(hào)碼12~15分別表示GND(12)、溫度傳感器(14)和AVDD5/3(15)。這些值在ADCCON2.SCH和ADCCON3.SCH域中使用。
??? ADC可以配置為使用通用I/O引腳P2.0作為一個(gè)外部觸發(fā)來開始轉(zhuǎn)換。當(dāng)P2.0用于ADC外部觸發(fā)時(shí),它必須配置為輸入模式下的通用I/O。
ADC運(yùn)行模式
?? ADC具有三個(gè)控制寄存器,即ADCCON1、ADCCON2和ADCCON3。這些寄存器用于配置ADC和報(bào)告狀態(tài)。
(1)ADCCON1控制寄存器
????
位
名稱
復(fù)位
讀/寫
描述
7
EOC
0
R/H0
轉(zhuǎn)換結(jié)束,當(dāng)ADCH被讀取時(shí)清除。如果在前一個(gè)數(shù)據(jù)被讀取之前,已經(jīng)完成了一個(gè)新的轉(zhuǎn)換,該位保持為高
0:轉(zhuǎn)換未完成
1:轉(zhuǎn)換完成
6
ST
0
?
開始轉(zhuǎn)換。在轉(zhuǎn)換完成之前都讀為1
0:沒有進(jìn)行中的轉(zhuǎn)換
1:如果ADCCON1.STSEL = 11且沒有序列正在進(jìn)行轉(zhuǎn)換,就啟動(dòng)一個(gè)轉(zhuǎn)換序列
5:4
STSEL[1:0]
11
R/W1
啟動(dòng)選擇。選擇哪個(gè)事件將啟動(dòng)一個(gè)新的轉(zhuǎn)換序列
00:P2.0引腳上的外部觸發(fā);
01:全速。不等待觸發(fā)
10:定時(shí)器1通道0比較事件
11:ADCCON1.ST = 1
3:2
RCTRL[1:0]
00
R/W
控制16位隨機(jī)數(shù)發(fā)生器。如果寫為01,當(dāng)操作完成后該設(shè)置將自動(dòng)返回0x00
00:正常運(yùn)行
01:同步LFSR一次
10:保留
11:停止,隨機(jī)數(shù)發(fā)生器關(guān)閉
1:0
?
11
R/W
未使用??偸侵脼?1
??? ADCCON1.EOC位是一個(gè)狀態(tài)位,當(dāng)一個(gè)轉(zhuǎn)換結(jié)束時(shí)該位置1,當(dāng)讀取ADCH時(shí),清除該位。
??? ADCCON1.ST位用于啟動(dòng)一個(gè)轉(zhuǎn)換蓄力。當(dāng)該位置1,ADCCON1.STSEL位為11,且當(dāng)前沒有正在進(jìn)行的轉(zhuǎn)換時(shí),將啟動(dòng)一個(gè)序列。當(dāng)這個(gè)序列轉(zhuǎn)換完成,該位自動(dòng)清除。
?? ADCCON1.STSEL位選擇哪個(gè)事件將啟動(dòng)一個(gè)新的轉(zhuǎn)換序列。可以被選擇的事件選項(xiàng)有:外部引腳P2.0上的上升沿,前一個(gè)序列的結(jié)束,定時(shí)器1通道0比較事件或ADCCON1.ST置1.
(2)ADCCON2控制寄存器
位
名稱
復(fù)位
讀寫
描述
7:6
SREF[1:0]
00
R/W
選擇用于轉(zhuǎn)換序列的基準(zhǔn)電壓
00:內(nèi)部基準(zhǔn)
01:AIN7引腳上的外部基準(zhǔn)
10:AVDD5引腳
11:AIN6~AIN7差分輸入上的外部基準(zhǔn)
5:4
SDIV[1:0]
01
R/W
為包含在轉(zhuǎn)換序列里的通道選擇抽取率,抽取率也決定了分辨率和完成一個(gè)轉(zhuǎn)換所需的時(shí)間
00:64抽取率(7位分辨率)
01:128抽取率(9位分辨率)
10:: 256抽取率(10位分辨率)
11:512抽取率(12位分別率)
3:0
SCH[3:0]
0000
R/W
序列通道選擇
0000:AIN0;0001:AIN1;0010:AIN2;0011:AIN3;
0100:AIN4;0101:AIN5;0110:AIN6;0111:AIN7
1000:AIN0-AIN1;1001:AIN2-AIN3;1010:AIN4-AIN5
1011:AIN6-AIN7;1100:GND;1101:保留;
1110:溫度傳感器;1111:VDD/3
?
?? ADCCON2.SREF用于選擇基準(zhǔn)電壓,只有在沒有選擇進(jìn)行的時(shí)候才能改變基準(zhǔn)電壓
?? ADCCON2.SDIV位選擇抽取率,因此也設(shè)置了分辨率、完成一個(gè)轉(zhuǎn)換所需的時(shí)間和采樣率。只有在沒有轉(zhuǎn)換的時(shí)候才能設(shè)置抽取率
(3)ADCCON3控制寄存器
位
名稱
復(fù)位
讀寫
描述
7:6
EREF[1:0]
00
R/W
選擇用于單個(gè)轉(zhuǎn)換的基準(zhǔn)電壓
00:內(nèi)部基準(zhǔn)
01:AIN7引腳上的外部基準(zhǔn)
10:AVDD5引腳
11:AIN6~AIN7差分輸入上的外部基準(zhǔn)
5:4
EDIV[1:0]
01
R/W
為單個(gè)轉(zhuǎn)換選擇抽取率,抽取率也決定了分辨率和完成一個(gè)轉(zhuǎn)換所需的時(shí)間
00:64抽取率(7位分辨率)
01:128抽取率(9位分辨率)
10:: 256抽取率(10位分辨率)
11:512抽取率(12位分別率)
3:0
ECH[3:0]
0000
R/W
單個(gè)通道選擇
0000:AIN0;0001:AIN1;0010:AIN2;0011:AIN3;
0100:AIN4;0101:AIN5;0110:AIN6;0111:AIN7
1000:AIN0-AIN1;1001:AIN2-AIN3;1010:AIN4-AIN5
1011:AIN6-AIN7;1100:GND;1101:保留;
1110:溫度傳感器;1111:VDD/3
?? ADCCON3寄存器控制單個(gè)轉(zhuǎn)換的通道號(hào)碼、基準(zhǔn)電壓和抽取率。在ADCCON3寄存器更新后,立即進(jìn)行單個(gè)轉(zhuǎn)換;或者如果有一個(gè)轉(zhuǎn)換序列正在進(jìn)行,那個(gè)在這個(gè)轉(zhuǎn)換序列完成后立即進(jìn)行單個(gè)轉(zhuǎn)換。
SET_MAIN_CLOCK_SOURCE(CRYSTAL);???//設(shè)置系統(tǒng)時(shí)鐘源為32MHz晶體振蕩器 /*??AIN0通道采樣???*/ ADC_ENABLE_CHANNEL(ADC_AIN0); /*配置ADCCON3寄存器以便在ADCCON1.STSEL?=?11(復(fù)位默認(rèn)值)且ADCCON1.ST?=?1時(shí)進(jìn)行單一轉(zhuǎn)換*/ /*參考電壓:AVDD_SOC引腳上的電壓*/ /*抽取率:512*/ /*ADC輸入通道:AIN0*/ ADC_SINGLE_CONVERSION(ADC_REF_AVDD?|?ADC_14_BIT?|?ADC_AIN0); ADC_SAMPLE_SINGLE();???????????//啟動(dòng)一個(gè)單一轉(zhuǎn)換 while(!ADC_SAMPLE_READY());????//等待轉(zhuǎn)換完成 ADC_ENABLE_CHANNEL(ADC_AIN0);??//禁止AIN0 adc0_value[0]?=?ADCL; adc0_value[1]?=?ADCH; adc0_value[0]?=?adc0_value[0]?>>?2;