OSC是用無源晶振,EXT是用有源晶振或外部時鐘2440的12M是Oscillator 是有源的呀!
本文引用地址:
http://m.butianyuan.cn/article/201611/319321.htm2440的12M是Oscillator
Crystal 無源晶體 Oscillator 有源晶體(里面有有源器件) |
| 無源晶振內(nèi)只有一片按一定軸向切割的石英晶體薄片,供接入運放(或微處理器的XTAL端)以形成振蕩.有源晶振內(nèi)帶運放,工作在最佳狀態(tài),電源后,可直接輸出一定頻率的等幅正弦波,一般至少有4引腳,體積稍大. |
準(zhǔn)備先不跑系統(tǒng),把S3C2440和周邊硬件熟悉一下再說。
對于任何一個單片機(jī),要使用它首先就要弄明白他的時鐘系統(tǒng),MCU的時鐘就像人的心臟,跳動的快慢,決定著系統(tǒng)的工作速度。S3C2440的datesheet上說,可以達(dá)到400M,但是也不是說,必須在400M的頻率下工作,主時鐘晶振來自于外部晶振(XTIPLL)或者是外部時鐘(EXTCLK)。時鐘生成器包含了一個振蕩器(振蕩放大器),其連接外部晶振,并且還有2個PLL,可以產(chǎn)生需要的高頻。
通過引腳OM[3:2]來決定時鐘源是Crystal還是EXTCLK,不過我用的開發(fā)板將OM[3:2]固定接地了,都是用外部晶振。有一點值得注意,在對MPLLCON寫入有效值之前,系統(tǒng)使用外部晶振或外部時鐘源的時鐘。即使用戶不準(zhǔn)備改變MPLLCON的值,也應(yīng)當(dāng)重新寫一次。
簡單說一下,S3C2440的時鐘構(gòu)成。
S3C2440具有2個PLL(Phase Locked Loop:用來產(chǎn)生高頻的電路),一個是MPLL,用于產(chǎn)生FCLK,HCLK,PCLK三種頻率,這三種頻率分別有不同的用途:
FCLK是CPU提供的時鐘信號,如果提到CPU的主頻是400MHz,就是指的這個時鐘信號。
HCLK是為AHB總線提供的時鐘信號,Advanced High-performance Bus,主要用于高速外設(shè),比如內(nèi)存控制器,中斷控制器,LCD控制器,DMA以及USB host。
PCLK是為APB總線提供的時鐘信號,Advanced Peripherals Bus,主要用于低速外設(shè),比如WATCHDOG,IIS, I2C,SDI/MMC, GPIO,RTC ,UART,PWM,ADC and SPI等等。
另外一個是UPLL,專門用于驅(qū)動USB host/Device。并且驅(qū)動USB host/Device的頻率必須為48MHz。
在系統(tǒng)復(fù)位之后,如果沒有設(shè)定PLL,則采用外部晶振的頻率作為FCLK,同時FCLK:HCLK:PCLK的比例關(guān)系為1:1:1。
下面說一些跟時鐘有關(guān)的寄存器設(shè)置:通過改變CLKDIVN可以改變FCLK,HCLK,PCLK的分頻比。
鎖定時間計數(shù)寄存器LOCKTIME(0x4c000000):一般使用默認(rèn)就可以。
鎖相環(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],當(dāng)設(shè)置MPLL和UPLL值的時候,需要先設(shè)置UPLL再設(shè)置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
再設(shè)置CLKDIVN=0x03;//FCLK:HCLK:PCLK=1:2:4
這里CLKDIVN(0x4c000014)用于決定三者的分配比例
一般設(shè)置這兩個就可以了。還有一個時鐘控制寄存器CLKCON(0x4c00000c)向相應(yīng)位寫1使能相應(yīng)時鐘,不過一般默認(rèn)為1.
關(guān)于時鐘方面基本就是這么多了
S3C2440 clock 工作原理
時鐘和電源管理這一塊內(nèi)容包括三個部分:時鐘控制, USB控制, 電源控制
在s3c2440a的CPU上,時鐘控制邏輯可以產(chǎn)生需要的時鐘信號,包括給CPU用的FCLK, 給AHB總線外設(shè)用的HCLK以及給APB總線外設(shè)用的PCLK.S3C2440A含有兩個鎖相環(huán):一個是FCLK, HCLK和PCLK, 還有另外一個專門用于USB單元(48Hz).時鐘控制邏輯可以在沒有PLL的時候使時鐘變慢,并且可以用軟件的方法使時鐘與周邊設(shè)備連接與斷開, 這個功能可以節(jié)省功耗.
補充:
AMBA總線
先進(jìn)的微控制器總線體系結(jié)構(gòu)AMBA規(guī)范定義了三種總線:
(1)AHB(Advanced High-performance Bus):用于連接高性能系統(tǒng)模塊。它支持突發(fā)數(shù)據(jù)傳輸方式及單個數(shù)據(jù)傳輸方式,所有時序參考同一個時鐘沿;
(2)ASB(Advanced System Bus):用于連接高性能系統(tǒng)模塊,它支持突發(fā)數(shù)據(jù)傳輸模式;
(3)APB(Advance Peripheral Bus):是一個簡單接口支持低性能的外圍接口。
對于電源控制邏輯,S3C2440A有不同的電源管理的主題,來對某一項任務(wù)來優(yōu)化電源功耗.S3C2440A中的電源管理單元可以有四種模式: 普通模式, SLOW 模式, IDLE模式, SLEEP模式.
功能描述
時鐘架構(gòu)
時鐘產(chǎn)生器包括一個連接在外部crystal上的晶振,并且有兩用于產(chǎn)生S3C2440A所需要的高頻信號的鎖相環(huán).
時鐘源的選擇
下表顯示了芯片模式控制引腳(OM3和OM2)的選擇與S3C2440A時鐘源的關(guān)系.
注意:
1) 盡管重啟后,MPLL會啟動,但是直到軟件正確設(shè)置了MPLLCON寄存器后,MPLL的輸出才作為系統(tǒng)的時鐘.在正確的設(shè)置被設(shè)置前,來自外部的crystal或extclk源直接作為系統(tǒng)時鐘.即使用戶并不想改變MPLLCON寄存器的默認(rèn)值,用戶應(yīng)該在MPLLCON的寄存器中設(shè)置同樣的值.
2) OM[3:2]用于決定測試模式,當(dāng)OM[1:0]是11的時候.
鎖相環(huán)
在時鐘產(chǎn)生器中的MPLL,作為一個電路,作用是在頻率與相伴上同步輸出信號與一個參考輸入信號.
時鐘控制邏輯
時鐘控制邏輯決定使用的信號源,PLL時鐘或外部時鐘. 當(dāng)PLL配置成一個新的頻率時,時鐘控制邏輯中止FCLK的使用,直到使用PLL鎖時間的PLL的輸出穩(wěn)定后. 這種時鐘控制邏輯在通電重啟或從節(jié)電模式中醒來都起作用.
通電重啟(XTIpll)
在普通模式中變換PLL的設(shè)置
USB時鐘控制
FCLK, HCLK, PCLK
FCLK 用于ARM920T
HCLK 用于AHB總線,AHB總線被ARM920T用于,內(nèi)存控制器,中斷控制器,LCD控制器,DMA和USB host block.
PCLK 用于APB總線,APB總線是用于周邊設(shè)備的,如是WDT,IIS, I2C, PWM 計數(shù)器, MMC接口, ADC, UART, GPIO, RTC 和SPI
注意:
1) CLKDIVN必須小心設(shè)置,不要超過HCLK和PCLK的允許范圍.
2) 如果HDIVN不是0,CPU總線模式必須從快速總線模式轉(zhuǎn)換到異步總線模式,通過使用下面的指令來達(dá)到.(S3C2440不支持同步總線模式)
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總線模式是快速總線模式,那么CPU將會在HCLK下工作.這種特性可以用來在不影響HCLK和PCLK的情況下改變CPU頻率成原來的一半或更多.
電源管理
在S3C2440A中,電源管理模塊通過軟件來控制系統(tǒng)時鐘以達(dá)到減少電源功耗的功能.這些主題跟PLL,時鐘控制邏輯(FCLK,HCLK,PCLK)和喚醒信號有關(guān).
S3C2440A有四種電源模式.下面的部分描述各種模式.各種模式之間的轉(zhuǎn)換并不是隨意的.
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打印出來的信息.
code
mov r1, #0x4c000000
ldr r2, =0x7f021
str r2, [r1, #0x04]
與BOOTLOADER里打印出來的一樣.
^ 代表冪
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代碼中沒有進(jìn)行設(shè)置,就用初始值.0
故
HCLK = FCLK/4
PCLK = FCLK/8
至此, clock部分設(shè)置結(jié)束.
clock部分比較容易,現(xiàn)在按照datasheet的思路梳理一下。
一、對clock的基本認(rèn)識
第七部分是“clock & power management”,總結(jié)如下:
1 s3c2410的clock & power management模塊包含三個部分:clock control、usb control、power control?,F(xiàn)在的關(guān)注點是clock control。
2、s3c2410有兩個pll(phase locked loop,鎖相環(huán),在高頻中學(xué)過,可以實現(xiàn)倍頻,s3c2410的高頻就是由此電路產(chǎn)生的)。其中一個是MPLL,M即為main,用來產(chǎn)生三種時鐘信號:Fclk(給CPU核供給時鐘信號,我們所說的s3c2410的cpu主頻為200MHz,就是指的這個時鐘信號,相應(yīng)的,1/Fclk即為cpu時鐘周期)、Hclk(為AHB bus peripherals供給時鐘信號,AHB為advanced high-performance bus)、Pclk(為APB bus peripherals供給時鐘信號,APB為advanced peripherals bus)。在這里,需要了解一下AMBA system architecture了。這個可以到官方網(wǎng)站www.arm.com下載相關(guān)資料。簡單的說,AMBA是一種協(xié)議,這種協(xié)議已經(jīng)稱為片上組織通信的事實上的標(biāo)準(zhǔn)(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總線是ARM提出的一種解決方案,它并非唯一的規(guī)范,但是因為ARM的廣泛使用,AMBA總線也就成為了事實上的規(guī)范了?,F(xiàn)在AMBA總線最新為AMBA 3 specification版本,包括AMBA 3 AXI Interface、AMBA 3 AHB Interface、AMBA 3 APB Interface、AMBA 3 ATB Interface。而s3c2410還只能支持AMBA 2 specification,這個版本包含AMBA 2 AHB Interface、AMBA 2 APB Interface。也就是在s3c2410的框圖中看到的兩種總線接口。需要注意的是,這兩種總線所連的外設(shè)是有區(qū)別的。AHB總線連接高速外設(shè),低速外設(shè)則通過APB總線互連。顯然,對不同總線上的外設(shè),應(yīng)該使用不同的時鐘信號,AHB總線對應(yīng)Hclk,APB總線對應(yīng)Pclk。那么事先就應(yīng)該弄清楚,每條總線對應(yīng)的外設(shè)有那些,這樣在設(shè)置好時鐘信號后,對應(yīng)外設(shè)的初始化的值就要依此而確定了。
AHB bus上的外設(shè)有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上的外設(shè)有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm。
3、主時鐘源來自外部晶振或者外部時鐘。復(fù)位后,MPLL雖然默認(rèn)啟動,但是如果不向MPLLCON中寫入value,那么外部晶振直接作為系統(tǒng)時鐘。EDUKIT-III的外部晶振有兩個,一是用于系統(tǒng)時鐘,為12MHz;一個用于RTC,為32.768KHz。以前實驗沒有向MPLLCON寫入數(shù)值,所以系統(tǒng)時鐘都是12MHz。從這里也可以發(fā)現(xiàn)一個問題,如果外部晶振開始沒有焊上,那么系統(tǒng)是無法正常啟動的。因為按照上述規(guī)則,復(fù)位后還沒有寫入MPLLCON,這時又沒有可以使用的時鐘源,所以不會啟動。也就是硬件完成后,這個12MHz的晶振是一定要焊上的,才能進(jìn)行后續(xù)的硬件測試工作。
二、clock設(shè)置的步驟
首先應(yīng)該讀懂下一段:
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.
|
這個主要是基于PLL的特點。簡單的描述就是,上電復(fù)位后,幾個ms后晶振起振。當(dāng)OSC時鐘信號穩(wěn)定之后,nRESET電平拉高(這是硬件自動檢測過程)。這個時候,PLL開始按照默認(rèn)的PLL配置開始工作,但是特殊性就在于PLL在上電復(fù)位后開始是不穩(wěn)定的,所以s3c2410設(shè)計為把Fin在上電復(fù)位后直接作為Fclk,這是MPLL是不起作用的。如果要想是MPLL起作用,那么方法就是寫入MPLLCON寄存器值,然后等待LOCKTIME時間后,新的Fclk開始工作。下面把這些步驟分來來描述,軟件步驟部分結(jié)合程序進(jìn)行。
1、上電幾個ms后,晶振輸出穩(wěn)定。Fclk=晶振頻率。nRESET恢復(fù)高電平后,cpu開始執(zhí)行指令,這完全是硬件動作,不需要軟件設(shè)置。
2、第一步軟件工作: 設(shè)置P M S divider control,也就是設(shè)置MPLLCON寄存器。
關(guān)于PMS,可以看Figure 7-2.寄存器MPLLCON的設(shè)置呢,其實有一定的規(guī)則,并非你想要的每個Fclk頻率都可以得到。官方推薦了一個表PLL VALUE SELECTION TABLE,要按照這個進(jìn)行。否則的話,就需要自己按照公式推算,但是mizi公司并不保證你的設(shè)置是合適的。所以,如果想要工作在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、第二步軟件工作: 設(shè)置CLKDIVN。
這一步是設(shè)置分頻系數(shù),即Fclk為cpu主頻,Hclk由Fclk分頻得到,Pclk由Hclk分頻得到。假設(shè)Hclk是Fclk的二分頻,Pclk是Hclk的二分頻,那么分頻系數(shù)比就是Fclk:Hclk:Pclk=1:2:4.那么Hclk為100MHz,總線時鐘周期為10ns。Pclk為50MHz。
@ step2:change clock divider movr1,#CLK_CTL_BASE movr2,#vCLKDIVN strr2,[r1,#oCLKDIVN] |
4、第三步軟件工作: CLKDIVN的補充設(shè)置
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. |
看了上段話,只需要翻譯出來就可以了。
@ 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時間,讓新的Fclk生效
@ step4:stay locktime movr1,#CLK_CTL_BASE ldr r2,=vLOCKTIME strr2,[r1,#oLOCKTIME] |
6、對外設(shè)的影響
在這個實驗中,主要是有兩個需要改變,一個外設(shè)是UART,一個外設(shè)是SDRAM。
(1)UART,它是接在APB總線上,所以對應(yīng)的時鐘信號為Pclk,現(xiàn)在為50MHz。如果想要設(shè)置波特率為115200bps,那么根據(jù)公式UBRDIV0=(int)(PCLK/(bps*16))-1計算,應(yīng)該為26。如果放到程序中,那么應(yīng)該注意形式。具體如下:
UBRDIV0=((int)(PCLK/16./UART_BAUD_RATE)-1); |
(2)SDRAM,主要的影響因素為刷新頻率。前面在SDRAM中沒有具體分析,現(xiàn)在可以詳細(xì)說明。使用了兩片HY57V561620CT-H,查看手冊其刷新頻率為8192 refresh cycles/64ms,所以刷新周期64ms/8192=7.8125us。看寄存器REFRESH的各個位的設(shè)置情況:
·REFEN[23]:開啟自動模式,設(shè)為1
·TREFMD[22]:設(shè)為Auto refresh模式,設(shè)為0
·Trp[21:20]:看看RAS precharge Time,查看SDRAM手冊,發(fā)現(xiàn)-H系列此參數(shù)至少為20ns,現(xiàn)在Hclk對應(yīng)的時鐘周期為10ns,所以至少應(yīng)該為2個clock。可以設(shè)為00
·Tsrc: Semi Row Cycle Time,也就是RAS Cycle Time,至少65ms,所以至少得6.5clock,按照可選值,應(yīng)該設(shè)置為11
·Refresh[10:0]:
公式refresh period = (2^11 - refresh_count +1)/Hclk,由此推導(dǎo)出refresh_count=2^11+1-refresh period*Hclk。帶入數(shù)值,計算得出1268=0x04f4,這個數(shù)值要用四舍五入,減少誤差。
·其余的保留值,均設(shè)置為0
由此得出該寄存器的值應(yīng)該為0x008c04f4。
評論