MSP430單片機比較器A模塊
以下大概講述幾個部分電路的功能和一些相關(guān)信息。
模擬輸入電路:
外部模擬引腳信號CA0,CA1(正負端)可以分別由P2CA0,P2CA1位控制開或關(guān)。經(jīng)過軟件的設(shè)置可以分別與內(nèi)部的幾個基準電壓進行比較(0.5VCC,0.25VCC,三極管門值電壓)或外部其中的電壓進行比較。
應(yīng)用的硬件比較可以分為以下三種組合:
兩個外部引腳輸入信號進行比較
其中一個外部引腳信號與內(nèi)部的0.5VCC或0.25VCC比較
其中一個外部引腳信號與內(nèi)部基準電壓比較
參考電壓發(fā)生器
參考電壓電路是可以由CARSEL,CARERF0,CARERF1位來控制電壓的產(chǎn)生。通過軟件設(shè)置可以選擇幾種電壓輸出到比較器的輸入中作為比較,當然此參考電壓也可以通過單片機的引腳往外部提供參考電壓之用。
比較器A核心
比較器CAON位控制開關(guān),CAEX位控制位控制方向。
低通慮波器
低通慮波器只需一個CAF位來控制此慮波器的功能開與關(guān)。此慮波器功能是用于消除比較器輸出信號的毛剌,以保證信號的質(zhì)量和中斷請求的可靠性。
中斷請求
比較器A模塊是具有中斷功能的,如比較器功能CAIE中斷允許開了,在CAIF信號產(chǎn)生時將生產(chǎn)中斷(當然GIE要為1時)。比較器A模塊是具有中斷獨立向量的,是一個單獨的中斷,CUP接受請求后會硬件自動清除中斷標志位CAIFG。
比較器模塊相關(guān)寄存器說明
CACTL1 比較器控制寄存器1
CAEX: 控制內(nèi)部比較器A的輸入信號和輸出信號的方向
CARSEL:控制內(nèi)部參考電壓加到比較器A的正輸入端還是負輸入端
由結(jié)構(gòu)圖可以看出,CAEX,CARSEL在不同設(shè)置時,比較器A輸入端的所加的參考電壓是有不同的.
請參考以下列表:
-----------------------------------
CARSEL CAEX 參考電壓接入端
0 0 內(nèi)部參考源加到比較器的正端
0 1 內(nèi)部參考源加到比較器的負端
1 0 內(nèi)部參考源加到比較器的負端
1 1 內(nèi)部參考源加到比較器的正端
CAREF1, CAREF0 選擇參考源:
0 使用外部參考
1 選擇0.25VCC為參考電壓
2 選擇0.5VCC為參考電壓
3 選擇二極管電壓為參考電壓,須參見具體IC的資料
CAON: 控制比較器A的打開與關(guān)閉
0 關(guān)閉比較器工作
1 打開比較器工作
CAIES: 中斷邊沿觸發(fā)模式選擇
0 上升沿使中斷標志CAIFG置位
1 下降沿使中斷標志CAIFG置位
CAIE:比較器中斷允許
0 禁止中斷
1 允許中斷
CAIFG: 比較器中斷標志
0 沒有中斷請求
1 有中斷請求標志信號
CACTL2 比較器控制寄存器2
P2CA1:控制輸入端CA1
0 外部引腳信號不與比較器A連接
1 外部引腳信號與比較器A連接
P2CA0:控制輸入端CA0
0 外部引腳信號不與比較器A連接
1 外部引腳信號與比較器A連接
CAF: 選擇比較器輸出端是否經(jīng)過RC低通濾波器
0 開通RC低通濾波器
1 直通信號
CAOUT: 比較器A輸出的信號
0 CA0小于CA1
1 CA0大于CA1
CAPD 端口禁止寄存器
比較器A模塊的輸入輸出與IO口共用引腳,可以控制IO端口輸入緩沖器的通斷開關(guān).CAPD控制位初始化為0,則端口輸入緩沖器有效.當相應(yīng)位為1時,端口輸入緩沖器無效。
程序范例:
#include <msp430x11x1.h>
void main (void)
{
WDTCTL = WDTPW WDTHOLD; // 停止WDT
CAPD |= 0x08; // 斷開與IO端口輸入
CACTL2 = P2CA0; // 設(shè)置P2.3為 comp
CCTL0 = CCIE; // CCR0 允許中斷
TACTL = TASSEL_2 ID_3 MC_2; // SMCLK/8,計數(shù)模式
_EINT(); // 開總中斷
while (1) // 循環(huán)
{
CACTL1 = 0x00; // 沒有參考電壓
_BIS_SR(LPM0_bits); // 進入LPM0
CACTL1 = CAREF0 CAON; // 0.25*Vcc=P2.3, 比較器開
_BIS_SR(LPM0_bits); // 再次進入LPM0
CACTL1 = CAREF1 CAON; // 0.5*Vcc=P2.3, 比較器開
_BIS_SR(LPM0_bits); // 再次進入 LPM0
CACTL1 = CAREF1 CAREF0 CAON; // 0.55V on P2.3,比較器開
_BIS_SR(LPM0_bits); // 再次進入LPM0
}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
_BIC_SR_IRQ(LPM0_bits); //退出LMP0模式
}
評論