S3C2440 FCLK, HCLK, PCLK的關係
ADS1.2中關於時鐘的C代碼
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);
1)FLCK、HCLK和PCLK的關係
S3C2440有三個時鐘FLCK、HCLK和PCLK
s3c2440官方手冊上說P7-8寫到:
FCLK is used by ARM920T,核心時鐘,主頻。
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 interface,ADC,
UART, GPIO, RTC and SPI.即IO介面時鐘,例如串口的時鐘設定就是從PCLK來的;
那麼這三個時鐘是什麼關係呢?
這三個時鐘通常設定為1:4:8,1:3:6的分頻關係,也就說如果主頻FLCK是400MHz,按照1:4:8的設定,那麼HLCK是100MHz,PLCK
是50MHz
寄存器CLKDIVN表明並設定了這三個時鐘的關係
如果CLKDIVN設定為0x5,那麼比例即為1:4:8,前提是CAMDIVN[9]為0.
2)輸入時鐘FIN與主頻FCLK的關係
現代的CPU基本上都使用了比主頻低的多的時鐘輸入,在CPU內部使用鎖相環進行倍頻。對於S3C2440,常用的輸入時鐘FIN有兩
種:12MHz和16.9344MHz,那麼CPU是如何將FIN倍頻為FCLK的呢?
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
3)關於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的關係
2410的時鐘和電源管理
概述
時鐘和電源管理模組由3部分組成:時鐘控制、USB控制、電源控制。
時鐘控制部分產生3種時鐘訊號:CPU用的FCLK,AHB匯流排用的HCLK,APB匯流排用的PCLK。有2個鎖相環,一個用於FCLK HCLK PCLK,
另一個用於48MHz的USB時鐘。可以通過不使能鎖相環來達到慢速省電目的。
電源管理模組提供了4種模式: Normal模式、Slow模式、Idle模式、Power_Off模式。
Normal Mode
該模式下如果所有外圍裝置都開啟時電流消耗最大,允許使用者通過軟體關閉外圍裝置達到省電目的。
Slow Mode
不採用PLL的模式,能量消耗僅取決於外時鐘的頻率。由外部提供的時鐘源作FCLK。
Idle Mode
關掉了給cpu的FCLK時鐘,但外圍裝置時鐘仍存在,任何到CPU的插斷要求可以將cpu喚醒。
Power_off Mode
這種模式關掉了內部供電,僅有給wake_up部分的供電還存在。可以通過外部中斷或系統時鐘中斷可以喚醒。
功能描述
時鐘結構:主時鐘源來自外部晶振XTlpll或外部時鐘EXTCLK。
時鐘源選擇:通過OM[3: 2]的高低電平選擇,現在我們採用00。OM[3:2]的狀態在nRESET的上升沿鎖存。儘管MPLL在上電複位
後就開始工作,但是MPLL輸出不作為系統時鐘,只有對MPLLCON寫入適當的數值後才可以。即使使用者不想改變MPLLCON的值,也
要重新寫一遍才能使其起作用。
時鐘控制邏輯:時鐘控制邏輯決定要使用的時鐘源,當鎖相環被設定為一個新的值時,時鐘控制邏輯切斷FCLK直到PLL輸出穩定
。時鐘控制邏輯在上電複位或從power_down狀態啟動時使能。
上電複位:注意上電後必須通過設定PLLCON才能使PLL作用。
在正常操作狀態下改變PLL設定:通過改變PMS的值來實現。
USB時鐘控制:UCLK不起作用直到UPLL被設定。
FCLK、HCLK、PCLK:可以通過HDIVN、PDIVN、CLKDIVN來改變3種時鐘的比率,推薦採用1:2:4的比率。在設定完
PMS的值後,需要設定CLKDIVN寄存器,該寄存器設定的值在PLL鎖定後生效,只需要1.5個HCLK即可完成比率的修改。
電源管理:4種模式及特點。
Power_Off模式:外部中斷EINT[15:0]或RTC alarm中斷可以從該模式wakeup.
進入PowerOff模式的流程:1。將GPIO連接埠設定為適當的狀態; 2。……….
VDDi和VDDiarm的控制:在PowerOff模式,僅VDDi和VDDiarm通過PWREN管腳控制被關閉。如果PWREN為高,VDDi和VDDiarm被外部
電源提供,如果為低則關閉。 儘管VDDi,VDDiarm,VDDi_MPLL,VDDi_UPLL可能被關閉,其他電源必須被提供。
EINT[15:0]啟動訊號: EINTn管腳必須被設定為中斷管腳,在啟動後,相應的EINTn管腳將不被用作啟動,可以被用作外部中斷
請求。
電池故障訊號(nBATT_FLT): 當cpu不在PowerOff模式時,nBATT_FLT將要引起低電平觸發的中斷。當在PowerOff模式時,
nBATT_FLT訊號將會禁止晶片從PowerOff模式啟動,故所有的wakeup訊號被屏蔽,此舉用來保護系統電量低時不出現故障。
時鐘和電源管理部分寄存器
LOCKTIME: UPLL、 MPLL 鎖定時間的計數值。
MPLLCON UPLLCON: 這兩個寄存器都有MDIV PDIV SDIV設定,對於輸入12M的晶振,有相應的推薦值,產生200M和48
M的頻率。
CLKCON: 為各種外圍介面提供時鐘。
CLKSLOW: 是否開啟2個PLL。
CLKDIVN: 設定CLK、 HCLK、 PCLK比率的寄存器。