S5PV210(TQ210)學習筆記——系統時鐘和串列埠
TQ210的系統時鐘配置和串列埠配置非常簡單,本文從TQ210的系統時鐘配置開始討論。
TQ210的時鐘配置跟2440/6410的時鐘配置差不多,只是鎖相環的個數略有不同,配置步驟是一樣的。配置系統時鐘,無非要經過以下幾個步驟:
(1)設定系統PLL鎖定時間
(2)配置PLL
(3)配置各模組分頻係數
(4)切換到PLL時鐘
簡單的看著四步似乎沒有頭緒,但是看到手冊中的“S5PV210時鐘生成線路圖”就可以理解了,現在截圖如下:
上圖中無非就三種模組,PLL、MUX和DIV,MUX控制時鐘源選擇,PLL負責生成PLL時鐘,DIV負責分頻。
為了系統穩定,在設計電路時我們一般不會使用太高頻率的晶振(避免高頻線間/層間干擾),但是,S5PV210的核心需要的工作頻率很高(最高可以達到1G),這中情況下,我們通常是通過鎖相環(英文簡稱PLL)來對外部時鐘源進行倍頻,然後供核心使用(在TQ210開發板上採用的是12M晶振),因此,S5PV210提供了4個PLL(具體四個PLL的用途可以自己閱讀手冊),分別是APLL、MPLL、EPLL和VPLL,通過配置S5PV210提供的鎖相環控制寄存可以設定鎖相環的倍頻係數,使核心工作頻率達到800M或者1G。需要注意的是PLL設定完成之後並不能立刻穩定的工作,需要一個起振過程,在這段時間內PLL的輸出頻率很不穩定,因此,核心的工作也是很不穩定的,為了解決這個問題,S5PV210提供LOCK_TIME(鎖定時間)模組(通過設定相應的LOCK_TIME暫存器可以設定鎖定的時間長度),當鎖相環控制暫存器的值發生改變時,系統會鎖定核心,鎖定核心時CPU不工作,此時鎖定模組會根據LOCK_TIME設定的值進行計時,計時完成後CPU才會使用PLL提供的時鐘訊號工作。
預設狀態下核心使用外部時鐘源提供的時鐘,配置好PLL後需要設定相應的MUX,使核心在PLL提供的時鐘訊號下工作。從上面的時鐘生成線路圖中還可以看到很多MUX,我們可以根據實際要求進行配置。注意,選通PLL的MUX應該在設定完分頻之後配置。
核心可以工作在1G的時鐘訊號下,而其他裝置工作頻率較低,因此,需要根據實際要求進行分頻,分頻的值並不是隨意的,應該根據手冊上提供的參考值進行配置,以下是各模組的最高工作頻率:
這樣,配置完PLL和分頻之後選通PLL,使CPU在高頻模式下工作。
以上S5PV210的系統時鐘配置邏輯,可能說了這麼多您也很難理解,這時,您應該參考程式碼、手冊和本文進行理解。S5PV210系統時鐘配置的程式碼很多,這裡我就不貼出來了,下面,我們討論一下S5PV210的串列埠部分。
S5PV210的串列埠配置比起系統時鐘來講更為簡單。學習串列埠應該先了解下串列埠的工作原理,認識一下串列埠,具體的工作原理可以閱讀手冊的串列埠部分,需要知道串列埠的相關配置引數,如波特率、資料位、停止位、校驗位等,流控制相關的也可以看看,理解後自行配置一下,我們這裡只討論下串列埠的配置,為了簡單起見,我們以非FIFO模式為例進行討論。
直接閱讀手冊的暫存器控制部分,第一個暫存器便是ULCON。ULCON可以配置資料位長度、停止位長度、教研模式和紅外模式,如果需要設定為8N1,非紅外模式則可以將ULCON配置為0x3。
第二個暫存器是UCON,我們只配置一下傳輸/接收模式和時鐘源即可,其他的採用預設方式,為了簡單,我們選擇“中斷或查詢模式”,以PCLK為時鐘源,因此,可以配置UCON為0x5|(1<<10)。
我們使用非FIFO模式,可以不設定UFCON暫存器。
UMCON是流控制相關的,我們也不作配置。
接下來的四個STAT暫存器是表徵串列埠工作狀態的,無需配置。
接下來的UTXH是傳送緩衝區暫存器和URXH是接收緩衝區暫存器。
UBRDIV和UDIVSLOT是配置串列埠波特率的,演算法也比較簡單,手冊上提供了三個約束公式:
DIV_VAL = UBRDIVn + (num of 1's UDIVSLOTn)/16
DIV_VAL = (PCLK/(bps X 16))-1
或者
DIV_VAL = (SCLK_UART / (bps X 16)) - 1
我們選擇PCLK作為串列埠工作時鐘源,PCLK的頻率為66.5M,如果我們要設定串列埠波特率為115200則可以如下計算:
DIV_VAL = (66.5 X 10^6 / (115200 X 16)) - 1 = 35.07,故UBRDIV應該設定為35,
另外,0.07*16 + 1 = 2,所以UDIVSLOT中應該有兩個1,故可以設定為0x3,當然也可以是0x88等,只要有兩個1位就可以。
到這裡,串列埠就配置好了,還是比較簡單的,您配置完後還可以自己配置下FIFO和流控制,學完中斷和DMA之後還可以配置為中斷或者DMA模式,這裡就不多說了。程式碼比較簡單,網上的例子也比較多,我就不上傳了。
本文作者:girlkoo