新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于arm時(shí)鐘頻率的設(shè)置及編程

關(guān)于arm時(shí)鐘頻率的設(shè)置及編程

作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏

OSC是用無源晶振,EXT是用有源晶振或外部時(shí)鐘2440的12M是Oscillator 是有源的呀!

本文引用地址:http://butianyuan.cn/article/201611/319321.htm

2440的12M是Oscillator

Crystal 無源晶體
Oscillator 有源晶體(里面有有源器件)

無源晶振內(nèi)只有一片按一定軸向切割的石英晶體薄片,供接入運(yùn)放(或微處理器的XTAL端)以形成振蕩.有源晶振內(nèi)帶運(yùn)放,工作在最佳狀態(tài),電源后,可直接輸出一定頻率的等幅正弦波,一般至少有4引腳,體積稍大.

準(zhǔn)備先不跑系統(tǒng),把S3C2440和周邊硬件熟悉一下再說。

對(duì)于任何一個(gè)單片機(jī),要使用它首先就要弄明白他的時(shí)鐘系統(tǒng),MCU的時(shí)鐘就像人的心臟,跳動(dòng)的快慢,決定著系統(tǒng)的工作速度。S3C2440的datesheet上說,可以達(dá)到400M,但是也不是說,必須在400M的頻率下工作,主時(shí)鐘晶振來自于外部晶振(XTIPLL)或者是外部時(shí)鐘(EXTCLK)。時(shí)鐘生成器包含了一個(gè)振蕩器(振蕩放大器),其連接外部晶振,并且還有2個(gè)PLL,可以產(chǎn)生需要的高頻。

通過引腳OM[3:2]來決定時(shí)鐘源是Crystal還是EXTCLK,不過我用的開發(fā)板將OM[3:2]固定接地了,都是用外部晶振。有一點(diǎn)值得注意,在對(duì)MPLLCON寫入有效值之前,系統(tǒng)使用外部晶振或外部時(shí)鐘源的時(shí)鐘。即使用戶不準(zhǔn)備改變MPLLCON的值,也應(yīng)當(dāng)重新寫一次。

簡(jiǎn)單說一下,S3C2440的時(shí)鐘構(gòu)成。

S3C2440具有2個(gè)PLL(Phase Locked Loop:用來產(chǎn)生高頻的電路),一個(gè)是MPLL,用于產(chǎn)生FCLK,HCLK,PCLK三種頻率,這三種頻率分別有不同的用途:

FCLK是CPU提供的時(shí)鐘信號(hào),如果提到CPU的主頻是400MHz,就是指的這個(gè)時(shí)鐘信號(hào)。

HCLK是為AHB總線提供的時(shí)鐘信號(hào),Advanced High-performance Bus,主要用于高速外設(shè),比如內(nèi)存控制器,中斷控制器,LCD控制器,DMA以及USB host。

PCLK是為APB總線提供的時(shí)鐘信號(hào),Advanced Peripherals Bus,主要用于低速外設(shè),比如WATCHDOG,IIS, I2C,SDI/MMC, GPIO,RTC ,UART,PWM,ADC and SPI等等。

另外一個(gè)是UPLL,專門用于驅(qū)動(dòng)USB host/Device。并且驅(qū)動(dòng)USB host/Device的頻率必須為48MHz。

在系統(tǒng)復(fù)位之后,如果沒有設(shè)定PLL,則采用外部晶振的頻率作為FCLK,同時(shí)FCLK:HCLK:PCLK的比例關(guān)系為1:1:1。

下面說一些跟時(shí)鐘有關(guān)的寄存器設(shè)置:通過改變CLKDIVN可以改變FCLK,HCLK,PCLK的分頻比。

鎖定時(shí)間計(jì)數(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í)候,需要先設(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è)置這兩個(gè)就可以了。還有一個(gè)時(shí)鐘控制寄存器CLKCON(0x4c00000c)向相應(yīng)位寫1使能相應(yīng)時(shí)鐘,不過一般默認(rèn)為1.

關(guān)于時(shí)鐘方面基本就是這么多了

