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