微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430 ADC12模块寄存器设置解读

MSP430 ADC12模块寄存器设置解读

时间:11-22 来源:互联网 点击:

二进制数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。该寄存器各位含义如下:
bit7bit6~4bit3~0
EOSSREFINCH
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。各位含义如下:
bit15bit14......bit1bit0
IFG15IFG14......IFG1IFG0
ADC12IFG.x置位:转换结束,并且转换结果已经装入转换存储寄存器。
ADC12IFG.x复位:ADC12MEMx被访问。
6.ADC12IE中断使能寄存器为16位,对应于ADC12IFG寄存器。各位含义如下:
bit15bit14......bit1bit0
IE.15IE.14......IE.1IE.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;

ADC12CTL1 |= SHP + CONSEQ_0;

ADC12MCTL0 = EOS + SREF_0 + INCH_7;

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;

}

下面再来简要的介绍一下这个模块不易理解的地方

1、MSP430可以使用内部、外部的参考电压,内部1.5或2.5,外部0~3.3,可以通过寄存器设置,采样电压的输入范围最大为0~3.3即AVss~AVcc,不能检测负电压,如果需要检测负电压,可以使用运放,电压偏置成为正电压然后检测

2、使用外部AVss~AVcc作为参考电压不够稳定,但是精度高,使用内部电压较稳定。

3、程序中一定要打开全局中断_EINT();

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top