S3C2440 clock 工作原理

時(shí)鐘和電源管理這一塊內(nèi)容包括三個(gè)部分:時(shí)鐘控制, USB控制, 電源控制

s3c2440a的CPU上,時(shí)鐘控制邏輯可以產(chǎn)生需要的時(shí)鐘信號(hào),包括給CPU用的FCLK, 給AHB總線外設(shè)用的HCLK以及給APB總線外設(shè)用的PCLK.S3C2440A含有兩個(gè)鎖相環(huán):一個(gè)是FCLK, HCLK和PCLK, 還有另外一個(gè)專門用于USB單元(48Hz).時(shí)鐘控制邏輯可以在沒有PLL的時(shí)候使時(shí)鐘變慢,并且可以用軟件的方法使時(shí)鐘與周邊設(shè)備連接與斷開, 這個(gè)功能可以節(jié)省功耗.

補(bǔ)充:
AMBA總線

先進(jìn)的微控制器總線體系結(jié)構(gòu)AMBA規(guī)范定義了三種總線:

(1)AHB(Advanced High-performance Bus):用于連接高性能系統(tǒng)模塊。它支持突發(fā)數(shù)據(jù)傳輸方式及單個(gè)數(shù)據(jù)傳輸方式,所有時(shí)序參考同一個(gè)時(shí)鐘沿;

(2)ASB(Advanced System Bus):用于連接高性能系統(tǒng)模塊,它支持突發(fā)數(shù)據(jù)傳輸模式;

(3)APB(Advance Peripheral Bus):是一個(gè)簡(jiǎn)單接口支持低性能的外圍接口。


對(duì)于電源控制邏輯,S3C2440A有不同的電源管理的主題,來對(duì)某一項(xiàng)任務(wù)來優(yōu)化電源功耗.S3C2440A中的電源管理單元可以有四種模式: 普通模式, SLOW 模式, IDLE模式, SLEEP模式.

功能描述

時(shí)鐘架構(gòu)
時(shí)鐘產(chǎn)生器包括一個(gè)連接在外部crystal上的晶振,并且有兩用于產(chǎn)生S3C2440A所需要的高頻信號(hào)的鎖相環(huán).

時(shí)鐘源的選擇
下表顯示了芯片模式控制引腳(OM3和OM2)的選擇與S3C2440A時(shí)鐘源的關(guān)系.

注意:
1) 盡管重啟后,MPLL會(huì)啟動(dòng),但是直到軟件正確設(shè)置了MPLLCON寄存器后,MPLL的輸出才作為系統(tǒng)的時(shí)鐘.在正確的設(shè)置被設(shè)置前,來自外部的crystal或extclk源直接作為系統(tǒng)時(shí)鐘.即使用戶并不想改變MPLLCON寄存器的默認(rèn)值,用戶應(yīng)該在MPLLCON的寄存器中設(shè)置同樣的值.
2) OM[3:2]用于決定測(cè)試模式,當(dāng)OM[1:0]是11的時(shí)候.

鎖相環(huán)
在時(shí)鐘產(chǎn)生器中的MPLL,作為一個(gè)電路,作用是在頻率與相伴上同步輸出信號(hào)與一個(gè)參考輸入信號(hào).

時(shí)鐘控制邏輯
時(shí)鐘控制邏輯決定使用的信號(hào)源,PLL時(shí)鐘或外部時(shí)鐘. 當(dāng)PLL配置成一個(gè)新的頻率時(shí),時(shí)鐘控制邏輯中止FCLK的使用,直到使用PLL鎖時(shí)間的PLL的輸出穩(wěn)定后. 這種時(shí)鐘控制邏輯在通電重啟或從節(jié)電模式中醒來都起作用.

通電重啟(XTIpll)

在普通模式中變換PLL的設(shè)置

USB時(shí)鐘控制

