新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430 ADC12模塊寄存器設置解讀

        MSP430 ADC12模塊寄存器設置解讀

        作者: 時間:2016-11-22 來源:網絡 收藏
        一。簡單介紹:

        ADC12模塊中是由以下部分組成:輸入的16路模擬開關(外部8路,內部4路),ADC內部電壓參考源,ADC12內核,ADC時鐘源部分,采集與保持/觸發源部分,ADC數據輸出部分,ADC控制寄存器等組成。

        本文引用地址:http://www.104case.com/article/201611/320056.htm

        四種采樣模式:

        (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~12bit11~8bit7bit6bit5bit4bit3bit2bit1bit0
        SHT1SHT0MSC2.5VREFONADC12ONADC12TOVIEADC12TVIEENCADC12SC
        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的整數倍,即:
        SHITx0123456789101112~15
        n1248162432486496128192256
        2.ADC12CTL1轉換控制寄存器1(大多數3~15位,只有在ENC=0時才可被修改),各位定義:
        bit15~12bit11~10bit9bit8biy7~5bit4~3bit2~1bit0
        CSSTARTADDSHSSHPISSHADC12DIVADC12SSELCONSEQADC12BUSY
        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。該寄存器各位含義如下:
        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();



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 朝阳县| 合阳县| 巴青县| 抚远县| 都匀市| 深圳市| 宜阳县| 清原| 枣强县| 喀喇沁旗| 海丰县| 北流市| 宝鸡市| 商洛市| 巴青县| 康马县| 内江市| 锦屏县| 米易县| 宜都市| 兴国县| 来安县| 沾化县| 北票市| 布尔津县| 新宾| 桓台县| 娱乐| 新宁县| 武城县| 宝山区| 金沙县| 凤台县| 太保市| 枞阳县| 安化县| 北流市| 镇安县| 大港区| 东乌珠穆沁旗| 福贡县|