ZigBee_CC2530_03H_ADC寄存器
扫描二维码
随时随地手机看文章
ADC支持多达14位模数转换,有效位数(ENOB)多达12位。ADC包括一个具有多达8个独立配置通道的模拟多路转换器和参考电压发生器,并且通过DMA将转换结果写入存储器。具有多种运行模式。ADC主要特征如下:
可选的采样率,可设置分辨率(7~12位)。
8个独立的输入通道,单端或者差分。
参考电压可选为内部、外部单端、外部差分或AVDD5。
中断请求产生。
转换结束时DMA触发。
温度传感器输入。
电池测量能力。
ADC输入
当使用ADC时,端口0引脚必须配置为ADC输入。ADC输入最多可以使用8个,这些端口引脚将被称为AIN0~AIN7引脚。输入引脚AIN0~AIN7连接至ADC。为了配置端口0的引脚为ADC输入,寄存器APCCFG的对应位必须设置为1.该寄存器的默认值为选择端口0的引脚为非ADC输入,即数字输入/输出。
可以把输入配置为单端或者差分输入。在选择差分输入的情况下,差分输入包括输入对AIN0~1、AIN2~3、AIN4~5和AIN6~7。注意:这些引脚不能使用负电源,或者大于VDD(未校准电源)的电源。
除了输入引脚AIN0~AIN7,片上温度传感器的输出也可以选择作为用于温度测量的ADC输入。为了实现作为温度测量的ADC输入,寄存器TR0.ADCTM和ATEST.ATESTCTRL必须分别进行设置。
还可以选择一个对应AVDD5/3的电压作为ADC输入。这个输入允许实现例如要求电池检测功能的应用。注意,这种情况下的参考电压不能由电池电压决定,例如,AVDD5电压不能作为参考电压。
单端输入AIN0~AIN7以通道号码0~7表示。通道8~11表示由AIN0~1、AIN2~3、AIN4~5和AIN6~7组成的差分输入。通道号码12~15分别表示GND(12)、温度传感器(14)和AVDD5/3(15)。这些值在ADCCON2.SCH和ADCCON3.SCH域中使用。
ADC可以配置为使用通用I/O引脚P2.0作为一个外部触发来开始转换。当P2.0用于ADC外部触发时,它必须配置为输入模式下的通用I/O。
ADC运行模式
ADC具有三个控制寄存器,即ADCCON1、ADCCON2和ADCCON3。这些寄存器用于配置ADC和报告状态。
(1)ADCCON1控制寄存器
位
名称
复位
读/写
描述
7
EOC
0
R/H0
转换结束,当ADCH被读取时清除。如果在前一个数据被读取之前,已经完成了一个新的转换,该位保持为高
0:转换未完成
1:转换完成
6
ST
0
开始转换。在转换完成之前都读为1
0:没有进行中的转换
1:如果ADCCON1.STSEL = 11且没有序列正在进行转换,就启动一个转换序列
5:4
STSEL[1:0]
11
R/W1
启动选择。选择哪个事件将启动一个新的转换序列
00:P2.0引脚上的外部触发;
01:全速。不等待触发
10:定时器1通道0比较事件
11:ADCCON1.ST = 1
3:2
RCTRL[1:0]
00
R/W
控制16位随机数发生器。如果写为01,当操作完成后该设置将自动返回0x00
00:正常运行
01:同步LFSR一次
10:保留
11:停止,随机数发生器关闭
1:0
11
R/W
未使用。总是置为11
ADCCON1.EOC位是一个状态位,当一个转换结束时该位置1,当读取ADCH时,清除该位。
ADCCON1.ST位用于启动一个转换蓄力。当该位置1,ADCCON1.STSEL位为11,且当前没有正在进行的转换时,将启动一个序列。当这个序列转换完成,该位自动清除。
ADCCON1.STSEL位选择哪个事件将启动一个新的转换序列。可以被选择的事件选项有:外部引脚P2.0上的上升沿,前一个序列的结束,定时器1通道0比较事件或ADCCON1.ST置1.
(2)ADCCON2控制寄存器
位
名称
复位
读写
描述
7:6
SREF[1:0]
00
R/W
选择用于转换序列的基准电压
00:内部基准
01:AIN7引脚上的外部基准
10:AVDD5引脚
11:AIN6~AIN7差分输入上的外部基准
5:4
SDIV[1:0]
01
R/W
为包含在转换序列里的通道选择抽取率,抽取率也决定了分辨率和完成一个转换所需的时间
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用于选择基准电压,只有在没有选择进行的时候才能改变基准电压
ADCCON2.SDIV位选择抽取率,因此也设置了分辨率、完成一个转换所需的时间和采样率。只有在没有转换的时候才能设置抽取率
(3)ADCCON3控制寄存器
位
名称
复位
读写
描述
7:6
EREF[1:0]
00
R/W
选择用于单个转换的基准电压
00:内部基准
01:AIN7引脚上的外部基准
10:AVDD5引脚
11:AIN6~AIN7差分输入上的外部基准
5:4
EDIV[1:0]
01
R/W
为单个转换选择抽取率,抽取率也决定了分辨率和完成一个转换所需的时间
00:64抽取率(7位分辨率)
01:128抽取率(9位分辨率)
10:: 256抽取率(10位分辨率)
11:512抽取率(12位分别率)
3:0
ECH[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
ADCCON3寄存器控制单个转换的通道号码、基准电压和抽取率。在ADCCON3寄存器更新后,立即进行单个转换;或者如果有一个转换序列正在进行,那个在这个转换序列完成后立即进行单个转换。
SET_MAIN_CLOCK_SOURCE(CRYSTAL); //设置系统时钟源为32MHz晶体振荡器 /* AIN0通道采样 */ ADC_ENABLE_CHANNEL(ADC_AIN0); /*配置ADCCON3寄存器以便在ADCCON1.STSEL = 11(复位默认值)且ADCCON1.ST = 1时进行单一转换*/ /*参考电压:AVDD_SOC引脚上的电压*/ /*抽取率:512*/ /*ADC输入通道:AIN0*/ ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_14_BIT | ADC_AIN0); ADC_SAMPLE_SINGLE(); //启动一个单一转换 while(!ADC_SAMPLE_READY()); //等待转换完成 ADC_ENABLE_CHANNEL(ADC_AIN0); //禁止AIN0 adc0_value[0] = ADCL; adc0_value[1] = ADCH; adc0_value[0] = adc0_value[0] >> 2;