1. 程式人生 > >鬆翰微控制器--SN8F5702學習筆記(六)TIMER2

鬆翰微控制器--SN8F5702學習筆記(六)TIMER2

 定時器2是一個16位向上計數定時器,它有幾個可選的擴充套件:指定的過載值,比較輸出(PWM)和捕獲功能。定時器2由專用的16位組成計數器/定時器和四個16位捕獲/比較模組。 每個捕獲/比較模組都有它啟用時自己關聯的I / O.每個捕獲/比較模組可以配置為獨立執行在3種模式中的一種:比較,捕獲與上升沿或捕獲註冊寫。

在這裡插入圖片描述
1、Timer 2 向上計數控制

 定時器2的時鐘源有三種工作模式:指定fcpu時鐘(fcpu / 12和fcpu / 24),使用停止控制和外部時鐘輸入指定fcpu時鐘。 下表對這些進行了分類三種操作模式及其相關暫存器(T2I1,T2I0和T2PS)。 一旦計時器的計數器是溢位(從0xFFFF到0x0000計數),TF2將立即發出,可以讀/寫通過韌體。 定時器2中斷功能由ET2控制。

在這裡插入圖片描述

T2I1 T2I0 T2PS Timer 2 時鐘源
0 0 x 關閉Timer2
0 1 0 fcpu/12
0 1 1 fcpu/24
1 1 0 fcpu/12(T2引腳為低電平時停止計數,T2為高電平時恢復)
1 1 1 fcpu/24(T2引腳為低電平時停止計數,T2為高電平時恢復)
1 0 x T2引腳上升沿(T2引腳時鐘速率≤0.5* fcpu)

2、指定Timer2過載值
 指定的過載值是一個可選功能,它可以通過溢位或重新載入定時器2計數器外部控制引腳。如果選擇了溢位過載,定時器2將CRCH / CRCL值複製到其計數器(TH2 / TL2)自動溢位訊號。 最終,定時器2將從CRCH / CRCL重複計數值為0xFFFF。另一方面,外部引腳T2RL的下降沿(與P2.0共用)也可以選擇為a過載訊號。 在這種情況下,如果T2RL,定時器2通常將其計數器從0x0000計數到0xFFFF引腳保持穩定,但計數器值將隨時由CRCH / CRCL值替換為只要T2RL引腳有下降訊號。 隨後,定時器2繼續其計數程式如果啟用了中斷功能,將發出CRCH / CRCL值和外部過載標誌(TF2RL)(ET2RL和ET2均已設定)。 外部過載中斷向量與定時器2中斷共享向量並通過韌體識別事件。

在這裡插入圖片描述
3、比較輸出

 定時器2最多有四組比較輸出。 每組(CRC / CC1 / CC2 / CC3)獨立地將其值與定時器2計數器(TH2 / TL2)進行比較,並將T2COM0上的比較結果輸出到T2COM3引腳(與P00,P01,P03和P0.4共用)。 比較結果有兩種輸出方式:直接輸出和間接輸出。

 直接方法是,如果CRC / CC1 / CC2 / CC3暫存器低於定時器2計數器,則對映引腳輸出低電平狀態;如果暫存器值等於/大於定時器2計數器,則輸出高電平狀態。 因此,輸出狀態在交叉點處改變兩次。 由於CRC / CC1 / CC2 / CC3暫存器等於定時器2計數器,因此發出TF2C0 / TF2C1 / TF2C2 / TF2C3標誌,可以通過韌體進行讀/寫。 比較中斷功能由ET2C0 / ET2C1 / ET2C2 / ET2C3控制。
在這裡插入圖片描述

在這裡插入圖片描述
 相反,間接輸出方法是保持對映引腳先前輸出設定的事件,直到定時器2計數器超過CRC / CC1 / CC2 / CC3暫存器值。 在此模式下,輸出訊號的轉換可由軟體配置。 換句話說,當TH2 / TL2等於CRC暫存器時,P0.0暫存器位會影響T2COM0 / P0.0引腳。 定時器2溢位不會導致輸出更改。
在這裡插入圖片描述
在這裡插入圖片描述

4、捕獲功能
 捕捉功能類似於秒錶的分割/圈數按鈕。 當定時器2計數器(TH2 / TL2)例行計數時,分離事件記錄CRC / CC1 / CC2 / CC3暫存器中的計數器值。

在這裡插入圖片描述
 拆分事件可以來自硬體或軟體。 T2CC0引腳可觸發硬體分裂事件,該事件將TH2 / TL2值複製到CRCH / CRCL暫存器,而T2CC1,T2CC2和T2CC3分別控制CC1至CC3暫存器。

在這裡插入圖片描述

通過將任意值寫入CRCL / CCL1 / CCL2 / CCL3暫存器來觸發軟體拆分事件。 在對這些暫存器執行寫入指令時,當前的TH2 / TL2值將記錄在配對的暫存器中。

在這裡插入圖片描述

5、暫存器

暫存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
T2CON T2PS I3FR - T2R1 T2R0 T2CM T2I1 T2I0
CCEN COCA31 COCA30 COCA21 COCA20 COCA11 COCA10 COCA01 COCA00
TH2 TH27 TH26 TH25 TH24 TH23 TH22 TH21 TH20
TL2 TL27 TL26 TL25 TL24 TL23 TL22 TL21 TL20
CRCH CRCH7 CRCH6 CRCH5 CRCH4 CRCH3 CRCH2 CRCH1 CRCH0
CRCL CRCL7 CRCL6 CRCL5 CRCL4 CRCL3 CRCL2 CRCL1 CRCL0
CCH3 CCH37 CCH36 CCH35 CCH34 CCH33 CCH32 CCH31 CCH30
CCL3 CCL37 CCL36 CCL35 CCL34 CCL33 CCL32 CCL31 CCL30
CCH2 CCH27 CCH26 CCH25 CCH24 CCH23 CCH22 CCH21 CCH20
CCL2 CCL27 CCL26 CCL25 CCL24 CCL23 CCL22 CCL21 CCL20
CCH1 CCH17 CCH16 CCH15 CCH14 CCH13 CCH12 CCH11 CCH10
CCL1 CCL17 CCL16 CCL15 CCL14 CCL13 CCL12 CCL11 CCL10
IEN0 EAL - ET2 ES0 ET1 - ET0 EX0
IEN1 ET2RL - ET2C3 ET2C2 ET2C1 ET2C0 ESPI EI2C
IRCON TF2RL TF2 TF2C3 TF2C2 TF2C1 TF2C0 - -

