1、上電幾毫秒後,晶振輸出穩定,fclk=晶振頻率,nreset訊號恢復高電平後,cpu開始執行指令。
2、我們可以在程式開頭啟動mpll,在設定mpll的幾個暫存器後,需要等待一段時間(lock time),mpll的輸出才穩定。在這段時間(lock time)內,fclk停振,cpu停止工作。lock time的長短由暫存器locktime設定。
3、lock time之後,mpll輸出正常,cpu工作在新的fclk下。
在講解之前,先介紹一下 s3c2440 時鐘系統。一般來說, mcu 的主時鐘源主要是外部晶振
或外部時鐘 , 而用的最多的是外部晶振 。 在正確情況下 , 系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻件 , 所以往往需要 pll ( 鎖相環 ) 進行倍頻處理 。 在 s3c2440 中 , 有 2 個不的 pll , 乙個是 mpll ,另乙個是 upll 。 upll 是給 usb 提供 48mhz 。在這裡,我們主要介mpll 。外部時鐘源經過 mpll 處理後能夠得到三個不同的系統時鐘: fclk 、 hclk 和 pclk 。 fclk 是主頻時鐘,用於 arm920t 核心; hclk 用於 ahb 匯流排裝置,如 arm920t ,記憶體控制,中斷控制, lcd 控制, dma 以及 usb 主模組; pclk 用於 apb 匯流排裝置,如外圍裝置的看門狗 , iis , i2c , pwm , mmc 介面 , adc , uart , gpio , rtc 以及 spi 。 這三個系統時鐘( fclk 、 hclk 和 pclk )是有一定的比例關係,這種關係是通過暫存器 clkdivn 中的 hdivn 位和 pdivn 位來控制的,因此我們只要知道了 fclk ,再通過這兩位的控制,就能確定 hclk 和 pclk 。 而 fclk 是如何得到的呢?它是通過輸入時鐘 ( 即外部時鐘源 )的頻率 , 經過乙個計算公式 ( 具體公式請查閱資料手冊 ) 得到的 , 這個計算公式還需要三個引數 ( mdiv 、 pdiv 、 sdiv ) , 而這三個引數是經過暫存器 mpllcon 配置得到的 。 最後 ,我們用最清晰的線路來繪製一下時鐘的產生過程:外部時鐘源 → 通過暫存器 mpllcon 得
到 fclk → 再通過暫存器 clkdivn 得到 hclk 和 pclk 。 這個配置過程在啟動檔案中就已完成。
uclk低頻下無法正常啟動的解決
今天tpu拿出一塊2440板子除錯,發現儘管採取了種種措施,usbhost總是會偶爾不工作.把uclk通過clkout0引出,用示波器檢視,發現不工作的時候,uclk根本就沒有穩定下來.於是仔細思考,影響usb的有這幾個地方:
1.外部晶振16.9344mhz
2.locktime暫存器的upll locktime
3.upllcon 4.clkslow暫存器的upll開關
接下來逐個排除:
1.晶振是mpll和upll公用,從來沒聽說過mpll不穩定的.
2.懷疑locktime太大(0xffff),但改小了沒有效果.
3.在uclk不穩定的時候,重複設定upllcon是沒有用的.
4.在uclk不穩定的時候,開關upll,有效果!在uclk穩定的情況下,開關upll,同樣會出現不穩定的情況. 那麼就是說,upll在啟動的時候,可能會同步失敗.但是為什麼呢?upll與mpll應該是同樣的結構,mpll就從來不出問題.upll只是頻率比mpll低一些.那就從頻率上再找找看. 現對upllcon設定了乙個比較低的頻率(比如7mhz),此時無論如何開關upll,uclk始終穩定不起來.好了,曙光已經出現了!然後設定了乙個超高的頻率(112mhz),哈哈,不關如何開關upll,還是上電啟動,uclk都非常穩定.
問題於是可以這樣描述了:upll在低頻率下不能可靠的啟動. 問題的解決辦法:首先給upll乙個較高的頻率,待其穩定工作後,再設定所需的頻率. 注意:如果要開關clkslow裡面的upll開關,也要遵循這個設定步驟. 這樣改過之後,tpu開關電源一百多次,uclk始終非常穩定.這只是2440的情況,但對2410應該同樣適用.各位可以實際測試驗證一下.
S3C2440時鐘詳細描述
s3c2440 cpu預設的工作主頻為12mhz或16.9344mhz,這裡使用最多的是12m。使用pll電路可以產生更高的主頻供cpu及外圍器件使用。s3c2440有兩個pll mpll和upll,upll專用與usb裝置。mpll用於cpu及其他外圍器件。通過mpll會產生三個部分的時鐘頻率 f...
S3C2440 時鐘計算
s3c2440有兩個pll phase locked loop 乙個是mpll,乙個是upll。mpll用於cpu及其他外圍器件,upll用於usb。s3c2440a 中的時鐘控制邏輯可以產生必須的時鐘訊號,包括cpu 的fclk,ahb 匯流排外設的hclk 以及 apb 匯流排外設的pclk。s...
S3C2440時鐘計算
關於mpll的計算方法 1.u32 mpll val 0 mpll val 92 12 1 4 2 算得mpll val 的二進位制 0101 1100 0000 0001 0010 注意 92 12 中的92 為十進位制數,轉換為二進位制為 0x5c。2.changempllvalue mpll ...