S5PV210(TQ210)學(xué)習筆記——系統時(shí)鐘和串口
TQ210的時(shí)鐘配置跟2440/6410的時(shí)鐘配置差不多,只是鎖相環(huán)的個(gè)數略有不同,配置步驟是一樣的。配置系統時(shí)鐘,無(wú)非要經(jīng)過(guò)以下幾個(gè)步驟:
本文引用地址:http://dyxdggzs.com/article/201611/322803.htm(1)設置系統PLL鎖定時(shí)間
(2)配置PLL
(3)配置各模塊分頻系數
(4)切換到PLL時(shí)鐘
簡(jiǎn)單的看著(zhù)四步似乎沒(méi)有頭緒,但是看到手冊中的“S5PV210時(shí)鐘生成線(xiàn)路圖”就可以理解了,現在截圖如下:
上圖中無(wú)非就三種模塊,PLL、MUX和DIV,MUX控制時(shí)鐘源選擇,PLL負責生成PLL時(shí)鐘,DIV負責分頻。
為了系統穩定,在設計電路時(shí)我們一般不會(huì )使用太高頻率的晶振(避免高頻線(xiàn)間/層間干擾),但是,S5PV210的內核需要的工作頻率很高(最高可以達到1G),這中情況下,我們通常是通過(guò)鎖相環(huán)(英文簡(jiǎn)稱(chēng)PLL)來(lái)對外部時(shí)鐘源進(jìn)行倍頻,然后供內核使用(在TQ210開(kāi)發(fā)板上采用的是12M晶振),因此,S5PV210提供了4個(gè)PLL(具體四個(gè)PLL的用途可以自己閱讀手冊),分別是APLL、MPLL、EPLL和VPLL,通過(guò)配置S5PV210提供的鎖相環(huán)控制寄存可以設置鎖相環(huán)的倍頻系數,使內核工作頻率達到800M或者1G。需要注意的是PLL設置完成之后并不能立刻穩定的工作,需要一個(gè)起振過(guò)程,在這段時(shí)間內PLL的輸出頻率很不穩定,因此,內核的工作也是很不穩定的,為了解決這個(gè)問(wèn)題,S5PV210提供LOCK_TIME(鎖定時(shí)間)模塊(通過(guò)設置相應的LOCK_TIME寄存器可以設定鎖定的時(shí)間長(cháng)度),當鎖相環(huán)控制寄存器的值發(fā)生改變時(shí),系統會(huì )鎖定內核,鎖定內核時(shí)CPU不工作,此時(shí)鎖定模塊會(huì )根據LOCK_TIME設定的值進(jìn)行計時(shí),計時(shí)完成后CPU才會(huì )使用PLL提供的時(shí)鐘信號工作。
默認狀態(tài)下內核使用外部時(shí)鐘源提供的時(shí)鐘,配置好PLL后需要設置相應的MUX,使內核在PLL提供的時(shí)鐘信號下工作。從上面的時(shí)鐘生成線(xiàn)路圖中還可以看到很多MUX,我們可以根據實(shí)際要求進(jìn)行配置。注意,選通PLL的MUX應該在設置完分頻之后配置。
內核可以工作在1G的時(shí)鐘信號下,而其他設備工作頻率較低,因此,需要根據實(shí)際要求進(jìn)行分頻,分頻的值并不是隨意的,應該根據手冊上提供的參考值進(jìn)行配置,以下是各模塊的最高工作頻率:
這樣,配置完P(guān)LL和分頻之后選通PLL,使CPU在高頻模式下工作。
以上S5PV210的系統時(shí)鐘配置邏輯,可能說(shuō)了這么多您也很難理解,這時(shí),您應該參考代碼、手冊和本文進(jìn)行理解。S5PV210系統時(shí)鐘配置的代碼很多,這里我就不貼出來(lái)了,下面,我們討論一下S5PV210的串口部分。
S5PV210的串口配置比起系統時(shí)鐘來(lái)講更為簡(jiǎn)單。學(xué)習串口應該先了解下串口的工作原理,認識一下串口,具體的工作原理可以閱讀手冊的串口部分,需要知道串口的相關(guān)配置參數,如波特率、數據位、停止位、校驗位等,流控制相關(guān)的也可以看看,理解后自行配置一下,我們這里只討論下串口的配置,為了簡(jiǎn)單起見(jiàn),我們以非FIFO模式為例進(jìn)行討論。
直接閱讀手冊的寄存器控制部分,第一個(gè)寄存器便是ULCON。ULCON可以配置數據位長(cháng)度、停止位長(cháng)度、教研模式和紅外模式,如果需要設置為8N1,非紅外模式則可以將ULCON配置為0x3。
第二個(gè)寄存器是UCON,我們只配置一下傳輸/接收模式和時(shí)鐘源即可,其他的采用默認方式,為了簡(jiǎn)單,我們選擇“中斷或查詢(xún)模式”,以PCLK為時(shí)鐘源,因此,可以配置UCON為0x5|(1<<10)。
我們使用非FIFO模式,可以不設置UFCON寄存器。
UMCON是流控制相關(guān)的,我們也不作配置。
接下來(lái)的四個(gè)STAT寄存器是表征串口工作狀態(tài)的,無(wú)需配置。
接下來(lái)的UTXH是發(fā)送緩沖區寄存器和URXH是接收緩沖區寄存器。
UBRDIV和UDIVSLOT是配置串口波特率的,算法也比較簡(jiǎn)單,手冊上提供了三個(gè)約束公式:
DIV_VAL = UBRDIVn + (num of 1s UDIVSLOTn)/16
DIV_VAL = (PCLK/(bps X 16))-1
或者
DIV_VAL = (SCLK_UART / (bps X 16)) - 1
我們選擇PCLK作為串口工作時(shí)鐘源,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中應該有兩個(gè)1,故可以設置為0x3,當然也可以是0x88等,只要有兩個(gè)1位就可以。
到這里,串口就配置好了,還是比較簡(jiǎn)單的,您配置完后還可以自己配置下FIFO和流控制,學(xué)完中斷和DMA之后還可以配置為中斷或者DMA模式,這里就不多說(shuō)了。代碼比較簡(jiǎn)單,網(wǎng)上的例子也比較多,我就不上傳了。
評論