(1)T2CON暫存器

描述
7 T2PS 定時器2預標量,0 是fcpu/12,1 是fcpu/24
6 I3FR 在比較模式下:0:當產生COM0中斷時 Timer2的內容變得不等於CRCregister。1:當產生COM0中斷時Timer2的內容變為等於CRC暫存器。在捕獲模式0:0:定時器2的內容將被鎖存到CRC中T2CC0的暫存器是下降沿。1:定時器2的內容將被鎖存到CRC中T2CC0暫存器正在上升沿。
5 保留
4…3 T2R 指定的定時器2過載值。00:禁用 ,01:禁用,10:通過計數器溢位將CRCH / CRCL載入到TH2 / TL2,11:通過T2RL引腳將CRCH / CRCL載入到TH2 / TL2
2 T2CM 定時器2比較輸出。0:直接輸出方法,1:間接輸出,可以指定下一個輸出狀態
1…0 T2I 定時器2向上計數控制。00:禁用,01:時鐘速率由T2PS定義,10:時鐘源為T2引腳,11:時鐘速率由T2PS定義,具有T2引腳門控制

(2)CCEN暫存器

描述
7…6 COCA3 CC3的比較和捕獲功能。00:禁用,01:通過T2CC3引腳上升沿捕獲,10:比較功能,11:通過寫CCL3暫存器進行捕獲
5…4 COCA2 CC3的比較和捕獲功能。00:禁用,01:通過T2CC2引腳上升沿捕獲,10:比較功能,11:通過寫CCL2暫存器進行捕獲
3…2 COCA1 CC3的比較和捕獲功能。00:禁用,01:通過T2CC1引腳上升沿捕獲,10:比較功能,11:通過寫CCL1暫存器進行捕獲
1…0 COCA0 CRC的比較和捕獲功能。00:禁用,01:通過T2CC0引腳上升沿捕獲,10:比較功能,11:通過寫入RCCL暫存器進行捕獲

(3)IEN0

描述
7 EAL 中斷使能,參考中斷部分知識
5 ET2 定時器2中斷使能

(4)IEN1

描述
7 ET2RL T2定時器外部過載中斷控制位。0:禁用,1:啟用
6 保留 0
5 ET2C3 T2定時器COM3中斷控制位。0:禁用,1:啟用
4 ET2C2 T2定時器COM2中斷控制位。0:禁用,1:啟用
3 ET2C1 T2定時器COM1中斷控制位。0:禁用,1:啟用
2 ET2C0 T2定時器COM0中斷控制位。0:禁用,1:啟用
其他 參考其他章節

(5)IRCON暫存器

描述
7 TF2RL T2定時器外部過載中斷請求標誌。 0:無TF2RL中斷請求,1:TF2RL中斷請求。
6 TF2 T2定時器中斷請求標誌。 0:無T2中斷請求,1:T2中斷請求
5 TF2C3 T2定時器 COM3中斷請求標誌位。0:無T2COM3中斷請求,1:T2COM3中斷請求。
4 TF2C2 T2定時器 COM2中斷請求標誌位。0:無T2COM2中斷請求,1:T2COM2中斷請求。
3 TF2C1 T2定時器 COM1中斷請求標誌位。0:無T2COM1中斷請求,1:T2COM1中斷請求。
2 TF2C0 T2定時器 COM0中斷請求標誌位。0:無T2COM0中斷請求,1:T2COM0中斷請求。
Else Reserved

(6)其他暫存器

暫存器 描述
TH2/TL2 7…0 TH2/TL2 定時器2 16位計數器暫存器
CRC 7…6 CRCH[15:0] 16位比較/捕獲暫存器
CCH3/CCL3 7…6 CCH3/CCL3 16位比較/捕獲暫存器
CCH2/CCL2 7…6 CCH2/CCL2 16位比較/捕獲暫存器
CCH1/CCL1 7…6 CCH1/CCL1 16位比較/捕獲暫存器

程式碼:

//=============================================================================
//		Time = T2=1.5MS		(65536 - 0xfc18)*12/16		
//=============================================================================
#define TH2_Value 0xF8			//65536 - 63536 = 2000   2000 * 1/Fclk = 2000 * 12/16M = 1500us 							
#define TL2_Value 0x30

void scs_pwm_init(void)
{
	T2CON = 0x01;		    //Fclk = Fcpu/12 = 167K
	
    TH2 = TH2_Value;        // Initial values
    TL2 = TL2_Value;
                                          
    ET2 = 1;                // Timer2 interrupt enable
    EAL = 1;                // Golbal Interrupt enable
}
//-----------------------------------------------------------------------------
//  Timer2 ISR
//-----------------------------------------------------------------------------
void Timer2_ISR(void) interrupt ISRTimer2   // Vector @  0x2B
{
    TF2 = 0;                // Clear Timer2 overflow flag 
   
    TH2 = TH2_Value;        // Initial values
    TL2 = TL2_Value;

    P20 = ~ P20;            // P2.6 toggle
}