MSP430 G2553 計時/計數器 Timer_A

來源:互聯網
上載者:User

標籤:

MSP430G2553包含了兩個16-bit Timer_A計時/計數器。本文簡單介紹了Timer_A的功能和寄存器使用,本文及後續的隨筆部分參考了"Scientific Instrument Using the TI MSP430"部落格。該部落格的MSP430教程文章非常好,建議對MSP430感興趣的人FQ閱讀。

一、介紹

Timer_A可實現的功能有

- multiple compare:判斷計時器時間是否到達設定條件,觸發事件

- multiple capture:捕獲某個事件發生的時間

- PWM output:脈衝調製訊號輸出

- interval timing

Timer_A的構造框圖如下所示。

二、Timer Block

- 包含了一個16-bit的timer/counter寄存器TAR。

- 時鐘源可以由TAxCTL寄存器的TASSELx欄位選擇,為SMCLK、ACLK、TACLK、INCLK四者中的一個。其中TACLK、INCLK為外部輸入的訊號,對應管腳需查看具體晶片手冊。

- 分頻比由TAxCTL寄存器的IDx欄位選擇,支援1/2/4/8分頻。

- Timer的開關及運行模式由TAxCTL寄存器的MCx欄位選擇,預設為00(Timer關閉)。運行模式支援up mode, continuous mode, up/down mode 三種,如所示。調試中發現,修改MCx時會將TASSELx和IDx清零。

- 將TAxCTL寄存器的TACLR置0,可實現將TAR清零,同時TAxCTL寄存器的IDx、MCx欄位也會被清零。

- Timer overflow時可產生中斷,由TACTL寄存器的TAIE使能,中斷標誌位為TACTL寄存器的TAIFG位。

三、Compare Block

- 每個Timer_A包含兩個(TAxCCR0、TAxCCR1)或三個(TAxCCR0、TAxCCR1、TAxCCR2)capture/compare register。如MSP430G2553的每個Timer_A包含三個capture/compare register。

- compare模式可以產生PWM訊號,和特定時間間隔的中斷。

- compare模式由TAxCCRx寄存器的CAP=0來使能。

- 當TAR寄存器計數到TAxCCRx寄存器的值時,可觸發中斷,由TAxCCTLx寄存器中的CCIE位使能,中斷標誌位為TAxCCTLx寄存器中的CCIFG位。

四、Capture Block

- capture模式可用時間測量、速度計算。

- 外部輸入訊號為CCIA或CCIB,對應管腳需查看具體晶片手冊。

- capture模式由TAxCCRx寄存器的CAP=1及CMx欄位來使能。

- 捕獲條件由TAxCCRx寄存器的CMx欄位設定,預設為00(關閉)。捕獲條件可以為僅上升沿、僅下降沿、上升/下降沿三種之一。

- 建議設定TAxCCRx寄存器的SCS位,從而將捕獲產生訊號與時鐘訊號同步。

- 當上一次捕獲產生訊號被讀取前又有了新的捕獲產生訊號、即capture overflow時,TAxCCRx寄存器的COV標誌位會置1。

- 捕獲事件發生時,產生的中斷標誌位與compare模式相同,為TAxCCTLx寄存器中的CCIFG位。亦由TAxCCTLx寄存器中的CCIE位使能。

五、一個簡單例子

利用MSP430G2553 Timer0_A的compare mode,產生頻率為0.1Hz的方波,驅動LED進行顯示。代碼在中斷程式中又進行了一次計數,以實現長時間間隔定時。

 1 #include "io430.h" 2  3 #define LED1 BIT0 //red led on G2 Launchpad 4  5 //global variables 6 char i = 0; 7  8 void main(void) 9 {10     // Stop watchdog timer to prevent time out reset11     WDTCTL = WDTPW + WDTHOLD;12     13     P1OUT = 0;14     P1DIR |= LED1;15     16     // set DCO freq = 1MHz17     BCSCTL1 = CALBC1_1MHZ;18     DCOCTL = CALDCO_1MHZ;19     20     // BCM+ initial state:21     // DCOCLK -> MCLK22     // DCOCLK -> SMCLK23     // comprare/capture mode -> compare mode24     25     TA0CCR0 = 62550 - 1;26     TA0CCTL0 = CCIE; // enable compare interrupt27     TA0CTL = TASSEL_2 + ID_3 + MC_1 + TACLR;28     // input clock: SMCLK/8 -> 125kHz; 29     // timer overflow freq: 125k/(TA0CCR0+1) -> 2Hz30     // clear and start the timer, up mode31    32     __enable_interrupt();33    34     while(1)35     {36     37     }38 39 }40 41 //interrupt service routines42 #pragma vector = TIMER0_A0_VECTOR43 __interrupt void CCR0_ISR(void)44 {45     if(++i == 10) // interval: 1/2 * 10 = 5s, freq: 0.2Hz46     {47         // no flag clearing necessary; CCR0 has only one source, 48         // so it‘s automatic.49         P1OUT ^= LED1; // the sqaure wave freq: 0.2Hz/2 -> 0.1Hz50         i = 0;51     }52 }

 

MSP430 G2553 計時/計數器 Timer_A

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.