FCLK HCKL和PCLK的關係

2021-07-29 09:43:31 字數 2960 閱讀 1595

三星官方搭載的wince系統的flck值為400mhz,hclk值為100mhz、pclk值為50mhz。那麼這些值通過什麼方法計算出來呢?大概過程如下,這些值在外部晶振12mhz的基礎上通過pll的作用倍頻到我們需要的核心頻率如400mhz,由於該頻率過高,需要通過對預分頻器進行適當的設定獲取外圍裝置能夠正常工作的頻率如hclk 100mhz、plck 50mhz。

fclk(給cpu核供給時鐘訊號,我們所說的s3c2410的cpu主頻為200mhz,就是指的這個時鐘訊號,相應的,1/fclk即為cpu時鐘週期)、hclk(為ahb bus peripherals供給時鐘訊號,ahb為advanced high-performance bus)、pclk(為apb bus peripherals供給時鐘訊號,apb為advanced peripherals bus)。

ahb匯流排連線高速外設,低速外設則通過apb匯流排互連。顯然,對不同匯流排上的外設,應該使用不同的時鐘訊號,ahb匯流排對應hclk,apb匯流排對應pclk。那麼事先就應該弄清楚,每條匯流排對應的外設有那些,這樣在設定好時鐘訊號後,對應外設的初始化的值就要依此而確定了。

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。

s3c2440使用了三個倍頻因子mdiv、pdiv和sdiv來設定將fin倍頻為mpll,也就是fclk

mpll=(2*m*fin)/(p*2^s) where m=(mdiv+8), p=(pdiv+2), s="sdiv"

暫存器mpllcon就是用來設定倍頻因子的

理論上,你可以通過設定該暫存器來實現不同的頻率,然而,由於實際存在的各種約束關係,設定乙個適當的頻率並不容易,手冊上列出了一些常用頻率的**,

例如,假設輸入時鐘fin=16.9344m,mdiv=110, pdiv="3", sdiv="1",

利用上面的公式,fclk=2*16.9344*(110+8)/((2+3)*2)=399.65

關於usb時鐘

s3c2440有兩個鎖相環,乙個主鎖相環mpll提供給fclk的,另外乙個upll是提供給usb時鐘(48mhz)的,與mpll一樣,upll的產生也是通過upllcon暫存器設定分頻因子得到,計算公式稍有不同:

upll=(m*fin)/(p*2^s) where m=(mdiv+8), p=(pdiv+2), s="sdiv",同樣,可以通過查表得到乙個合適的值。

最後值得一提的是,在clkdivn的第三位divn_upll用來設定usb時鐘uclk和upll的關係,如果upll已經是48mhz了,那麼這一位應該設定為0,表示1:1的關係,否則是1:2的關係

在這裡有必要說明fclk、hclk、pclk的含義:

fclk為核心時鐘,

hclk為匯流排時鐘(包括usb時鐘):hclk is used for ahb bus, which is used by the arm920t, the memory controller, the interrupt controller, the lcd controller, the dma and usb host block. 也就是匯流排時鐘,包括usb時鐘。

pclk is used for apb bus, which is used by the peripherals such as wdt, iis, i2c, pwm timer, mmc inte***ce,adc, uart, gpio, rtc and spi.即io介面時鐘,(如常用的spi、i2c、uart的時鐘配置都是通過pclk時鐘為基準的)。

設定mpllcon與設定clkdinv的**如下:

;設定mpllcon

ldr 

r0, = mpllcon

ldr 

r1, = ((92 << 12) + (1 << 4) + 1)

str 

r1, [r0]

mpllcon的配置是用來確定fclk頻率的,計算公式如下:

圖1 計算flck

從「ldr 

r1, = ((92 << 12) + (1 << 4) + 1) 」該**中可以看到數值存在移位操作,即92<<12、1<<4,這個可以參考圖2各預分頻值的配置。

圖2 mdiv、pdiv、sdiv

mdiv的配置在mpllcon的[19:12]位,因此配置mdiv的值需要左移12位。同樣的道理,配置pdiv值需要左移4位,sdiv值需要左移0位(左移0位相當於不用偏移,廢話,嘻嘻)。

那麼根據圖1計算flck的公式,計算過程如下:

fclk=2*(92+8)*(12000000)/(3+2^1)=400000000=400mhz

當fclk得到正確的配置後,這時就需要對hclk、fclk進行配置了,即進行預分頻操作,該配置過程很見到,只需要對clkdivn簡單配置一下就ok了。

clkdivn暫存器內容如圖3。

;設定clkdivn

ldr r0,=clkdivn

ldr r1,=0x5

str r1,[r0]

clkdivn的配置值為0x5,即fclk:hclk:pclk=1:4:8。相對應的頻率將會是400mhz、100mhz、50mhz。 

FCLK,HCLK和 PCLK時鐘三者之間的關係

fclk是提供給arm920t 的時鐘。hclk 是提供給用於 arm920t,儲存器控制器,中斷控制器,lcd 控制器,dma 和 usb 主機模組的 ahb匯流排的時鐘。pclk 是提供給用於外設如wdt,iis,i2c,pwm 定時器,mmc sd 介面,adc,uart,gpio,rtc 和...

FCLK,HCLK和 PCLK時鐘三者之間的關係

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!fclk是提供給arm920t 的時鐘。hclk 是提供給用於 arm920t,儲存器控制器,中斷控制器,lcd 控制器,dma 和 usb 主機模組的 ahb匯流排的時鐘。pclk 是提供給用於外設如wdt,iis,i2c,pwm 定時器,mmc...

python string和bytes的關係

python中可以直接使用decode 將bytes格式化成string,decode 裡面可以指定encoding即指定解碼方式。將string轉成bytes可以使用encode 方式,encode 也可以指定編碼方式。首先,python裡面不存在位元組字串的格式化操作,即bytes是沒辦法格式化...