MSP430單片機定時器面面觀
默認情況如下:
本文引用地址:http://butianyuan.cn/article/201611/316955.htmACLK= LFXT1 = 32768Hz, 低頻時鐘源
MCLK=SMCLK= default DCO = 32 x ACLK = 1048576Hz 高頻時鐘源
ACLK ,MCLK ,SMCLK的頻率可以根據(jù) FLL+相應的寄存器來調節(jié)
時鐘源有:
LFXT1CLK: 32768 HZ 即:32K
XT2CLK: 4M
DCOCLK: 選擇AP18PF時
FN_2 1.04875M
FN_3 1.08860M
FN_4 1.710
FN_8 3.4M
以下引腳的復用功能如下:
P1.5 : ACLK 82
P1.4: SMCKL 83
P1.1: MCLK 86
—————————————————————————————————————————
msp430 定時器學習筆記
_BIS_SR(LPM3_bits + GIE) //進入LPM3低功耗模式和開總中斷允許
中斷
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
}
TACTL timerA控制寄存器
TAR timerA計數(shù)器
CCTL0 捕獲/比較控制寄存器0
CCRO 捕獲/比寄存器0(具有最高中斷優(yōu)先級別,單獨使用一個中斷向量)
CCTL1 捕獲/比較寄存器1
CCR1 捕獲/比較寄存器1
CCTL2 捕獲/比較寄存器2
CCR2 捕獲/比較寄存器2
TAIV 中斷向量寄存器
其中,定時器,CCR2,CCR1三者共用一個中斷向量
——————————————————————————————————————————
定時器A是一個16位的定時/計數(shù)器。它有3個捕獲/比較寄存器;能支持多個時序控制、多個捕獲/比較功能和多個PWM輸出;有廣泛的中斷功能,中斷可由計數(shù)器溢出產(chǎn)生,也可以由捕獲/比較寄存器產(chǎn)生。
一、TimerA的4種工作模式
1. 停止模式
用于定時器暫停,并不發(fā)生復位,所有寄存器現(xiàn)行的內(nèi)容在停止模式結束后都可用。當定時器暫停后重新計數(shù)時,計數(shù)器將從暫停時的值開始以暫停前的計數(shù)方向計數(shù)。
2. 增計數(shù)模式
捕獲/比較寄存器CCR0用作Timer_A增計數(shù)模式的周期寄存器。因為CCR0為16位寄存器,所以該模式適用于定時器周期小于65536的連續(xù)計數(shù)情況。計數(shù)器TAR可以增計數(shù)到CCR0的值,當計數(shù)值與CCR0的值相等(或定時器值大于CCR0的值)時,定時器復位并從0開始重新計數(shù)。
3. 連續(xù)計數(shù)模式
在需要65536個時鐘周期的定時應用場合常用連續(xù)計數(shù)模式。定時器從當前值計數(shù)到0FFFH后,又從0開始重新計數(shù)。
連續(xù)計數(shù)模式的典型應用:
產(chǎn)生多個獨立的時序信號。利用捕獲比較寄存器捕獲各種其它外部事件發(fā)生的定時器數(shù)據(jù)。
產(chǎn)生多個定時信號。
4. 增/減計數(shù)模式
需要生成對稱波形的情況經(jīng)??梢允褂迷?減計數(shù)模式。該模式下,定時器先增計數(shù)到CCR0的值,然后反向減計數(shù)到0。計數(shù)周期仍由CCR0定義,它是CCR0計數(shù)器值的2倍。
二、TimerA寄存器說明
寄存器 | 寄存器說明 | 類型 | 地址 | 初始狀態(tài) |
TACTL | Timer_A控制寄存器 | 讀寫 | 160H | POR復位 |
TAR | Timer_A計數(shù)器 | 讀寫 | 170H | POR復位 |
CCTL0 | 捕獲/比較控制寄存器0 | 讀寫 | 162H | POR復位 |
CCR0 | 捕獲/比較寄存器0 | 讀寫 | 172H | POR復位 |
CCTL1 | 捕獲/比較控制寄存器1 | 讀寫 | 164H | POR復位 |
CCR1 | 捕獲/比較寄存器1 | 讀寫 | 174H | POR復位 |
CCTL2 | 捕獲/比較控制寄存器2 | 讀寫 | 166H | POR復位 |
CCR2 | 捕獲/比較寄存器2 | 讀寫 | 176H | POR復位 |
TAIV | 中斷向量寄存器 | 讀寫 | 12EH | POR復位 |
1. TACTL 控制寄存器,各位定義:
15-10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
未用 | SSEL1 | SSEL0 | ID1 | ID0 | MC1 | MC0 | 未用 | CLR | TAIE | TAIFG |
SSEL1、SSEL0選擇進入定時器分頻器的時鐘源
SSEL1 | SSEL0 | 輸入時鐘源 | 說明 |
0 | 0 | TACLK | 用特定的外部引腳信號 |
0 | 1 | ACLK | 輔助時鐘 |
1 | 0 | MCLK | 系統(tǒng)時鐘 |
1 | 1 | INCLK | 外部輸入時鐘 |
ID1、ID0輸入分頻系數(shù)
ID1 | ID0 | 分頻系數(shù) |
0 | 0 | 不分頻 |
0 | 1 | 1/2分頻 |
1 | 0 | 1/4分頻 |
1 | 1 | 1/8分頻 |
MC1、MC0計數(shù)模式控制位
MC1 | MC0 | 模式 |
0 | 0 | 停止模式 |
0 | 1 | 增計數(shù)模式 |
1 | 0 | 減計數(shù)模式 |
1 | 1 | 增/減計數(shù)模式 |
CLR——定時器清除。當該位為1時,定時器復位。
TAIE——定時器中斷允許位。0:禁止定時器溢出中斷;1:允許定時器溢出中斷。
TAIFG——定時器溢出標志位。
增計數(shù)模式:當定時器由CCR0計數(shù)到0時,TAIFG置位;
連續(xù)計數(shù)模式:當定時器由0FFFFH計數(shù)到0時,TAIFG置位;
增/減計數(shù)模式:當定時器由CCR0減計數(shù)到0時,TAIFG置位。
2. TAR 16位計數(shù)器。
3. CCTLx 捕捉/比較控制寄存器,各位定義:
15 14 | 13 12 | 11 | 10 | 9 | 8 | 7 6 5 | 4 | 3 | 2 | 1 | 0 |
CAPTMOD1~0 | CCIS1~0 | SCS | SCCIx | CAP | OUTMODx | CCIEx | CCIx | OUT | COV | CCIFGx |
CAPTMOD1~0——選擇捕獲模式
00:禁止捕獲模式
01:上升沿捕獲
10:下降沿捕獲
11:上升沿與下降沿都捕獲
CCIS1~0——捕獲事件輸入源
00:選擇CCIxA
01:選擇CCIxB
10:選擇GND
11:選擇Vcc
SCS——選擇捕獲信號與定時器時鐘同步、異步關系
0:異步捕獲
1:同步捕獲(實際中經(jīng)常使用同步模式,捕獲總是有效的)
SCCIx——比較相等信號EQUx將選中的捕獲/比較輸入信號CCIx(CCIxA,CCIxB,Vcc和GND)進行鎖存,然后可由SCCIx讀出。
CAP——選擇捕獲模式還是比較模式。
0:比較模式
1:捕獲模式
OUTMODx——選擇輸出模式
000:輸出
001:置位
010:PWM翻轉/復位
011:PWM置位/復位
100:翻轉
101:復位
110:PWM翻轉/置位
111:PWM復位/置位
CCIEx——捕獲/比較模塊中斷允許位
0:禁止中斷
1:允許中斷
CCIx——捕獲/比較模塊的輸入信號
捕獲模式:由CCIS0和CCIS1選擇的輸入信號可通過該位讀出
比較模式:CCIx復位
OUT——輸出信號(如果OUTMODx選擇輸出模式0,則該位對應于輸入狀態(tài))
0:輸出低電平
1:輸出高電平
COV——捕獲溢出標志
0:沒有捕獲溢出
1:發(fā)生捕獲溢出
當CAP=0時,選擇比較模式。捕獲信號發(fā)生復位。沒有使COV置位的捕獲事件。
當CAP=1時,選擇捕獲模式。如果捕獲寄存器的值被讀出前再次發(fā)生捕獲事件,則COV置位。程序檢測COV來判斷原值讀出前是否又發(fā)生捕獲事件。讀捕獲寄存器時不會使溢出標志復位,須用軟件復位。
CCIFGx——捕獲比較中斷標志
捕獲模式:寄存器CCRx捕獲了定時器TAR值時置位
比較模式:定時器TAR值等于寄存器CCRx值時置位
4. CCRx 捕捉/比較寄存器:可讀可寫
在捕獲模式,當滿足捕獲條件,硬件自動將計數(shù)器TAR數(shù)據(jù)寫入該寄存器。
如果測量某窄脈沖(高電平)的脈沖長度,可定義上升沿和下降沿都捕獲。在上升沿時,捕獲一個定時器數(shù)據(jù),這個數(shù)據(jù)在捕獲寄存器中讀出;再等待下降沿到來,在下降沿時又捕獲一個定時器數(shù)據(jù);那么兩次捕獲的定時器數(shù)據(jù)差就是窄脈沖的高電平寬度。
其中CCR0經(jīng)常用作周期寄存器,其它CCRx相同。
5. TAIV 中斷向量寄存器:
Timer_A模塊使用兩個中斷向量。一個單獨分配給捕獲/比較寄存器CCR0;另一個作為共用中斷向量用于定時器和其它的捕獲/比較寄存器。
捕獲/比較寄存器CCR0中斷向量具有最高的優(yōu)先級。因為CCR0能用于定義增計數(shù)和增/減計數(shù)模式的周期。因此,它需要最快速的服務。CCIFG0在被中斷服務時能自動復位。
CCR1~CCRx和定時器共用另一個中斷向量,屬于多源中斷,對應的中斷標志CCIFG1~CCIFGx和TAIFG1在讀中斷向量字TAIV后,自動復位。如果不訪問TAIV寄存器,則不能自動復位,須用軟件清除。
15~5 | 4~ 1 | 0 |
0~0 | 中斷向量 | 0 |
中斷優(yōu)先級 | 中斷源 | 縮寫 | TAIV的內(nèi)容 |
最高 | 捕獲/比較器1 | CCIFG1 | 2 |
捕獲/比較器2 | CCIFG2 | 4 | |
...... | |||
捕獲/比較器x | CCIFGx | ||
最低 | 定時器溢出 | TAIFG1 | 10 |
沒有中斷將掛起 |
————————————————————————————————————————————————
//******************************************************************************
//
// Lierda, Inc
// Built with IAR Embedded Workbench Version: 3.41a
// ID: MSP430-TEST44X
// 程序功能:實現(xiàn)延時 1S,驅動LED4閃爍
// 通過本實驗了解MSP430內(nèi)部的時鐘來源和不同頻率的設置。
// 硬件連接:在必須連接P1.1、P1.5短接器,
//******************************************************************************
#include "msp430x44x.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停止看門狗定時器
TACTL = TASSEL0 +TACLR; //選擇ACLK為分頻時鐘源,清TAR
TACTL |= MC0; //開啟Timer_A,連續(xù)計數(shù)模式
CCTL0 = CCIE; //開啟Timer_A的中斷
CCR0 = 32000; //延時32000/32k=1s
P5DIR |= BIT1;
P5OUT |= BIT1;
while(1)
{
_BIS_SR(LPM3_bits+GIE); //進入低功耗模式
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Time_A()
{
P5OUT ^=BIT1;
}
評論