MSP430F5438 ADC12學(xué)習(xí)筆記
1.前言
這幾天實(shí)踐了MSP430的ADC12功能,雖然片內(nèi)AD功能比較簡(jiǎn)單但是還學(xué)出了點(diǎn)“門道”來,這個(gè)“門道”便是MSP430F5438A和MSP430F5438的區(qū)別。這里通過一個(gè)例子說明片內(nèi)ADC的使用,首先實(shí)現(xiàn)UART和定時(shí)器1S溢出的功能,在上述功能的基礎(chǔ)上每1S打印一次AD轉(zhuǎn)換結(jié)果,轉(zhuǎn)換通道定向到通道11,該通道對(duì)應(yīng)AVCC和AVSS插值的一半,由于AVCC和LDO的輸出之間只有一個(gè)電感連接,可以理解轉(zhuǎn)換的結(jié)果為L(zhǎng)DO輸出電壓的一般,若擴(kuò)大兩倍便是LDO的實(shí)際輸出結(jié)果,在本文所用的開發(fā)板LDO輸出為3.3V,所有打印的結(jié)果越接近3.3V越好。
代碼實(shí)現(xiàn)
//時(shí)鐘默認(rèn)情況
//FLL時(shí)鐘FLL選擇XT1
//輔助時(shí)鐘ACLK選擇XT132768Hz
//主系統(tǒng)時(shí)鐘MCLK選擇DCOCLKDIV8000000Hz
//子系統(tǒng)時(shí)鐘SMCLK選擇DCOCLKDIV8000000Hz
//TA1選擇ACLK,最大計(jì)數(shù)值為32768,中斷頻率為1HZ
#include
#include
#include
voidclock_config(void);
voidselect_xt1(void);
voiddco_config(void);
voidadc12_config(void);
voiduart_config(void);
charsecond_flag=0;//1S標(biāo)志
intmain(void)
{
clock_config();//初始化時(shí)鐘
adc12_config();//初始化ADC12
uart_config();
TA1CCTL0=CCIE;//使能TA1CCR0,比較匹配中斷
TA1CCR0=32768;//初始化最大值,發(fā)生比較匹配中斷頻率32768/32768=1Hz
TA1CTL=TASSEL_1+MC_1+TACLR;//選擇ACLK,最大值為CCR0,清除計(jì)數(shù)值
_EINT();//初始化全局中斷
while(1)
{
if(second_flag)
{
second_flag=0;//1s時(shí)間到
ADC12CTL0|=ADC12SC;//啟動(dòng)轉(zhuǎn)換
while(!(ADC12IFG&BIT0));//等待轉(zhuǎn)換完成
//被轉(zhuǎn)換的通道為通道11(AVCC-AVSS)/2;
//此時(shí)轉(zhuǎn)換的精度為12位——4096
//AVCC通過一個(gè)電感和LDO的輸出端連接
//打印LDO輸出電壓,保留3位精度
floatldo_voltage=ADC12MEM0/4096.0*3.3*2;
printf("LDOVoltage%.3frn",ldo_voltage);
}
}
}
voidclock_config(void)
{
WDTCTL=WDTPW+WDTHOLD;//停止看門狗
select_xt1();//選擇XT1
dco_config();//ACLK=XT1=32.768K
//MCLK=SMCLK=8000K
}
voidselect_xt1(void)
{
//啟動(dòng)XT1
P7SEL|=0x03;//P7.0P7.1外設(shè)功能
UCSCTL6&=~(XT1OFF);//XT1打開
UCSCTL6|=XCAP_3;//內(nèi)部電容
do
{
UCSCTL7&=~XT1LFOFFG;//清楚XT1錯(cuò)誤標(biāo)記
}while(UCSCTL7&XT1LFOFFG);//檢測(cè)XT1錯(cuò)誤標(biāo)記
}
voiddco_config(void)
{
__bis_SR_register(SCG0);//禁止FLL功能
UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx
UCSCTL1=DCORSEL_5;//DCO最大頻率為16MHz
UCSCTL2=FLLD_1+243;//設(shè)置DCO頻率為8MHz
//MCLK=SMCLK=Fdcoclkdiv=(N+1)X(Ffllrefclk/n)
//N為唯一需要計(jì)算的值
// Ffllrefclk FLL參考時(shí)鐘,默認(rèn)為X