一、简单介绍:
adc12模块中是由以下部分组成:输入的16路模拟开关(外部8路,内部4路),adc内部电压参考源,adc12内核,adc时钟源部分,采集与保持/触发源部分,adc数据输出部分,adc控制寄存器等组成。
四种采样模式:
(1)单通道单次转换模式
(2)序列通道单词转换模式
(3)单通道多次转换模式
(4)序列通道多次转换模式
个人觉得(3)模式应该是使用较多的,
对选定的通道进行多次转换,直到关闭该功能或enc=0。进行如下设置:
x=csstartadd,指向转换开始地址
adc12memx存放转换结果
adc12mctlx寄存器中定义了通道和参考电压
在这种模式下,改变转换模式,不必先停止转换,在当前正在进行的转换结束后,可改变转换模式。该模式的停止可有如下几种办法:
使用conseq=0的办法,改变为单通道单次模式。
使用enc=0直接使当前转换完成后停止。
使用单通道单次模式替换当前模式,同时使enc=0
adc控制寄存器
adc12ctl0 转换控制寄存器0
adc12ctl1 转换控制寄存器1
adc12ie 中断使能寄存器
adc12ifg 中断标志寄存器
adc12iv 中断向量寄存器
adc12mem0-15 存储控制寄存器0-15
adc12mctl0-15 存储控制寄存器0-15
一般做法:在大循环里开始转换,转换完毕引发中断,我们在中断里记录并处理转换数据。
二、adc12寄存器说明
寄存器类型 寄存器缩写 寄存器含义
转换控制寄存器 adc12ctl0 转换控制寄存器0
adc12ctl1 转换控制寄存器1
中断控制寄存器 adc12ifg 中断标志寄存器
adc12ie 中断使能寄存器
adc12iv 中断向量寄存器
存储及其控制寄存器 adc12mctl0~adc12mctl15 存储控制寄存器0~15
adc12mem0~adc12mem15 存储寄存器0~15
1.adc12ctl0 控制寄存器0,各位定义:
bit15~12 bit11~8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
sht1 sht0 msc 2.5v refon adc12 on adc12 tovie adc12 tvie enc adc12 sc
adc12sc——采样/转换控制位。在不同条件下,adc12sc的含义如下所示:
enc=1, | shp=1: adc12sc由0变为1启动a/d转换; a/d转换完成后adc12sc自动复位
issh=0 | shp=0: adc12sc保持高电平采样; adc12sc复位时启动一次转换
enc——转换允许位。
0:adc12为初始状态,不能启动a/d转换;
1:首次转换由sampcon上升沿启动
adc12tvie——转换时间溢出中断允许位(当前转换还没完成时,又发生一次采样请求,则会发生转换时间溢出)
0:没发生转换时间溢出
1:发生转换时间溢出
adc12ovie——溢出中断允许位(当adc12memx中原有数据还没有读出,而又有新的转换结果数据要写入时,则发生溢出)
0:没发生溢出
1:发生溢出
adc12on——adc12内核控制位
0:关闭adc12内核
1:打开adc12内核
refon——参考电压控制位
0:内部参考电压发生器关闭
1:内部参考电压发生器打开
2.5v——内部参考电压的电压值选择位
0:选择1.5v内部参考电压
1:选择2.5v内部参考电压
msc——多次采样转换位(conseq《》0表示当前转换模式不是单通道单次转换)
有效条件 | msc值 含义
shp=1 | 0 每次转换需要shi信号的上升沿触发采样定时器
conseq《》0 | 1 仅首次转换由shi信号的上升沿触发采样定时器,而后采样转换将在前一次转换完成后立即进行
sht1、sht0——采样保持定时器1,采样保持定时器0
分别定义保存在转换结果寄存器adc12mem8~adc12mem15和adc12mem0~adc12mem7中的转换采样时序与采样时钟adc12clk的关系。采样周期是adc12clk周期乘4的整数倍,即:
shitx 0 1 2 3 4 5 6 7 8 9 10 11 12~15
n 1 2 4 8 16 24 32 48 64 96 128 192 256
2.adc12ctl1 转换控制寄存器1(大多数3~15位,只有在enc=0时才可被修改),各位定义:
bit15~12 bit11~10 bit9 bit8 biy7~5 bit4~3 bit2~1 bit0
csstartadd shs shp issh adc12 div adc12 ssel conseq adc12 busy
csstartadd——转换存储器地址位。该4位所表示的二进制数0~15分别对应adc12mem0~15。可以定义单次转换地址或序列转换的首地址。
shs——采样触发输入源选择位。
0:adc12sc
1:timer_a.out1
2:timer_b.out0
3:timer_b.out1
shp——采样信号(sampcon)选择控制位。
0:sampcon源自采样触发输入信号
1:sampcon源自采样定时器,由采样输入信号的上升沿触发采样定时器
issh——采样输入信号方向控制位
0:采样输入信号为同向输入
1:采样输入信号为反向输入
adc12div——adc12时钟源分频因子选择位。分频因子为该3位二进制数加1
adc12ssel——adc12内核时钟源选择
0:adc12内部时钟源——adc12osc
1:aclk
2:mclk
3:smclk
conseq——转换模式选择位
0:单通道单次转换模式
1:序列通道单次转换模式
2:单通道多次转换模式
3:序列通道多次转换模式
adc12busy——adc12忙标志(只用于单通道单次转换模式,在其它转换模式下,该位无效)
0:表示没有活动的操作
1:表示adc12正处于采样期间、转换期间或序列转换期间
3.adc12mem0~adc12mem15 转换存储寄存器
该组寄存器均为16位寄存器,用来存放a/d转换结果。中用其中低12位,高4位在读出时为0
4.adc12mctlx 转换存储控制寄存器(所有位只有在enc为低电平时可修改,在por时各位被复位)
对于每个转换存储器有一个对应的转换存储器控制寄存器,所以在进行csstartadd转换存储器地址位设置的同时,也确定了adc12mctlx。该寄存器各位含义如下:
bit7 bit6~4 bit3~0
eos sref inch
eos——序列结束控制位
0:序列没有结束
1:该序列中最后一次转换
sref——参考电压源选择位
0:vr+=avcc,vr-=avss
1:vr+=vref+,vr-=avss
2,3:vr+=veref+,vr-=avss
4:vr+=avcc,vr-=vref-/veref-
5:vr+=vref+,vr-=vref-/veref-
6,7:vr+=veref+,vr-=vref-/veref-
inch——选择模拟输入通道
0~7:a0~a7
8:veref+
9:vref-/veref-
10:片内温度传感器的输出
11~15:(avcc-avss)/2
5.adc12ifg 中断标志寄存器 为16位,其中中断标志位adc12ifg.x对应于转换存储寄存器adc12memx。各位含义如下:
bit15 bit14 。。。。。。 bit1 bit0
ifg15 ifg14 。。。。。。 ifg1 ifg0
adc12ifg.x置位:转换结束,并且转换结果已经装入转换存储寄存器。
adc12ifg.x复位:adc12memx被访问。
6.adc12ie 中断使能寄存器 为16位,对应于adc12ifg寄存器。各位含义如下:
bit15 bit14 。。。。。。 bit1 bit0
ie.15 ie.14 。。。。。。 ie.1 ie.0
adc12ie.x=1:允许相应的中断标志位adc12ifg.x在置位时发生的中断请求服务。
adc12ie.x=0:禁止相应的中断标志位adc12ifg.x在置位时发生的中断请求服务。
7.adc12iv 中断向量寄存器
adc12 是一个多源中断:有18个中断标志(adc12ifg.0~adc12ifg.15与adc12tov,adc12ov),但只有一个中断向量。所以需要 设置这18个标志的优先级顺序,按照优先级顺序安排中断标志的响应,高优先级的请求可以中断正在服务的低优先级。
三、标准程序参考:
#include “msp430x14x.h”
void initadc12();
unsigned char wait;
int main( void )
{
// stop watchdog timer to prevent time out reset
wdtctl = wdtpw + wdthold;
initadc12();
return 0;
}
void initadc12()
{
//_dint();
adc12ctl0 &= ~enc; //只有在enc复位的情况下才能对adc12ctl0、1进行设置!!!
adc12ctl0 = msc + refon + ref2_5v + sht0_15 + sht1_15;
/*msc:多次采样转换位,只对序列采样或者多次多次转换有效。
0:采样定时器需要shi信号的上升沿触发
1:首次需要采样定时器shi信号触发,之后的转换在上次转换之后随即开始。*/
adc12ctl1 |= shp + conseq_0;
/*shp: 1:采样信号源自采样定时器 0:采样信号源自采样输入信号
conseq: 0: 单通道单次转换 1:序列通道单词转换 2:单通道多次转换 3:序列通道多次转换
cstartadd_x(0~15):转换起始位置 */
adc12mctl0 = eos + sref_0 + inch_7;
/* eos:序列结束位
sref: 参考电压选择
inch:模拟输入通道选择 */
adc12ie |= 0x0001;//开相应模拟通道中断,转换完毕后引发中断
_eint();
//adc12ctl0 |= adc12on + enc; //修改!!!// 这样写是不对的
adc12ctl0 |= adc12on;
adc12ctl0 |= enc;
wait = 0; //此处可定义变量,指示转换是否完成
adc12ctl0 |= enc+adc12sc; //转换开始 若希望在其他时间开始转换 可将次句放在别处逼比必
while(wait==0)
;
}
#pragma vector=adc_vector
__interrupt void adc()
{int result[7];
wait=1;
result[0] = adc12mem0;
/*unsigned char q0;
int *pmem=adc12mem;
//转换结束的标志位置位
for(q0=0;q0《16;q0++)
{
admem[q0]= *pmem;
pmem++;
}*/
}
梵想移动固态硬盘P101和固态U盘F306评测 实乃良心之荐
强制解除苹果手机锁屏密码
中国无人机“无限续航”飞机:无需“加油”
ASCP200-1型电气防火限流式保护器简介
通过GaN特性优化门极驱动电路
MSP430 ADC12模块的组成_ADC12寄存器说明
智能H型钢切割机 型材切割设备 等离子型材切割机
2016年十大可穿戴产品盘点:智能手环/智能手表/VR
GPU的原理和渲染流程详细说明
Magic Leap瑞士洛桑团队成立,专注于光学和光电子研究
稳压二极管选型指南
因AR/VR受影响的行业有哪些?
助推节省燃料的汽车启动 / 停止电子系统
一文详解CPU渲染和GPU渲染之间的优劣
TI的宽输入降压电源之LMR33630-Q1:一级电源的绝佳选择
去耦电容有效使用方法
人工智能在支付领域怎样更加层次的应用
谷歌曝出大丑闻 这次比苹果更典型
雅特力全新开发软件工具可支持AT32全系列MCU产品
基于TI的达芬奇 DSP系统解决方案适用于高效数字视频应用