(1)簡介:
S3C2410具有5個16-bit的定時器,通道号為0~4,其中有4個可以來控制PWM信号輸出,是以稱它們為PWM定時器。
其中:
定時器0~3除具有定時功能外,還有脈寬調制功能。
定時器4隻具有内部定時器邏輯單元而無輸出管腳。
定時器0還具有用于控制大電流裝置的死區發生器
主用名稱解釋:
TCNTBn:定時器計數緩沖寄存器,n:0~4;
TCNTn:定時器遞減計數寄存器,n: 0~4;
TCMPBn:定時器比較緩沖寄存器,n: 0~3;
TCMPn:定時器比較寄存器,n: 0~3
(2)預分頻器(prescaler)與時鐘分頻器(divider)
定時器0~1:共享一個8-bit預分頻器;
定時器2~4:共享另一個8-bit預分頻器。
每一個定時器又分别有一個5級時鐘分頻器,分頻級别為1/2、1/4、1/8、1/16和TCLK(檔位)。
每一個定時器子產品從自己的時鐘分頻器中接收最後分出的時鐘信号。這個時鐘信号由片内外設時鐘PCLK首先經過預 分頻器,再經過分頻器獲得。
預分頻器的分頻值儲存在TCFG0,時鐘分頻器的分頻值儲存在TCFG1寄存器中。
(3)定時器的定時功能
定時器的定時功能由内部的控制邏輯産生。
每一個定時器具有屬于自己的16-bit的遞減計數器,該計數器由定時器時鐘驅動。
當遞減計數器遞減到0時,定時器産生中斷請求提醒CPU定時操作完成。當定時器遞減計數器減到0時,相應的TCNTBn的值自動裝載到遞減計數器中為下次定時操作做準備。但是,如果定時器的start/stop位被設定為stop,定時器停止,那麼TCNTBn的值将不再重載到遞減計數器中。
(4)PWM 定時器
TCMPBn的值主要用于設定PWM脈沖的占空比的。
當遞減計數器的值遞減到與比較寄存器相等時,定時器控制邏輯将控制PWM定時器輸出電平改變。是以,比較寄存器決定了PWM輸出的開啟或關斷的時間。
(5)PWM 定時器特點:
5個16-bit定時器;
2個8-bit預分頻器和2個4-bit分頻器;
占空比可程式設計的輸出波形;
死區發生器。
(6)PWM定時器操作
定時器(除了定時器通道4)都有TCNTBn,TCNTn,TCMPBn,TCMPn。
其中,TCNTn和TCMPn都屬于定時器内部的寄存器。TCNTn寄存器能通過TCNTOn寄存器被讀出。
當定時器的遞減計數器減到0時,TCNTBn和TCMPBn被重裝到TCNTn和TCMPn中,而且,中斷請求産生。
定時器的時鐘源是PCLK,5個定時器共享2個8位預分頻器,經過預分頻器之後,每個定時器還擁有4個不同分頻信号(1/2,1/4,1/8和1/16)輸出的時鐘分頻器,這樣就可以使定時器的時鐘範圍更大。預分頻器的設定通過TCFG0寄存器實作,時鐘分頻器的分頻選擇(即定時器時鐘源選擇)設定通過TCFG1寄存器實作;
定時器是減法計數的,當定時器TCNTn的值倒數到0時,TCNTBn寄存器的值會被自動的加載到定時器繼續下一次定時操作。當定時器TCNTn的值倒數到0時,如果中斷使能,将會産生一次定時器中斷請求;
為了能夠正确輸出PWM信号:
首先,需要正确設定GPBCON寄存器選擇相應I/O的為TOUTx功能。
然後,通過TCFG0寄存器為PWM定時器時鐘源設定預分頻值,通過TCFG1寄存器再為PWM選擇哪一路時鐘輸出。
接着,通過TCNTBx寄存器設定PWM周期,通過TCMPBx設定PWM占空比。
最後,通過TCON寄存器啟動PWM定時器,即可輸出PWM信号。
(7)自動重裝與雙緩沖
我們可以賦于計數緩沖寄存器(TCNTB0)和比較緩沖寄存器(TCMPB0)不同的初始值,當定時器使能時,這兩個寄存器中的資料将被分别載入到減法計數器(TCNT0)和比較寄存器(TCMP0)。計數緩沖寄存器和比較緩沖寄存器的設計思想在S3C2410中被稱為“雙緩沖”,它的優點是在頻率或占空比改變時,定時器仍然能産生穩定的輸出。
S3C2410A PWM定時器具有雙緩沖功能,用于将更新的值重裝為下一次定時操作做準備而不影響本次操作。
當auto reload=1,同時,TCNTn遞減=0,自動重裝功能将TCNTBn中的值拷貝到TCNTn中。
當auto reload=0,同時,TCNTn遞減=0,自動重裝功能被禁止,TCNTn無法被重裝,定時器也就停止了。
(8)定時器初始化
定時器重裝發生在TCNTn遞減到0時,是以,TCNTn的初始值應該提前定義好。是以,初始值的設定必須由“手動更新位”實作。
(1)向TCMPBn和TCNTBn中寫初始值;
(2)設定相應寄存器的“手動更新”位,這樣,硬體控制邏輯就将TCNTBn中值拷貝到TCNTn中了,同時,也将TCMPBn中的值拷貝到TCMPn中了。同時,推薦使用者配置“手動更新”位的同時也配置“反相輸出開/關”位(無論使用者是否使用)。
(3)設定相應寄存器的起始位啟動定時器,并清除手動更新位。
(9)相關寄存器描述
S3C2410的預分頻器 (TCFG0)
S3C2410的分頻器 (TCFG1)
S3C2410的控制寄存器(TCON)
TCNTB0決定了定時器的頻率(周期),即決定了PWM的周期。 TCMPB0決定了PWM的占空比
#define CLKDIVN (*(volatile unsignedint *)0x4c000014)
#define MPLLCON (*(volatile unsigned int *)0x4c000004)
#define TCFG0 (*(volatile unsigned int *)0x51000000)
#define TCFG1 (*(volatile unsigned int *)0x51000004)
#define TCON (*(volatile unsigned int *)0x51000008)
#define TCNTB0 (*(volatile unsigned int *)0x5100000C)
#define TCMPB0 (*(volatile unsigned int *)0x51000010