日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WINCE6.0+S3C6410主要时钟控制

發布時間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINCE6.0+S3C6410主要时钟控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

********************************LoongEmbedded*****************
作者:LoongEmbedded(kandi)
時間:2011.06.19

類別:WINCE驅動開發
********************************LoongEmbedded*****************

?

備注:S3C6410ARM內核時鐘(ARMCLK)官方推薦的穩定的533MHz。

DMC:動態內存控制器

?

S3C64103PLL,分為為APLL、MPLLEPLL,其中APLL提供ARMCLK提供時鐘給CPUMPLL分別提供HCLKAXI/AHB總線設備與提供PCLK時鐘給APB總線設備外,EPLL提供SCLK給外設,特別是用于音頻相關的時鐘。

PLL最主要的意義在于輸出比輸入更高頻率的時鐘,這是系統在工作工作時候所需要的時鐘,但我們可以通過外部提供的時鐘源(EXTCLK)來提供慢速時鐘ARMCLK、HCLKPCLK來降低系統功耗。也可以通過軟件來控制每個外設的時鐘信號的啟用或者禁止來控制系統功耗。下面就來開始學習系統是如何管理時鐘的。

?

1.???? APLL、MPLLEPLL輸出時鐘及ARMCLK、HCLKPCLKSCLK的確定

我們先來看

1

1闡明了時鐘產生邏輯:APLL用于ARM內核時鐘操作,MPLL用于主時鐘操作,EPLL用于特殊用途。操作系統分為三組,第一組是APLL產生的ARM時鐘,第二組是MPLL產生的時鐘,該時鐘用于AXI、AHBAPB總線操作,最后一組是EPLL產生的時鐘,主要用于外設IPs,比如是UART、IISIIC等。

?

1.1 APLLMPLL輸出頻率的確定

根據圖1,APLL,MPLL和EPLL的輸出時鐘,是如何確定呢?結合下圖來理解

圖2

從圖2對寄存器的描述可知APLL_CON/MPLL_CON寄存器的MDIV、PDIV和SDIV可以確定APLL及MPLL的輸出時鐘,再結合下圖就可以知道如何設置MDIV、PDIV和SDIV了。

圖3

根據圖3推薦的幾組值,我們的系統選擇FOUT=533MHZ這一組,那代碼中是在哪里如何體現的呢?在src/oal/oallib/starup.s中下面的代碼對MDIV、PDIV和SDIV設置

圖4

結合圖3,我們選擇FOUT=533MHZ,所以有MDIV=266,PDIV=3,SDIV=1,這樣APLL輸出的時鐘頻率就為667MHZ,這樣我們就可以有下面的賦值

APLL_MVAL??? EQU??? (266)

APLL_PVAL??? EQU??? (3)

APLL_SVAL??? EQU??? (1)

這幾個值是在PLATFORM/COMMON/SRC/SOC/S3C6410_SEC_V1/OAL/INC/s3c6410.inc中設置的

接下來怎么確定MPLL輸出的時鐘呢?我們看下面這個表

圖5

這樣我們就可以確定MPLL輸出的時鐘為266MHZ,從而結合圖3可知MPLL對應的MDIV=266、PDIV=3和SDIV=2,這樣我們就可以有下面的賦值

MPLL_MVAL??? EQU??? (266)

MPLL_PVAL??? EQU??? (3)

MPLL_SVAL??? EQU??? (2)

?

1.2 EPLL輸出頻率的確定

EPLL輸出頻率是由EPLL_CON0和EPLL_CON1寄存器的MDIV,PDIV,SDIV和KDIV的值來決定的,下圖是EPLL輸出頻率的推薦值

圖6

根據圖6的選擇可知MDIV=28,PDIV=1,SDIV=2,KDIV=0,從而可以有下面的賦值:

EPLL_MVAL??? EQU??? (254)

EPLL_PVAL??? EQU??? (9)

EPLL_SVAL??? EQU??? (2)

EPLL_KVAL??? EQU??? (0)

對EPLL_CON0和EPLL_CON1寄存器的設置也是在在src/oal/oallib/starup.s中設置的,接著圖4,這些設置代碼如圖7所示

圖7

1.3改變PLL的輸出頻率

上面描述了對APLL、MPLL和EPLL輸出頻率寄存器的設置,先是比較之前的這些寄存器的值是否和現在要設置的一致,如果不一致,就要讓現在的設置生效,這是通過調用PLL_NeedToConfigure函數來實現的,下面就來學習這個函數

圖8

下面我們來學習這個函數

1)?????? 關閉APLL、MPLL和EPLL時鐘輸出

為什么要做這個動作呢?因為接下來要改變PLL的時鐘輸出,而PLL輸出的時鐘在PLL的lock-time時間之后才能給系統提供穩定的時鐘,所以先采用FIN作為輸入時鐘,結合圖1可更好理解,這個動作就是下面的代碼來實現的

bic?? ?????r1, r1, #0x7

對CLK_SRC[0:2]位清零,下圖對CLK_SRC[0:2]位的描述

圖9

2)?????? 通過設置CLK_DIV0寄存器的設置來控制系統系統和具體的時鐘,也就是確定ARMCLK、HCLK*2、HCLK和PCLK,我們先來看CLK_DIV0寄存器的相關位描述

圖10

從圖5可知ARMCLK=533MHZ,HCLK*2=266MHZ,HCLK=133MHZ,PCLK=66MHZ,也知DOUTapll=533MHZ,MOUTmpll=266MHZ,這樣根據圖10中的公式就可以算出ARM_RATIO=0,MPLL_RATIO=1,HCLK_RATIO=1,HCLK*2_RATIO=1,PCLK_RATIO=1。這里通過下圖來理解HCLK*2IN和HCLK*2以及怎么算出HCLK*2_RATIO的

圖11

?

3)?????? 設置PLL的lock time

APLL_LOCK,MPLL_LOCK和EPLL_LOCK寄存器用于設置對應的PLL的lock time,下面看這幾個寄存器的描述

圖12

我們再來看看下面的描述可以更好去理解。

圖13

4)?????? 設置PMS的值,可參考圖4到圖7之間的內容描述。

到此對PLL_NeedToConfigure函數的描述已經完成了。

?

1.4??? 檢查CLK_DIV0寄存器是否和要設置的內容一致,如果不一致就要按照現在要配置的

內容來配置,實現的代碼如下:

圖14

可見上面第2)部分的描述,下面來看看CLKDIV_NeedToConfigure函數的實現,

圖15

?

總結

以上是生活随笔為你收集整理的WINCE6.0+S3C6410主要时钟控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。