OSC是用無(wú)源晶振,EXT是用有源晶振或外部時(shí)鐘2440的12M是Oscillator 是有源的呀!
本文引用地址:
http://dyxdggzs.com/article/201611/319321.htm2440的12M是Oscillator
Crystal 無(wú)源晶體 Oscillator 有源晶體(里面有有源器件) |
| 無(wú)源晶振內只有一片按一定軸向切割的石英晶體薄片,供接入運放(或微處理器的XTAL端)以形成振蕩.有源晶振內帶運放,工作在最佳狀態(tài),電源后,可直接輸出一定頻率的等幅正弦波,一般至少有4引腳,體積稍大. |
準備先不跑系統,把S3C2440和周邊硬件熟悉一下再說(shuō)。
對于任何一個(gè)單片機,要使用它首先就要弄明白他的時(shí)鐘系統,MCU的時(shí)鐘就像人的心臟,跳動(dòng)的快慢,決定著(zhù)系統的工作速度。S3C2440的datesheet上說(shuō),可以達到400M,但是也不是說(shuō),必須在400M的頻率下工作,主時(shí)鐘晶振來(lái)自于外部晶振(XTIPLL)或者是外部時(shí)鐘(EXTCLK)。時(shí)鐘生成器包含了一個(gè)振蕩器(振蕩放大器),其連接外部晶振,并且還有2個(gè)PLL,可以產(chǎn)生需要的高頻。
通過(guò)引腳OM[3:2]來(lái)決定時(shí)鐘源是Crystal還是EXTCLK,不過(guò)我用的開(kāi)發(fā)板將OM[3:2]固定接地了,都是用外部晶振。有一點(diǎn)值得注意,在對MPLLCON寫(xiě)入有效值之前,系統使用外部晶振或外部時(shí)鐘源的時(shí)鐘。即使用戶(hù)不準備改變MPLLCON的值,也應當重新寫(xiě)一次。
簡(jiǎn)單說(shuō)一下,S3C2440的時(shí)鐘構成。
S3C2440具有2個(gè)PLL(Phase Locked Loop:用來(lái)產(chǎn)生高頻的電路),一個(gè)是MPLL,用于產(chǎn)生FCLK,HCLK,PCLK三種頻率,這三種頻率分別有不同的用途:
FCLK是CPU提供的時(shí)鐘信號,如果提到CPU的主頻是400MHz,就是指的這個(gè)時(shí)鐘信號。
HCLK是為AHB總線(xiàn)提供的時(shí)鐘信號,Advanced High-performance Bus,主要用于高速外設,比如內存控制器,中斷控制器,LCD控制器,DMA以及USB host。
PCLK是為APB總線(xiàn)提供的時(shí)鐘信號,Advanced Peripherals Bus,主要用于低速外設,比如WATCHDOG,IIS, I2C,SDI/MMC, GPIO,RTC ,UART,PWM,ADC and SPI等等。
另外一個(gè)是UPLL,專(zhuān)門(mén)用于驅動(dòng)USB host/Device。并且驅動(dòng)USB host/Device的頻率必須為48MHz。
在系統復位之后,如果沒(méi)有設定PLL,則采用外部晶振的頻率作為FCLK,同時(shí)FCLK:HCLK:PCLK的比例關(guān)系為1:1:1。
下面說(shuō)一些跟時(shí)鐘有關(guān)的寄存器設置:通過(guò)改變CLKDIVN可以改變FCLK,HCLK,PCLK的分頻比。
鎖定時(shí)間計數寄存器LOCKTIME(0x4c000000):一般使用默認就可以。
鎖相環(huán)控制寄存器[MPLLCON(0x4c000004)&UPLLCON(0x4c000008)]:
MPLL=(2*m*Fin)/(p*2^s)UPLL=(m*Fin)/(p*2^s)
其中m=(MDIV+8),p=(PDIV+2),s=SDIV
P,M范圍:1<=P<=62,1<=M<=248
注意:MDIV[19:12],PDIV[9:4],SDIV[1:0],當設置MPLL和UPLL值的時(shí)候,需要先設置UPLL再設置MPLL。
例如:MPLLCON = (92<<12) | (1<<4) |(1);//FCLK=400M
這里MDIV=92,PDIV=1,SDIV=1,那么m=100,p=3,s=1,且Fin=12M,所以FCLK=400M
再設置CLKDIVN=0x03;//FCLK:HCLK:PCLK=1:2:4
這里CLKDIVN(0x4c000014)用于決定三者的分配比例
一般設置這兩個(gè)就可以了。還有一個(gè)時(shí)鐘控制寄存器CLKCON(0x4c00000c)向相應位寫(xiě)1使能相應時(shí)鐘,不過(guò)一般默認為1.
關(guān)于時(shí)鐘方面基本就是這么多了
S3C2440 clock 工作原理
時(shí)鐘和電源管理這一塊內容包括三個(gè)部分:時(shí)鐘控制, USB控制, 電源控制
在s3c2440a的CPU上,時(shí)鐘控制邏輯可以產(chǎn)生需要的時(shí)鐘信號,包括給CPU用的FCLK, 給AHB總線(xiàn)外設用的HCLK以及給APB總線(xiàn)外設用的PCLK.S3C2440A含有兩個(gè)鎖相環(huán):一個(gè)是FCLK, HCLK和PCLK, 還有另外一個(gè)專(zhuān)門(mén)用于USB單元(48Hz).時(shí)鐘控制邏輯可以在沒(méi)有PLL的時(shí)候使時(shí)鐘變慢,并且可以用軟件的方法使時(shí)鐘與周邊設備連接與斷開(kāi), 這個(gè)功能可以節省功耗.
補充:
AMBA總線(xiàn)
先進(jìn)的微控制器總線(xiàn)體系結構AMBA規范定義了三種總線(xiàn):
(1)AHB(Advanced High-performance Bus):用于連接高性能系統模塊。它支持突發(fā)數據傳輸方式及單個(gè)數據傳輸方式,所有時(shí)序參考同一個(gè)時(shí)鐘沿;
(2)ASB(Advanced System Bus):用于連接高性能系統模塊,它支持突發(fā)數據傳輸模式;
(3)APB(Advance Peripheral Bus):是一個(gè)簡(jiǎn)單接口支持低性能的外圍接口。
對于電源控制邏輯,S3C2440A有不同的電源管理的主題,來(lái)對某一項任務(wù)來(lái)優(yōu)化電源功耗.S3C2440A中的電源管理單元可以有四種模式: 普通模式, SLOW 模式, IDLE模式, SLEEP模式.
功能描述
時(shí)鐘架構
時(shí)鐘產(chǎn)生器包括一個(gè)連接在外部crystal上的晶振,并且有兩用于產(chǎn)生S3C2440A所需要的高頻信號的鎖相環(huán).
時(shí)鐘源的選擇
下表顯示了芯片模式控制引腳(OM3和OM2)的選擇與S3C2440A時(shí)鐘源的關(guān)系.
注意:
1) 盡管重啟后,MPLL會(huì )啟動(dòng),但是直到軟件正確設置了MPLLCON寄存器后,MPLL的輸出才作為系統的時(shí)鐘.在正確的設置被設置前,來(lái)自外部的crystal或extclk源直接作為系統時(shí)鐘.即使用戶(hù)并不想改變MPLLCON寄存器的默認值,用戶(hù)應該在MPLLCON的寄存器中設置同樣的值.
2) OM[3:2]用于決定測試模式,當OM[1:0]是11的時(shí)候.
鎖相環(huán)
在時(shí)鐘產(chǎn)生器中的MPLL,作為一個(gè)電路,作用是在頻率與相伴上同步輸出信號與一個(gè)參考輸入信號.
時(shí)鐘控制邏輯
時(shí)鐘控制邏輯決定使用的信號源,PLL時(shí)鐘或外部時(shí)鐘. 當PLL配置成一個(gè)新的頻率時(shí),時(shí)鐘控制邏輯中止FCLK的使用,直到使用PLL鎖時(shí)間的PLL的輸出穩定后. 這種時(shí)鐘控制邏輯在通電重啟或從節電模式中醒來(lái)都起作用.
通電重啟(XTIpll)
在普通模式中變換PLL的設置
USB時(shí)鐘控制
FCLK, HCLK, PCLK
FCLK 用于A(yíng)RM920T
HCLK 用于A(yíng)HB總線(xiàn),AHB總線(xiàn)被ARM920T用于,內存控制器,中斷控制器,LCD控制器,DMA和USB host block.
PCLK 用于A(yíng)PB總線(xiàn),APB總線(xiàn)是用于周邊設備的,如是WDT,IIS, I2C, PWM 計數器, MMC接口, ADC, UART, GPIO, RTC 和SPI
注意:
1) CLKDIVN必須小心設置,不要超過(guò)HCLK和PCLK的允許范圍.
2) 如果HDIVN不是0,CPU總線(xiàn)模式必須從快速總線(xiàn)模式轉換到異步總線(xiàn)模式,通過(guò)使用下面的指令來(lái)達到.(S3C2440不支持同步總線(xiàn)模式)
MMU_SetAsyncBusMode
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #R1_nF:OR:R1_iA
mcr p15, 0, r0, c1, c0, 0
如果HDIVN不是0, 并且CPU總線(xiàn)模式是快速總線(xiàn)模式,那么CPU將會(huì )在HCLK下工作.這種特性可以用來(lái)在不影響HCLK和PCLK的情況下改變CPU頻率成原來(lái)的一半或更多.
電源管理
在S3C2440A中,電源管理模塊通過(guò)軟件來(lái)控制系統時(shí)鐘以達到減少電源功耗的功能.這些主題跟PLL,時(shí)鐘控制邏輯(FCLK,HCLK,PCLK)和喚醒信號有關(guān).
S3C2440A有四種電源模式.下面的部分描述各種模式.各種模式之間的轉換并不是隨意的.
FCLK的值如何得到?
FCLK= Fout = 2 * m * Fin / (p*2^s), Fvco = 2 * m * Fin / p where : m=MDIV+8, p=PDIV+2, s=SDIV
MPLLVal [M:7fh,P:2h,S:1h]bootloader打印出來(lái)的信息.
code
mov r1, #0x4c000000
ldr r2, =0x7f021
str r2, [r1, #0x04]
與BOOTLOADER里打印出來(lái)的一樣.
^ 代表冪
So, FCLK =2* (127+8)*12M/4*2=405M
關(guān)于HCLK, PCLK的值,取決于CLKDIVN的值.
代碼如下:
mov r1, #0x4c000000
ldr r2, 0x5
str r2, [r1, #0x14]
所以CLKDIVN=5, HDIVN=10,PDIVN=1, 再看CAMDIVN
10: HCLK = FCLK/4 when CAMDIVN[9]=0
HCLK = FCLK/8 when CAMDIVN[9]=1
PCLK = HCLK /2
CAMDIVN代碼中沒(méi)有進(jìn)行設置,就用初始值.0
故
HCLK = FCLK/4
PCLK = FCLK/8
至此, clock部分設置結束.
clock部分比較容易,現在按照datasheet的思路梳理一下。
一、對clock的基本認識
第七部分是“clock & power management”,總結如下:
1 s3c2410的clock & power management模塊包含三個(gè)部分:clock control、usb control、power control?,F在的關(guān)注點(diǎn)是clock control。
2、s3c2410有兩個(gè)pll(phase locked loop,鎖相環(huán),在高頻中學(xué)過(guò),可以實(shí)現倍頻,s3c2410的高頻就是由此電路產(chǎn)生的)。其中一個(gè)是MPLL,M即為main,用來(lái)產(chǎn)生三種時(shí)鐘信號:Fclk(給CPU核供給時(shí)鐘信號,我們所說(shuō)的s3c2410的cpu主頻為200MHz,就是指的這個(gè)時(shí)鐘信號,相應的,1/Fclk即為cpu時(shí)鐘周期)、Hclk(為AHB bus peripherals供給時(shí)鐘信號,AHB為advanced high-performance bus)、Pclk(為APB bus peripherals供給時(shí)鐘信號,APB為advanced peripherals bus)。在這里,需要了解一下AMBA system architecture了。這個(gè)可以到官方網(wǎng)站www.arm.com下載相關(guān)資料。簡(jiǎn)單的說(shuō),AMBA是一種協(xié)議,這種協(xié)議已經(jīng)稱(chēng)為片上組織通信的事實(shí)上的標準(the de facto standard for on-chip fabric communication)。下面給出英文描述:
The AMBA protocol is an open standard, on-chip bus specification that details a stategy for the interconnection and management of functional blocks that makes up a system-on-chip(SoC).It facilitates "right-first-time" development of embedded processors with one or more CPU/signal processors and multiple peripherals. The AMBA protocol enhances a resuable design methodology by defining a common backbone for SoC modules.
需要知道的是,AMBA總線(xiàn)是ARM提出的一種解決方案,它并非唯一的規范,但是因為ARM的廣泛使用,AMBA總線(xiàn)也就成為了事實(shí)上的規范了?,F在A(yíng)MBA總線(xiàn)最新為AMBA 3 specification版本,包括AMBA 3 AXI Interface、AMBA 3 AHB Interface、AMBA 3 APB Interface、AMBA 3 ATB Interface。而s3c2410還只能支持AMBA 2 specification,這個(gè)版本包含AMBA 2 AHB Interface、AMBA 2 APB Interface。也就是在s3c2410的框圖中看到的兩種總線(xiàn)接口。需要注意的是,這兩種總線(xiàn)所連的外設是有區別的。AHB總線(xiàn)連接高速外設,低速外設則通過(guò)APB總線(xiàn)互連。顯然,對不同總線(xiàn)上的外設,應該使用不同的時(shí)鐘信號,AHB總線(xiàn)對應Hclk,APB總線(xiàn)對應Pclk。那么事先就應該弄清楚,每條總線(xiàn)對應的外設有那些,這樣在設置好時(shí)鐘信號后,對應外設的初始化的值就要依此而確定了。
AHB bus上的外設有LCD controller(CONT代表controller,控制器)、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、bus CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
APB bus上的外設有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。
3、主時(shí)鐘源來(lái)自外部晶振或者外部時(shí)鐘。復位后,MPLL雖然默認啟動(dòng),但是如果不向MPLLCON中寫(xiě)入value,那么外部晶振直接作為系統時(shí)鐘。EDUKIT-III的外部晶振有兩個(gè),一是用于系統時(shí)鐘,為12MHz;一個(gè)用于RTC,為32.768KHz。以前實(shí)驗沒(méi)有向MPLLCON寫(xiě)入數值,所以系統時(shí)鐘都是12MHz。從這里也可以發(fā)現一個(gè)問(wèn)題,如果外部晶振開(kāi)始沒(méi)有焊上,那么系統是無(wú)法正常啟動(dòng)的。因為按照上述規則,復位后還沒(méi)有寫(xiě)入MPLLCON,這時(shí)又沒(méi)有可以使用的時(shí)鐘源,所以不會(huì )啟動(dòng)。也就是硬件完成后,這個(gè)12MHz的晶振是一定要焊上的,才能進(jìn)行后續的硬件測試工作。
二、clock設置的步驟
首先應該讀懂下一段:
Power-OnReset(XTIpll) Figure 7-4 shows theclockbehavior during the power-onresetsequence.The crystal oscillator begins oscillation within several milliseconds.When nRESET is released after the stabilization of OSC(XTIpll)clock,the PLL starts to operate according to thedefaultPLL configuration.However,PLL is commonly known to be unstable after power-onreset,so Fin is fed directly to FCLK instead of the Mpll(PLL output)before the software newly configures the PLLCON.Evenifthe user doesnotwant to change thedefaultvalue of PLLCONregisterafterreset,the user shouldwritethe same value into PLLCONregisterby software. The PLL restarts the lockup sequence toward thenewfrequency only after the software configures the PLL with anewfrequency.FCLK can be configured as PLL output(Mpll)immediately after locktime.
|
這個(gè)主要是基于PLL的特點(diǎn)。簡(jiǎn)單的描述就是,上電復位后,幾個(gè)ms后晶振起振。當OSC時(shí)鐘信號穩定之后,nRESET電平拉高(這是硬件自動(dòng)檢測過(guò)程)。這個(gè)時(shí)候,PLL開(kāi)始按照默認的PLL配置開(kāi)始工作,但是特殊性就在于PLL在上電復位后開(kāi)始是不穩定的,所以s3c2410設計為把Fin在上電復位后直接作為Fclk,這是MPLL是不起作用的。如果要想是MPLL起作用,那么方法就是寫(xiě)入MPLLCON寄存器值,然后等待LOCKTIME時(shí)間后,新的Fclk開(kāi)始工作。下面把這些步驟分來(lái)來(lái)描述,軟件步驟部分結合程序進(jìn)行。
1、上電幾個(gè)ms后,晶振輸出穩定。Fclk=晶振頻率。nRESET恢復高電平后,cpu開(kāi)始執行指令,這完全是硬件動(dòng)作,不需要軟件設置。
2、第一步軟件工作: 設置P M S divider control,也就是設置MPLLCON寄存器。
關(guān)于PMS,可以看Figure 7-2.寄存器MPLLCON的設置呢,其實(shí)有一定的規則,并非你想要的每個(gè)Fclk頻率都可以得到。官方推薦了一個(gè)表PLL VALUE SELECTION TABLE,要按照這個(gè)進(jìn)行。否則的話(huà),就需要自己按照公式推算,但是mizi公司并不保證你的設置是合適的。所以,如果想要工作在200MHz,還是按照vivi的推薦值即可。
@ step1:set P M S divider control movr1,#CLK_CTL_BASE ldr r2,=vMPLLCON_200 strr2,[r1,#oMPLLCON] |
其中,MDIV=0x5c,PDIV=0x04,SDIV=0x00.公式Mpll(Fclk)=(m×Fin)/(p×(2^s))【m=MDIV+8, p=PDIV+2,s=SDIV】
3、第二步軟件工作: 設置CLKDIVN。
這一步是設置分頻系數,即Fclk為cpu主頻,Hclk由Fclk分頻得到,Pclk由Hclk分頻得到。假設Hclk是Fclk的二分頻,Pclk是Hclk的二分頻,那么分頻系數比就是Fclk:Hclk:Pclk=1:2:4.那么Hclk為100MHz,總線(xiàn)時(shí)鐘周期為10ns。Pclk為50MHz。
@ step2:change clock divider movr1,#CLK_CTL_BASE movr2,#vCLKDIVN strr2,[r1,#oCLKDIVN] |
4、第三步軟件工作: CLKDIVN的補充設置
IfHDIVN=1,the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus modeusingfollowing instructions. MMU_SetAsyncBusMode mrc p15,0,r0,c1,c0,0 orr r0,r0,#R1_nF:OR:R1_iA mcr p15,0,r0,c1,c0,0 IfHDIVN=1andthe CPU bus mode is the fast bus mode,the CPU will operate by the HCLK.Thisfeature can be used to change the CPU frequency as a half without affecting the HCLKandPCLK. |
看了上段話(huà),只需要翻譯出來(lái)就可以了。
@ FCLK:HCLK=1:2 .macroMMU_SetAsyncBusMode mrc p15,0,r0,c1,c0,0 orr r0,r0,#(R1_iA|R1_nF) mcr p15,0,r0,c1,c0,0 .endm @ step3:set asynchronous bus mode MMU_SetAsyncBusMode |
5、第四步軟件工作:等待locktime時(shí)間,讓新的Fclk生效
@ step4:stay locktime movr1,#CLK_CTL_BASE ldr r2,=vLOCKTIME strr2,[r1,#oLOCKTIME] |
6、對外設的影響
在這個(gè)實(shí)驗中,主要是有兩個(gè)需要改變,一個(gè)外設是UART,一個(gè)外設是SDRAM。
(1)UART,它是接在A(yíng)PB總線(xiàn)上,所以對應的時(shí)鐘信號為Pclk,現在為50MHz。如果想要設置波特率為115200bps,那么根據公式UBRDIV0=(int)(PCLK/(bps*16))-1計算,應該為26。如果放到程序中,那么應該注意形式。具體如下:
UBRDIV0=((int)(PCLK/16./UART_BAUD_RATE)-1); |
(2)SDRAM,主要的影響因素為刷新頻率。前面在SDRAM中沒(méi)有具體分析,現在可以詳細說(shuō)明。使用了兩片HY57V561620CT-H,查看手冊其刷新頻率為8192 refresh cycles/64ms,所以刷新周期64ms/8192=7.8125us??醇拇嫫鱎EFRESH的各個(gè)位的設置情況:
·REFEN[23]:開(kāi)啟自動(dòng)模式,設為1
·TREFMD[22]:設為Auto refresh模式,設為0
·Trp[21:20]:看看RAS precharge Time,查看SDRAM手冊,發(fā)現-H系列此參數至少為20ns,現在Hclk對應的時(shí)鐘周期為10ns,所以至少應該為2個(gè)clock??梢栽O為00
·Tsrc: Semi Row Cycle Time,也就是RAS Cycle Time,至少65ms,所以至少得6.5clock,按照可選值,應該設置為11
·Refresh[10:0]:
公式refresh period = (2^11 - refresh_count +1)/Hclk,由此推導出refresh_count=2^11+1-refresh period*Hclk。帶入數值,計算得出1268=0x04f4,這個(gè)數值要用四舍五入,減少誤差。
·其余的保留值,均設置為0
由此得出該寄存器的值應該為0x008c04f4。
評論