S3C2440 CPU預設的工作主頻為12MHz或16.9344MHz,這裡使用最多的是12M。使用PLL電路可以產生更高的主頻供CPU及外圍器件使用。
S3C2440有兩個PLL:MPLL和UPLL,UPLL專用與USB裝置。MPLL用於CPU及其他外圍器件。
通過MPLL會產生三個部分的時鐘頻率:FCLK、HCLK、PLCK。FCLK用於CPU核,HCLK用於AHB匯流排的裝置(比如SDRAM),PCLK用於APB匯流排的裝置(比如UART)。
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應該同樣適用.各位可以實際測實驗證一下.