您好,登錄后才能下訂單哦!
這篇文章主要講解了“arm9時鐘及定時器怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“arm9時鐘及定時器怎么實現”吧!
首先看下各個模塊與時鐘總線的關系:
芯片剛開始上電時, 運行的時鐘就等于晶振的時鐘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
/*************************************************定時器**********************************************************************/
s3c2440有5個16bit定時器, 其中0~3具有pwm功能(輸出), TIM4是無輸出引腳的內部定時器, TIM0還包含死區功能, 以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 TIM0_init(void) { TCFG0 = (99 << 0); //預分頻值 99 TCFG1 = (16 << 0); //分頻值 16 TCNTB0 = 31250; //定時 0.5 s TCON = ~(1 << 1); //手動更新 TCON = 0x09 //自動更新, 清"手動更新"標志位, 啟動TIM0. 貌似必須先設置"手動跟新" 然后再清除"手動更新" }
/**************************************看 門 狗**************************************************************/
(1) 首先是兩級分頻, 和TIM一樣, 看門狗模塊分為兩個模式, 1. 普通定時器 2. 看門狗. 如果當做普通定時器時則應使能中斷且禁止看門狗定時器
(2) 在 WTDAT 中裝入初值, 因為一旦使能WTD之后, WTDAT的值不能自動加載到WTCNT中, 所以必須一開始就為 WTCNT 裝載初值, 開始遞減.減到0的時候
(3)如果WTD作為普通定時器, WTCNT==0時, 產生中斷. 如果作為WTD, WTCNT==0時則產生復位信號
感謝各位的閱讀,以上就是“arm9時鐘及定時器怎么實現”的內容了,經過本文的學習后,相信大家對arm9時鐘及定時器怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。