JZ2440系統時鐘和定時器
系統時鐘
首先看下各個模組與時鐘匯流排的關係:
晶片剛開始上電時, 執行的時鐘就等於晶振的時鐘Fin, 通過設定MPLL和UPLL可以提升執行頻率.
MPLL計算方法:
例: Fout = (2 * (MDIV + 8) * Fin) / ((PDIV + 2) * (2^SDIV))
Fout = 200MHz = (2 * (92 + 8) * 12) / (1 + 2) * (2^2)
MDIV = 92
PDIV = 1
SDIV = 2
#define S3C2440_MPLL_200MHZ ((0x5c << 12) | (0x01 << 4) | (0x02))
也可以使用官方推薦的值:
CLKDIVN = 0x03; // FCLK:HCLK:PCLK=4:2:1, HDIVN=1,PDIVN=1
補充: LockTime是指配置了MPLL/UPLL之後時鐘需要一段時間來穩定下來, 這段時間就是locktime
PWM定時器
S3C2440A 有 5 個 16 位定時器。其中定時器 0、1、2 和 3 具有脈寬調製(PWM)功能。定時器 4 是一個無輸出引腳的內部定時器。定時器 0 還包含用於大電流驅動的死區發生器。
以PWM定時器的暫存器說明:
工作原理:
(1)TCMPBn 和 TCNTBn 分別裝入定時器 n 的比較值和初始值
(2)設定 TCON 來啟動定時器 n. 這時 TCMPBn / TCNTBn 分別自動裝入 TCMPn / TCNTn 中, 然後 TCNTn開始遞減
(3)當 TCMPn == TCNTn , TIMn輸出引腳的電平翻轉
(4)當 TCNTn == 0, TIMn 輸出引腳再次翻轉, 並且申請中斷
(5)當 TCNTn == 0, 且 TCON 配置了定時器為自動重灌, 則TCMPBn / TCNTBn 自動裝入 TCMPn / TCNTn中, 開始新一輪的遞減.
TCFG0: TIMn 的 預分頻值
TCFG1: TIMn 的 分頻值
例: timer0_clock = 100MHz / (99+1) / 16 = 62500Hz
void timer0_init(void)
{
TCFG0 = 99; // 預分頻器0 = 99
TCFG1 = 0x03; // 選擇16分頻
TCNTB0 = 31250; // 0.5秒鐘觸發一次中斷
TCON |= (1<<1); // 手動更新
TCON = 0x09; // 自動載入,清“手動更新”位,啟動定時器0
}
1
2
3
4
5
6
7
8
看門狗定時器
(1) 首先是兩級分頻, 和TIM一樣, 看門狗模組分為兩個模式, 1. 普通定時器 2. 看門狗. 如果當做普通定時器時則應使能中斷且禁止看門狗定時器
(2) 在 WTDAT 中裝入初值, 因為一旦使能WTD之後, WTDAT的值不能自動載入到WTCNT中, 所以必須一開始就為 WTCNT 裝載初值, 開始遞減。減到0的時候,需要手動重新賦值。
(3)如果WTD作為普通定時器, WTCNT==0時, 產生中斷. 如果作為WTD, WTCNT==0時則產生復位訊號
---------------------
作者:種瓜大爺
來源:CSDN
原文:https://blog.csdn.net/czg13548930186/article/details/75425759
版權宣告:本文為博主原創文章,轉載請附上博文連結!