jz2440的時鐘分析

2021-08-21 03:38:48 字數 1640 閱讀 9210

s3c2440有兩個pll(phase locked loop)乙個是mpll,乙個是upll。mpll用於cpu及其他外圍器件,upll用於usb。用於產生fclk, hclk, pclk三種頻率,這三種頻率分別有不同的用途:

fclk是cpu提供的時鐘訊號。

hclk是為ahb匯流排提供的時鐘訊號, advanced high-performance bus,主要用於高速外設,比如記憶體控制器,中斷控制器,lcd控制器, dma 等。

從s3c2440的datasheet裡可以看到,s3c2440最大支援400mhz的主頻,但是這並不意味著一定工作在400mhz下面,可以通過設定mpll, upll暫存器來設定cpu的工作頻率。 儘管在cpu上電(power-on)或者復位(reset)後,mpll就開始進入工作狀態,但是此時mpll的輸出(mpll)並不作為系統的時鐘,而是直接使用外部訊號extclk或者外部時鐘晶振作為系統時鐘。直到軟體初始化mpll暫存器(rmpllcon),寫入了有效的值過後,系統才開始使用mpll的輸出(mpll)作為系統時鐘。雖然很多時候我們不必重新設定mpll暫存器(rmpllcon)新的值,但是為了使系統使用其輸出作為時鐘訊號,在軟體初始化系統部分,還是要向rmpllcon寫入乙個有效的舊的值。這樣子才使系統處於正確的工作狀態。

關於mpll的計算方法

1. u32 mpll_val=0;

mpll_val = (92<<12)|(1<<4)|(1);

算得mpll_val的二進位制:0101 1100 0000 0001 0001

注意:(92<<12)中的92為十進位制數,轉換為二進位制為0x5c。

changempllvalue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);

代入1算得:changempllvalue(0x5c,1,1);

找到changempllvalue子函式

void changempllvalue(int mdiv,int pdiv,int sdiv)

呼叫子函式,得到rmpllcon二進位制為:0101 1100 0000 0001 0001

根據s3c2440a官方datasheet:

pllcon bit deion

mdiv [19:12] main divider control

pdiv [9:4] pre-divider control

sdiv [1;0] post divider control

以及mpll control register

mpll=(2*m*fin)/(p*2s)

m=(mdiv+8) p=(pdiv+2) s=sdiv

因rmpllcon二進位制為:0101 1100 0000 0001 0001,所以

m=(mdiv+8)=([19:12]+8)=92+8=100

p=(pdiv+2)=([9:4]+2)=1+2=3

s=sdiv=[1:0]=1

mpll=(2*m*fin)/(p*2s)=(2*100*12)/(3*2)=400m

pclk是為apb匯流排提供的時鐘訊號,advanced peripherals bus,主要用於低速外設,比如看門狗,uart控制器, iis, i2c, sdi/mmc, gpio,rtc and spi等。

JZ2440 系統時鐘

jz2440 系統時鐘。時鐘控制邏輯給整個晶元提供了三種時鐘。fclk 用於cpu核心 hclk 用於ahb匯流排上裝置,比如cpu核,儲存控制器,中斷控制器,lcd控制器,dma控制器,和usb主機模組,主要用於高效能模組 pclk 用於apb匯流排上裝置,比如watchdog,iis,i2c,p...

JZ2440 中斷分析

arm體系結構的7中工作模式 1 使用者模式 usr arm處理器正常的程式執行狀態 2 快速中斷模式 fig 用於高速的資料傳輸或通道處理 3 中斷模式 irq 用於通用的中斷處理 4 管理模式 svc 作業系統使用的保護模式 5 資料訪問終止模式 abt 當資料或指令預取終止時進入該模式,可用於...

JZ2440學習筆記

1.easyopenjtag工具用於為目標板初次燒寫u boot再合適不過了。2.燒寫核心和檔案系統使用tftp nfs,速度是很快的哦。toc 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基...