PIT(周期性定時器模塊)
原理部分:
相當(dāng)于Systick的增強版
輸入時鐘是bus clock
能夠產(chǎn)生中斷或是觸發(fā)triggger信號
一些重要的寄存器
PIT_MCR Module Control Register
MDIS 為0時使能PIT ;為1時禁止PIT
FRZ 在debug模式下,為0時使能PIT ;為1時禁止PIT
PIT_LDVALn Timer Load Value Register
存儲一個計數(shù)值,減法計數(shù),到0時產(chǎn)生一個中斷或是觸發(fā)一個事件
在計數(shù)過程中,如果寫入新的值,不會打斷計數(shù),而只是會在本次計數(shù)結(jié)束之后再寫入
要想廢除本次計數(shù),必須先關(guān)閉計數(shù)器,再打開
PIT_CVALn Current Timer Value Register
用于存儲當(dāng)前正在計數(shù)的值
PIT_TCTCLn Timer Control Register
TIE 0表示不產(chǎn)生中斷
TEN 0表示計數(shù)器禁止,1表示計數(shù)器開啟
PIT_TFGn Timer Flag Register
TIF 0表示正在計數(shù);1表示計數(shù)結(jié)束 ;寫1的時候清零
應(yīng)用部分:
//初始化PIT
PIT_InitTypeDef PIT_InitStruct1; //申請一個PIT模塊
PIT_InitStruct1.chl = HW_PIT_CH0; /*使用通道0進行定時 */
PIT_InitStruct1.timeInUs = 1000*1000; /* 定時時間設(shè)置 */
PIT_Init(&PIT_InitStruct1); //初始化
PIT_CallbackInstall(HW_PIT_CH0, PIT_ISR); //注冊中斷函數(shù)
PIT_ITDMAConfig(HW_PIT_CH0, kPIT_IT_TOF, true);
//開啟 PIT中斷
對函數(shù)PIT_Init()的解釋:
1.在外部的結(jié)構(gòu)體PIT_InitStruct1已經(jīng)定義了通道號和定時的時間。
2.在初始化內(nèi)部,需要完成通道的設(shè)置,定時時間的設(shè)置,為了后續(xù)調(diào)用的方便,還加入了一部分代碼將計數(shù)值換算為us和ms;
3.將定時時間換算成計數(shù)值放到PIT_LDVALn 寄存器中;
4.修改PIT_TCTCLn 的TEN 位,設(shè)置允許計數(shù);
5.最后設(shè)置PIT_MCR 打開PIT模塊。
后面的注冊回調(diào)函數(shù)和打開中斷與之前的類似。