1. 程式人生 > >【技術】定時器&PWM詳解

【技術】定時器&PWM詳解

轉自 https://blog.csdn.net/lwj103862095/article/details/7857428
S3C2440定時器簡介:
S3C2440一共有5個16位的定時器,其中定時器0、1、2、3有PWM(脈衝寬度調製)功能,它們都有一個輸出引腳(如TOUTn【n為0~3】),可以通過定時器來控制引腳週期性的高、低電平變化,但是定時器4沒有輸出引腳。

定時器顧名思義需要時鐘去維持,那麼它的時鐘源為PCLK,首先通過兩個8位的預分頻降低頻率,其中,定時器0共用第一個預分頻器,定時器2、3、4共用第二個預分頻器。預分頻器的輸出將進入第二級分頻器,它們輸出5種頻率的時鐘,2、4、8、16和TCLK0/1(外部時鐘),每個定時器的工作時鐘就是從這5種頻率中選擇得來的啦。

8位預分頻是通過TCFG0暫存器來設定的,4位分頻是通過TCFG1來設定的。定時器的結構示意圖如下:
這裡寫圖片描述

定時器的內部邏輯單元圖如下所示
這裡寫圖片描述
定時器工作流程如下所示
這裡寫圖片描述
定時器操作的詳細例子
這裡寫圖片描述
這裡寫圖片描述
接下來我們來講解一下有關定時器的一些暫存器:
1、TCFG0暫存器(TIMER CONFIGURATION)
位[7:0]、位[15:8]分別用於控制預分頻器0、1,它們的值可以設定為0~255,經過預分頻器出來的時鐘頻率為:PCLK/{ prescaler value +1}
這裡寫圖片描述
2、TCFG1暫存器(TIMER CONFIGURATION)
經過預分頻器得到的時鐘將被2分頻、4分頻、8分頻、16分頻,除了這4種頻率外,額外低,定時器0、1還可以工作在外接的TCLK0時鐘下,定時器2、3、4還可以工作在外接的TCLK1下。
通過TCFG1暫存器來設定這5個定時器,分別工作於這5種頻率中的哪一個頻率。所以定時器哦你工作的公式可以按照下面的計算:
定時器工作頻率 = PCLK/{prescaler value + 1}/{driver value}.
{prescaler value} = 0~255;
{driver value} = 2、4、8、16;
這裡寫圖片描述

3、TCNTBn/TCMPBn 暫存器
n為0~4,這兩個暫存器都只用到位[15:0],TCNTBn中儲存定時器的初始計數值,TCMPBn中儲存比較值。它們的值在啟動定時器時,被傳到定時器內部暫存器TCNTn、TCMPn 中。
注意:沒有TCMPB4,因為定時器4沒有輸出引腳。 這裡僅列出TCNTB0和TCMPB0暫存器的一些引數:
這裡寫圖片描述
要控制PWM的佔空比就是控制TCMPBn這個暫存器:
這裡寫圖片描述
4、TCNTOn暫存器(COUNT OBSERVATION)
n為0~4,定時器n被啟動後,內部暫存器TCNTn在其工作時鐘下不斷減1計數,我們可以通過讀取TCNTOn暫存器得知其值。
這裡寫圖片描述


5、TCON 暫存器(TIMER CONTROL)
它有以下4個作用:
(1)、第一次啟動定時器“手動”將TCNTBn/TCMPBn 暫存器的值裝入內部暫存器TCNTn、TCMPn中;
(2)、啟動、停止暫存器;
(3)、決定在定時器計數到達0時,是否自動將TCNTBn/TCMPBn 暫存器的值裝入內部暫存器TCNTn、TCMPn中,即是否啟動自動過載功能;
(4)、決定定時器輸出管腳TOUTn 的輸出電平是否反轉;
TCON暫存器位[3:0]、位[11:8]、位[15:12]、位[19:16]、位[22:20]分別用於定時器0~4,除了定時器4外沒有“輸出反轉”(因無輸出管腳),其他功能相似。下面以定時器0說明這些位的作用:
這裡寫圖片描述
在第一次使用定時器時,需要設定“手動更新”位[1] ,為1,使得TCNTBn/TCMPBn暫存器的值裝入內部暫存器TCNTn、TCMPn中,如果下一次還要設定這一位,需要先將它清零。TCON(定時器控制暫存器)還要DMA、Dead Zone的設定,這裡不常用,就不詳述了。

—————————————————————————————————————————————————

到這裡,定時器這一節我們就講解完畢啦。定時器PWM詳解 - 23號的wj - 偉堅的部落格定時器PWM詳解 - 23號的wj - 偉堅的部落格