1、ME32F030基本定時(shí)器簡介
ME32F030內(nèi)置 4 個(gè)基本功能的 16 位定時(shí)器/計(jì)數(shù)器。 定時(shí)器/計(jì)數(shù)器工作時(shí)鐘由 SYSAHBCLKDIV 寄存器控制。關(guān)閉 SYSAHBCLKDIV 寄存器中定時(shí)器/計(jì)數(shù)器的時(shí)鐘供給可節(jié)省系統(tǒng)功耗。主要功能如下:
? 可預(yù)置分頻的 16 位定時(shí)器/計(jì)數(shù)器
? 1 個(gè) 16 位匹配寄存器:
–可產(chǎn)生中斷
–停止定時(shí)器
–對定時(shí)器復(fù)位
16 位基本型定時(shí)器/計(jì)數(shù)器模塊框圖如下圖所示:
圖1 基本定時(shí)器結(jié)構(gòu)圖
為了便于理解,可以將基本定時(shí)器框圖分為4個(gè)功能單元。
①:預(yù)分頻計(jì)數(shù)單元,由PRESCALE COUNTER (PC) 和 PRESCALE REGISTER (PR)組成,預(yù)分頻計(jì)數(shù)器(PC)會在每個(gè) PCLK 時(shí)鐘上遞增計(jì)數(shù)。達(dá)到設(shè)定的預(yù)分頻值后,定時(shí)器計(jì)數(shù)器就會加1,而預(yù)分頻值就是由PR寄存器決定的。
②:定時(shí)器計(jì)數(shù)單元,由TIMER COUNTER (TC) 和 TIMER CONTROL REGISTER (TCR)組成,定時(shí)器控制寄存器TCR決定計(jì)數(shù)器TC是否啟用。預(yù)分頻計(jì)數(shù)器(PC)溢出后,定時(shí)器計(jì)數(shù)器(TC)加1,達(dá)到設(shè)定的匹配值MR0之后可以根據(jù)設(shè)置產(chǎn)生中斷等行為。
③:定時(shí)器匹配單元:該單元只有一個(gè)MATCH REGISTER0(MR0),它決定著定時(shí)器計(jì)數(shù)器TC的匹配值。
④:定時(shí)器控制單元,由MATCH CONTROL REGISTER (MCR) 和 INTERRUPT REGISTER (IR)組成,二者共同作用,控制著定時(shí)器的主要功能和參數(shù)。
2、ME32F030基本定時(shí)器寄存器
在簡介中,我們介紹了基本定時(shí)器的模塊框圖,其實(shí)每個(gè)功能模塊都有對應(yīng)的寄存器來實(shí)現(xiàn)其功能?;径〞r(shí)器的寄存器列表如圖所示:
2-1 中斷寄存器
中斷寄存器包含用于匹配中斷的位。如果有中斷產(chǎn)生, IR 中的相應(yīng)位為高電平。否則,該位為低電平。向?qū)?yīng)的 IR 位寫邏 輯 1 會使中斷復(fù)位。寫 0 無效。
2-2 定時(shí)器控制寄存器
定時(shí)器控制寄存器用于控制計(jì)數(shù)器/定時(shí)器的操作。它主要控制著計(jì)數(shù)器的使能和復(fù)位,具體的操作如圖所示:
圖3 控制寄存器
2-3 定時(shí)器計(jì)數(shù)寄存器
當(dāng)預(yù)分頻器計(jì)數(shù)器達(dá)到其 PC 數(shù)值時(shí), 16 位定時(shí)器計(jì)數(shù)器會遞增計(jì)數(shù)。如果 TC 在到達(dá)計(jì)數(shù)器上限之前沒有復(fù)位,它將一直 計(jì)數(shù)到 0x0000 FFFF 然后翻轉(zhuǎn)到 0x0000 0000。該事件不會產(chǎn)生中斷,如果需要,可使用匹配寄存器檢測溢出。
2-4 預(yù)分頻寄存器
16 位預(yù)分頻寄存器指定預(yù)分頻計(jì)數(shù)器的最大值。當(dāng)預(yù)分頻計(jì)數(shù)器計(jì)數(shù)到此值后,會從0開始重新計(jì)數(shù)。
2-5 預(yù)分頻計(jì)數(shù)寄存器
16 位預(yù)分頻計(jì)數(shù)器用某個(gè)常量來控制 PCLK 的分頻,再使其輸入到定時(shí)器計(jì)數(shù)器。它所控制的是定時(shí)器分辨率與最大時(shí)間之間的關(guān)系,從而能防止定時(shí)器溢流。預(yù)分頻計(jì)數(shù)器會在每個(gè) PCLK 時(shí)鐘上遞增計(jì)數(shù)。當(dāng)預(yù)分頻計(jì)數(shù)器的計(jì)數(shù)達(dá)到預(yù)分頻寄存器中存儲的值時(shí),定時(shí)器計(jì)數(shù)器將遞增計(jì)數(shù),并且在下一個(gè) PCLK 時(shí)鐘上對預(yù)分頻計(jì)數(shù)器復(fù)位。這將使得 TC 當(dāng) PR = 0 時(shí)在每個(gè) PCLK 上遞增計(jì)數(shù),當(dāng) PR = 1 時(shí),在每 2 個(gè) PCLK 上遞增計(jì)數(shù),依次類推。.
2-6 匹配控制寄存器
匹配控制寄存器用于控制當(dāng)其中一個(gè)匹配寄存器的值與定時(shí)器計(jì)數(shù)器的值匹配時(shí)應(yīng)執(zhí)行的操作。功能如下所示。
位0:決定著計(jì)數(shù)器TC與匹配值相等后,中斷是否使能。
位1:MR0與TC匹配時(shí),決定TC是否復(fù)位。如果選擇復(fù)位,TC則會清0重新計(jì)數(shù),這樣就會形成一個(gè)固定時(shí)間的計(jì)數(shù)周期。
位2:MR0與TC匹配時(shí),決定TC是否停止。如果置1選擇使能,TC則不再會計(jì)數(shù)。這樣就是個(gè)單次周期的計(jì)數(shù)了。如果想要周期性循環(huán)計(jì)數(shù),那么就需要置0(默認(rèn))禁止。
圖4 匹配控制寄存器
2-7 匹配寄存器
匹配寄存器的值會不斷地與定時(shí)器計(jì)數(shù)器值進(jìn)行比較。當(dāng)兩個(gè)值相等時(shí),自動(dòng)觸發(fā)相應(yīng)操作。這些操作包括產(chǎn)生中斷、復(fù)位定時(shí)器計(jì)數(shù)器或停止定時(shí)器。所有操作均由 MCR 寄存器中的設(shè)置控制。
3、基本定時(shí)器驅(qū)動(dòng)函數(shù)
在例程LIB->common->Drivers->Source文件夾內(nèi)有timer.c文件,這個(gè)就是提供的定時(shí)器庫程序,里面除了基本定時(shí)器的驅(qū)動(dòng)函數(shù),還包括高級定時(shí)器、PWM輸出等功能函數(shù),本章節(jié)先對基本定時(shí)器的函數(shù)進(jìn)行講解。
3-1 基本定時(shí)器初始化
ct:要初始化的定時(shí)器模塊,可選TIM0、TIM1、TIM2、TIM3。
tickpersecond:預(yù)分頻系數(shù)。
voidTIM0_Init(TIM0_Type*ct,uint32_ttickpersecond) { if(ct==TIM0) { SYSCON->SYSAHBCLKCTRL_b.TIM0_CLK=1;//使能定時(shí)器時(shí)鐘 SYSCON->PRESETCTRL_b.TIM0_RST_N=0;//復(fù)位定時(shí)器 SYSCON->PRESETCTRL_b.TIM0_RST_N=1; } elseif(ct==TIM1) { SYSCON->SYSAHBCLKCTRL_b.TIM1_CLK=1; SYSCON->PRESETCTRL_b.TIM1_RST_N=0; SYSCON->PRESETCTRL_b.TIM1_RST_N=1; } elseif(ct==TIM2) { SYSCON->SYSAHBCLKCTRL_b.TIM2_CLK=1; SYSCON->PRESETCTRL_b.TIM2_RST_N=0; SYSCON->PRESETCTRL_b.TIM2_RST_N=1; } elseif(ct==TIM3) { SYSCON->SYSAHBCLKCTRL_b.TIM3_CLK=1; SYSCON->PRESETCTRL_b.TIM3_RST_N=0; SYSCON->PRESETCTRL_b.TIM3_RST_N=1; }elsereturn; //設(shè)置預(yù)分頻系數(shù) if(tickpersecond>SystemCoreClock) tickpersecond=SystemCoreClock; ct->PR_b.PRVAL=SystemCoreClock/tickpersecond-1; return; }
3-2 設(shè)置匹配寄存器
這個(gè)函數(shù)用于設(shè)置定時(shí)器的匹配值,以及達(dá)到匹配值之后的行為。
Ct:要設(shè)置的定時(shí)器模塊,可選TIM0、TIM1、TIM2、TIM3。
Ticks:要寫入的計(jì)數(shù)器匹配值。
Action: 觸發(fā)中斷 TIM_MATCH_TRIGGER_INT
復(fù)位計(jì)數(shù)器 TIM_MATCH_RESET_COUNTER
停止計(jì)數(shù)器 TIM_MATCH_STOP_COUNTER
voidTIM0_ConfigMatch(TIM0_Type*ct,uint16_tticks,uint8_taction) { ct->MR0_b.MATCH=ticks-1; ct->MCR=action; return; }
3-3 設(shè)置預(yù)分頻計(jì)數(shù)器值
voidTIM0_SetTimerCounter(TIM0_Type*ct,uint16_ttick) { ct->PC_b.PCVAL=tick; return; }
3-4 復(fù)位預(yù)分頻計(jì)數(shù)器值
voidTIM0_ResetTimerCounter(TIM0_Type*ct) { ct->PC_b.PCVAL=0; return; }
來源:敏矽MCU
-
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120802 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2259瀏覽量
94809 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3254瀏覽量
115074 -
Cortex-M0
+關(guān)注
關(guān)注
4文章
124瀏覽量
38718
發(fā)布評論請先 登錄
相關(guān)推薦
評論