msp430 定時器學習筆記
_bis_sr(lpm2_bits + gie) //進入lpm3低功耗模式和開總中斷允許
中斷
#pragma vector=timera0_vector
__interrupt void timer_a(void)
{
}
tactl timera控制寄存器
tar timera計數器
cctl0 捕獲/比較控制寄存器0
ccro 捕獲/比寄存器0(具有最高中斷優先級别,單獨使用一個中斷向量)
cctl1 捕獲/比較寄存器1
ccr1 捕獲/比較寄存器1
cctl2 捕獲/比較寄存器2
ccr2 捕獲/比較寄存器2
taiv 中斷向量寄存器
其中,定時器,ccr2,ccr1三者共用一個中斷向量
timera輸出模式:
輸出模式0 輸出模式:輸出信号outx由每個捕獲/比較子產品的控制寄存器cctlx中的outx位定義,并在寫入該寄存器後立即更新。最終位outx直通。
輸出模式1 置位模式:輸出信号在tar等于ccrx時置位,并保持置位到定時器複位或選擇另一種輸出模式為止。
輸出模式2 pwm翻轉/複位模式:輸出在tar的值等于ccrx時翻轉,當tar的值等于ccr0時複位。
輸出模式3 pwm置位/複位模式:輸出在tar的值等于ccrx時置位,當tar的值等于ccr0時複位。
輸出模式4 翻轉模式:輸出電平在tar的值等于ccrx時翻轉,輸出周期是定時器周期的2倍。
輸出模式5 複位模式:輸出在tar的值等于ccrx時複位,并保持低電平直到選擇另一種輸出模式。
輸出模式6 pwm翻轉/置位模式:輸出電平在tar的值等于ccrx時翻轉,當tar值等于ccr0時置位。
輸出模式7 pwm複位/置位模式:輸出電平在tar的值等于ccrx時複位,當tar的值等于ccr0時置位
tactl
15-10 9 8 7 6 5 4 3 2 1 0
未使用 ssel1 ssel0 id1 id0 mc1 mc0 未使用 clr taie taifg
定時器時鐘源選擇:
ssel1 ssel0
0 0 (特定外部信号)
0 1 (tassel0) aclk
1 0 (tassel1) smclk
1 1 (inclk)
通過mc1 mc0組合值來覺得timera的工作模式
0 0 停止模式。停止模式下,定時器不複位,回複工作後,按照停止時刻的狀态繼續運作
如果需要情況,請使用tactl中的clr清空
0 1 增計數模式
tar == ccr1的時候産生一次中斷。但是隻有tar == ccr0的時候,定時器才複位。(65535)
1 0 連續技術模式
0---0x0fffh之後重新計數
1 1 增/減計數模式 先增,後減,産生堆成波形。
先到ccr0,然後減到0.周期翻倍。
對于更改ccr0的時
如果更改ccro的值比之前大,則直接走到更改的值傳回複位。
如果更改的值比之前的值小,分為2種情況:
1,此時時鐘處于高,則遇到下降沿立馬複位。
2.如果時鐘處于低,則在下一個時鐘周期下降沿複位(多往前走一個時鐘周期)
修改tar cactl 中clr,cm0 cm1的時候,需要先停止計數器
//就是把目前計數器tar的值抓取放到ccrx當中
當cctlx中的capx=1,該子產品工作在捕獲模式。這時如果在標明的引腳上發生設定的脈沖觸發沿(上升沿、下降沿或任意跳變),則tar中的值将寫入到ccrx中。
當捕獲完成後,中斷标志位ccifgx 被置位