Timer和counter
什么是Timer,什么是Counter
幾乎每個嵌入式板都會有counter和timer,重要性比肩gpio.本質上來看timer和counter幾乎是一樣的東西,底層都是一個硬件counter,如果是按照規律的時間跳表,就是timer,如果是按照不規律的事件訊號跳表就是counter.一般timer/counter統一稱作timer.
?
Timer.
一個典型的Timer包含以下元件:
- prescaler -- 除頻器,分頻器
- N-bit的counter register
- 一個或者多個capture register
- 一個或者多個compare register
timer底層實際是counter,counter會計算輸入脈沖的數量,如果輸入脈沖式每隔固定時間發出一次,就是timer.至于這個計數器的大小其實和處理器架構一點關系沒有,8bit的處理器也可以有16bit size的counter.32bit的處理器也可以有16bit的counter。
?
prescaler(除頻器)
prescaler是一個硬件元件,可以把用于驅動timer的clock(可能是cpu的clock,或是bus上的clock),以頻率已特定的倍數下降。一般來說可以除以2^n,或是除以1~2^P, P是prescaler存放除頻參數的bit數。
?
為什么需要使用prescaler
因為你必須把timer的觸發clock調整到你想要的頻率。因為counter的size是有限的,你使用的clock頻率越高,你的時間精密度就越高,但是相對的,你的timer最高能記得時間就會減少。例如你想要1us的精確度,但是你只有16bit-timer,那你就只能數到約65ms,counter就要重新數了。如果你想要讓counter一次可以數完一秒,那你就要每次16us才跳表。這就要透過除頻器來做取舍。不過改進的方法就是另外加一個repetition register,用于設定一個重復的次數,可以讓你的counter重新數完n次之后,在發出數完了的中斷訊號。
假如每1us跳一次counter,16bit可以跳65546次,就只能數到65ms.
如果timer當計數器使用,通常會搭配另外一個time-based的timer,這樣你就可以衡量一個時間周期內,該事件發生幾次。
?
Timer Register
Timer Register其實就是一個N-bit的counter,可以向上數,也可以向下,甚至可以向上數完再向下。你可以讀取,寫入,停止,歸零這個counter.當然,決定這個counter什么時候會計數跳表,取決于觸發該counter的來源.
Capture Register
capture register是一種如果被觸發,就會把目前counter的值存起來的register。觸發的條件通常是輸入pin教改變了狀態。也就是說,Capture Register是一種當時間發生時,截取timer snapshot的register。capture register也可以設定產生一個interrupt,讓handler去保存剛剛街渠道的timer狀態。因為這是硬件觸發的,所以不會像軟件計數會有latency.所以capture register最簡單的用途就是計算兩個脈沖之間的時間間隔,把第一個和第二個訊號的snapshot counter相減,乘上每次counter+1的時間間隔,就代表兩次訊號的時間差。
Compare Register
也有人稱match register。他的用途和capture register正好相反。compare register會保存一個值。這個值會一直和timer目前的值做比較。如果當兩個值一樣時,就會發出一個訊號。因此這個是用于output訊號的register.如果你的timer是當成timer(計時)使用,那么compare register就可以用作每隔固定時間發出訊號。如果你的timer是當做計數器,那么compare register就變成一種當某個事件發生固定次數后,就會發出訊號的裝置。
因此這就可以當作稱PWM的功能。在timer=0是把output訊號設成high,然后設定compare register的值作為脈沖的寬度(pulse width),然后當比較相等的事件發生時,把output拉成low,再用另外一個compare register設定一個更大的時間,當時間到了之后把timer歸0,你就做出了PWM了。
參考:
https://embedded-note.hackpad.com/ep/pad/static/aUAsaFTHTUf
?
轉載于:https://www.cnblogs.com/biglucky/p/4894982.html
總結
以上是生活随笔為你收集整理的Timer和counter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在企业工作一年多的几点感悟
- 下一篇: 对于路由地址并未切换,但是地址栏发生地址