新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于S3C2410時(shí)鐘

關(guān)于S3C2410時(shí)鐘

作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
一、對clock的基本認(rèn)識(shí)

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

第七部分是“clock & power management”,總結(jié)如下:

1 s3c2410的clock & power management模塊包含三個(gè)部分:clock control、usb control、power control。現(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)資料。簡單的說,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總線互連。顯然,對不同總線上的外設(shè),應(yīng)該使用不同的時(shí)鐘信號(hào),AHB總線對應(yīng)Hclk,APB總線對應(yīng)Pclk。那么事先就應(yīng)該弄清楚,每條總線對應(yīng)的外設(shè)有那些,這樣在設(shè)置好時(shí)鐘信號(hào)后,對應(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ù)的硬件測試工作。

二、clock設(shè)置的步驟

首先應(yīng)該讀懂下一段:

Power-On Reset (XTIpll)

Figure 7-4 shows the clock behavior during the power-on reset sequence. 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 the default PLL configuration. However, PLL is commonly known to be unstable after power-on reset, so Fin is fed directly to FCLK instead of the Mpll (PLL output) before the software newly configures the PLLCON. Even if the user does not want to change the default value of PLLCON register after reset, the user should write the same value into PLLCON register by software.

The PLL restarts the lockup sequence toward the new frequency only after the software configures the PLL with a new frequency. FCLK can be configured as PLL output (Mpll) immediately after lock time.

這個(gè)主要是基于PLL的特點(diǎn)。簡單的描述就是,上電復(fù)位后,幾個(gè)ms后晶振起振。當(dāng)OSC時(shí)鐘信號(hào)穩(wěn)定之后,nRESET電平拉高(這是硬件自動(dòng)檢測過程)。這個(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

mov r1, #CLK_CTL_BASE

ldr r2, =vMPLLCON_200

str r2, [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

mov r1, #CLK_CTL_BASE

mov r2, #vCLKDIVN

str r2, [r1, #oCLKDIVN]

4、第三步軟件工作: CLKDIVN的補(bǔ)充設(shè)置

If HDIVN = 1, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following 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

If HDIVN=1 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK. This feature can be used to change the CPU frequency as a half without affecting the HCLK and PCLK.

看了上段話,只需要翻譯出來就可以了。

@ FCLK:HCLK=1:2

.macro MMU_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

mov r1, #CLK_CTL_BASE

ldr r2, =vLOCKTIME

str r2, [r1, #oLOCKTIME]

6、對外設(shè)的影響

在這個(gè)實(shí)驗(yàn)中,主要是有兩個(gè)需要改變,一個(gè)外設(shè)是UART,一個(gè)外設(shè)是SDRAM。

(1)UART,它是接在APB總線上,所以對應(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,查看手冊其刷新頻率為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手冊,發(fā)現(xiàn)-H系列此參數(shù)至少為20ns,現(xiàn)在Hclk對應(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。

S3C2410 CPU默認(rèn)的工作主頻為12MHz,使用PLL電路可以產(chǎn)生更高的主頻供CPU及外圍器件使用。S3C2410有兩個(gè)PLL:MPLL和UPLL,UPLL專用與USB設(shè)備。MPLL用于CPU及其他外圍器件。

通過MPLL會(huì)產(chǎn)生三個(gè)部分的時(shí)鐘頻率:FCLK、HCLK、PLCK。FCLK用于CPU核,HCLK用于AHB總線的設(shè)備(比如SDRAM),PCLK用于APB總線的設(shè)備(比如UART)。從時(shí)鐘結(jié)構(gòu)圖中可以查看到使用不同時(shí)鐘頻率的硬件。

Figure 7-1. Clock Generator Block Diagram

(注:這里要注意從圖中看出,Uart使用的是PCLK,后面Uart實(shí)驗(yàn)會(huì)用到)

下面介紹MPLL的啟動(dòng)流程:

(注:下面內(nèi)容部分直接摘錄自《s3c2410完全開發(fā)流程》,Clock部分寫了非常好)

S3c2410 datasheet 224頁“Figure 7-4. Power-On Reset Sequence”展示了上電后MPLL啟動(dòng)的過程

請跟隨FCLK的圖像了解啟動(dòng)過程:

1、上電幾毫秒后,晶振輸出穩(wěn)定,F(xiàn)CLK=晶振頻率,nRESET信號(hào)恢復(fù)高電平后,

CPU開始執(zhí)行指令。

2、我們可以在程序開頭啟動(dòng)MPLL,在設(shè)置MPLL的幾個(gè)寄存器后,需要等待一段時(shí)間(Lock Time),MPLL的輸出才穩(wěn)定。在這段時(shí)間(Lock Time)內(nèi),F(xiàn)CLK停振,CPU停止工作。Lock Time的長短由寄存器LOCKTIME設(shè)定。

3、Lock Time之后,MPLL輸出正常,CPU工作在新的FCLK下。

設(shè)置S3c2410的時(shí)鐘頻率就是設(shè)置MPLL的幾個(gè)寄存器:

1、LOCKTIME:設(shè)為0x00ffffff

前面說過,MPLL啟動(dòng)后需要等待一段時(shí)間(Lock Time),使得其輸出穩(wěn)定。位[23:12]用于UPLL,位[11:0]用于MPLL。使用確省值0x00ffffff即可。

2、CLKDIVN:用來設(shè)置FCLK:HCLK:PCLK的比例關(guān)系,默認(rèn)為1:1:1

這里值設(shè)為0x03,即FCLK:HCLK:PCLK=1:2:4

CLKDIVN不同的設(shè)置及對應(yīng)的時(shí)鐘比例關(guān)系如下圖:

3、MPLLCON:設(shè)為(0x5c << 12)|(0x04 << 4)|(0x00),即0x5c0040

對于MPLLCON寄存器,[19:12]為MDIV,[9:4]為PDIV,[1:0]為SDIV。有如下計(jì)算公式:

MPLL(FCLK) = (m * Fin)/(p * 2^s)

其中: m = MDIV + 8, p = PDIV + 2

Fin 即默認(rèn)輸入的時(shí)鐘頻率12MHz。MPLLCON設(shè)為0x5c0040,可以計(jì)算出FCLK=200MHz,再由CLKDIVN的設(shè)置可知:HCLK=100MHz,PCLK=50MHz。

通常我們將如上時(shí)鐘初始化的過程寫成clock_init函數(shù)供其他函數(shù)調(diào)用,代碼如下:

void clock_init(void)

{

/*init clock*/

rLOCKTIME = 0xFFFFFF;

/*設(shè)置FCLK:HCLK:PCLK=1:2:4,這樣假設(shè)處理器主頻為200M,則HCLK為50M,PCLK為25M。ARM920T內(nèi)核使用FCLK, 內(nèi)存控制器,LCD控制器等使用HCLK,看門狗、串口等使用PCLK*/

rCLKDIVN = 0x3;

/* 設(shè)置時(shí)鐘頻率為202.7M*/

rMPLLCON = 0x5c0040;

}



關(guān)鍵詞: S3C2410時(shí)

評論


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

關(guān)閉