FCLK, HCLK, PCLK
FCLK 用于ARM920T
HCLK 用于AHB總線,AHB總線被ARM920T用于,內(nèi)存控制器,中斷控制器,LCD控制器,DMA和USB host block.
PCLK 用于APB總線,APB總線是用于周邊設(shè)備的,如是WDT,IIS, I2C, PWM 計(jì)數(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將會(huì)在HCLK下工作.這種特性可以用來在不影響HCLK和PCLK的情況下改變CPU頻率成原來的一半或更多.

電源管理
在S3C2440A中,電源管理模塊通過軟件來控制系統(tǒng)時(shí)鐘以達(dá)到減少電源功耗的功能.這些主題跟PLL,時(shí)鐘控制邏輯(FCLK,HCLK,PCLK)和喚醒信號(hào)有關(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的思路梳理一下。
一、對(duì)clock的基本認(rèn)識(shí)
第七部分是“clock & power management”,總結(jié)如下:
1 s3c2410的clock & power management模塊包含三個(gè)部分:clock control、usb control、power control?,F(xiàn)在的關(guān)注點(diǎn)是clock control。
2、s3c2410有兩個(gè)pll(phase locked loop,鎖相環(huán),在高頻中學(xué)過,可以實(shí)現(xiàn)倍頻,s3c2410的高頻就是由此電路產(chǎn)生的)。其中一個(gè)是MPLL,M即為main,用來產(chǎn)生三種時(shí)鐘信號(hào):Fclk(給CPU核供給時(shí)鐘信號(hào),我們所說的s3c2410的cpu主頻為200MHz,就是指的這個(gè)時(shí)鐘信號(hào),相應(yīng)的,1/Fclk即為cpu時(shí)鐘周期)、Hclk(為AHB bus peripherals供給時(shí)鐘信號(hào),AHB為advanced high-performance bus)、Pclk(為APB bus peripherals供給時(shí)鐘信號(hào),APB為advanced peripherals bus)。在這里,需要了解一下AMBA system architecture了。這個(gè)可以到官方網(wǎng)站www.arm.com下載相關(guān)資料。簡(jiǎn)單的說,AMBA是一種協(xié)議,這種協(xié)議已經(jīng)稱為片上組織通信的事實(shí)上的標(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ī)范,但是因?yàn)锳RM的廣泛使用,AMBA總線也就成為了事實(shí)上的規(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,這個(gè)版本包含AMBA 2 AHB Interface、AMBA 2 APB Interface。也就是在s3c2410的框圖中看到的兩種總線接口。需要注意的是,這兩種總線所連的外設(shè)是有區(qū)別的。AHB總線連接高速外設(shè),低速外設(shè)則通過APB總線互連。顯然,對(duì)不同總線上的外設(shè),應(yīng)該使用不同的時(shí)鐘信號(hào),AHB總線對(duì)應(yīng)Hclk,APB總線對(duì)應(yīng)Pclk。那么事先就應(yīng)該弄清楚,每條總線對(duì)應(yīng)的外設(shè)有那些,這樣在設(shè)置好時(shí)鐘信號(hào)后,對(duì)應(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、主時(shí)鐘源來自外部晶振或者外部時(shí)鐘。復(fù)位后,MPLL雖然默認(rèn)啟動(dòng),但是如果不向MPLLCON中寫入value,那么外部晶振直接作為系統(tǒng)時(shí)鐘。EDUKIT-III的外部晶振有兩個(gè),一是用于系統(tǒng)時(shí)鐘,為12MHz;一個(gè)用于RTC,為32.768KHz。以前實(shí)驗(yàn)沒有向MPLLCON寫入數(shù)值,所以系統(tǒng)時(shí)鐘都是12MHz。從這里也可以發(fā)現(xiàn)一個(gè)問題,如果外部晶振開始沒有焊上,那么系統(tǒng)是無法正常啟動(dòng)的。因?yàn)榘凑丈鲜鲆?guī)則,復(fù)位后還沒有寫入MPLLCON,這時(shí)又沒有可以使用的時(shí)鐘源,所以不會(huì)啟動(dòng)。也就是硬件完成后,這個(gè)12MHz的晶振是一定要焊上的,才能進(jìn)行后續(xù)的硬件測(cè)試工作。
二、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.

這個(gè)主要是基于PLL的特點(diǎn)。簡(jiǎn)單的描述就是,上電復(fù)位后,幾個(gè)ms后晶振起振。當(dāng)OSC時(shí)鐘信號(hào)穩(wěn)定之后,nRESET電平拉高(這是硬件自動(dòng)檢測(cè)過程)。這個(gè)時(shí)候,PLL開始按照默認(rèn)的PLL配置開始工作,但是特殊性就在于PLL在上電復(fù)位后開始是不穩(wěn)定的,所以s3c2410設(shè)計(jì)為把Fin在上電復(fù)位后直接作為Fclk,這是MPLL是不起作用的。如果要想是MPLL起作用,那么方法就是寫入MPLLCON寄存器值,然后等待LOCKTIME時(shí)間后,新的Fclk開始工作。下面把這些步驟分來來描述,軟件步驟部分結(jié)合程序進(jìn)行。
1、上電幾個(gè)ms后,晶振輸出穩(wěn)定。Fclk=晶振頻率。nRESET恢復(fù)高電平后,cpu開始執(zhí)行指令,這完全是硬件動(dòng)作,不需要軟件設(shè)置。
2、第一步軟件工作: 設(shè)置P M S divider control,也就是設(shè)置MPLLCON寄存器。
關(guān)于PMS,可以看Figure 7-2.寄存器MPLLCON的設(shè)置呢,其實(shí)有一定的規(guī)則,并非你想要的每個(gè)Fclk頻率都可以得到。官方推薦了一個(gè)表PLL VALUE SELECTION TABLE,要按照這個(gè)進(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,總線時(shí)鐘周期為10ns。Pclk為50MHz。

@ step2:change clock divider
movr1,#CLK_CTL_BASE
movr2,#vCLKDIVN
strr2,[r1,#oCLKDIVN]

4、第三步軟件工作: CLKDIVN的補(bǔ)充設(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時(shí)間,讓新的Fclk生效

@ step4:stay locktime
movr1,#CLK_CTL_BASE
ldr r2,=vLOCKTIME
strr2,[r1,#oLOCKTIME]

6、對(duì)外設(shè)的影響
在這個(gè)實(shí)驗(yàn)中,主要是有兩個(gè)需要改變,一個(gè)外設(shè)是UART,一個(gè)外設(shè)是SDRAM。
(1)UART,它是接在APB總線上,所以對(duì)應(yīng)的時(shí)鐘信號(hào)為Pclk,現(xiàn)在為50MHz。如果想要設(shè)置波特率為115200bps,那么根據(jù)公式UBRDIV0=(int)(PCLK/(bps*16))-1計(jì)算,應(yīng)該為26。如果放到程序中,那么應(yīng)該注意形式。具體如下:

UBRDIV0=((int)(PCLK/16./UART_BAUD_RATE)-1);

(2)SDRAM,主要的影響因素為刷新頻率。前面在SDRAM中沒有具體分析,現(xiàn)在可以詳細(xì)說明。使用了兩片HY57V561620CT-H,查看手冊(cè)其刷新頻率為8192 refresh cycles/64ms,所以刷新周期64ms/8192=7.8125us。看寄存器REFRESH的各個(gè)位的設(shè)置情況:
·REFEN[23]:開啟自動(dòng)模式,設(shè)為1
·TREFMD[22]:設(shè)為Auto refresh模式,設(shè)為0
·Trp[21:20]:看看RAS precharge Time,查看SDRAM手冊(cè),發(fā)現(xiàn)-H系列此參數(shù)至少為20ns,現(xiàn)在Hclk對(duì)應(yīng)的時(shí)鐘周期為10ns,所以至少應(yīng)該為2個(gè)clock??梢栽O(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ù)值,計(jì)算得出1268=0x04f4,這個(gè)數(shù)值要用四舍五入,減少誤差。
·其余的保留值,均設(shè)置為0
由此得出該寄存器的值應(yīng)該為0x008c04f4。



關(guān)鍵詞: arm時(shí)鐘頻率編

評(píng)論


技術(shù)專區(qū)

關(guān)閉