天天看點

PLL,FCLK、HCLK、PCLK,AHB/APB (S3C2410)

總結的不錯的一片文章!

原文位址:http://hi.baidu.com/%B0%AE%D4%C2%D2%B2%D2%B9%C3%DF%B3%D9/blog/item/75d1b6175b76a25cf2de3201.html

把網友的總結一下,歸納如下:

1、PLL(鎖相環)

    為了降低電磁幹擾和降低闆間布線要求,晶片外接的晶振頻率通常很低(這塊闆子用的12MHz),通過時鐘控制邏輯的PLL提高系統使時鐘。鎖相環起到的是倍頻的作用,鎖相環的使用有鎖定和連接配接的過程。(有的晶片鎖定連接配接過程是自動完成的比如S3C2440,有的則需要手動程式設計實作鎖定和連接配接,總之PLL屬于一種片上外設,不同廠家的産品使用上略有不同)

    以S3C2410為例,其内部有兩個鎖相環: MPLL、UPLL,分别為MCU和USB控制器産生時鐘信号,其中MPLL未連接配接之前MCU直接使用震蕩源作時鐘信号,連接配接後則改用MPLL倍頻後的震蕩源作時鐘信号;而UPLL因為是為USB裝置提供時鐘信号,是以規定必須是48MHz或96MHz。

2、分頻器

    S3C2410有四種時鐘信号(從UPLL分出來的UCLK,從MPLL分出來的FCLK/HCLK/PCLK)。UCLK(比為48MHz)是供給USB的,FCLK是供給MCU的,HCLK供給AHB,PCLK供給APB。

FCLK 與MPLL的頻率一樣。我們所說的S3C2410的CPU主頻為200MHz,就是指的這個時鐘信号,相應的,1/FCLK即為CPU時鐘周期。

HCLK 可以設定為FCLK或FCLK/2 ,即通過設定相應得寄存器CLKDIVN中的對應位HDIVN即可,其中HDIVN為0時對應FCLK,為1時對應FCLK/2

PCLK可以設定為HCLK或HCLK/2 ,即通過設定相應得寄存器CLKDIVN中的對應位PDIVN即可,其中PDIVN為0時對應HCLK,為1時對應HCLK/2

3、AHB/APB

AHB與APB的地位相當于PC中的南北橋,是兩道獨立的片内總線。AHB:advanced high-performance bus;APB: advanced peripherals bus。 在這裡,需要了解一下AMBA system architecture了。簡單的說,AMBA是一種協定,這種協定已經稱為片上組織通信的事實上的标準(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提出的一種解決方案,它并非唯一的規範,但是因為ARM的廣泛使用,AMBA總線也就成為了事實上的規範了。現在AMBA總線最新為AMBA 3 specification版本,包括AMBA 3 AXI Interface、AMBA 3 AHB Interface、AMBA 3 APB Interface、AMBA 3 ATB Interface。而S3C2410還隻能支援AMBA 2 specification,這個版本包含AMBA 2 AHB Interface、AMBA 2 APB Interface。也就是在S3C2410的框圖中看到的兩種總線接口。

這兩種總線所連的外設是有差別的。AHB總線連接配接高速外設,低速外設則通過APB總線互連。顯然,對不同總線上的外設,應該使用不同的時鐘信号,AHB總線對應HCLK,APB總線對應PCLK。弄清楚每條總線對應的外設,在設定好時鐘信号後,對應外設的初始化的值依此而确定。

bus上的外設有LCD 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 、BUS CONT、SPI、IIC、IIS、GPIO、RTC、ADC、Timer/PWM。

4、Fin

指CPU外圍接的晶振本身的頻率,通常為12MHz。

注意:

1. Although the MPLL starts just after a reset, the MPLL output (Mpll) is not used as the system clock until the software writes valid settings to the MPLLCON register. Before this valid setting, the clock from external crystal or EXTCLK source will be used as the system clock directly. Even if the user does not want to change the default value of MPLLCON register, the user should write the same value into MPLLCON register”

複位後,MPLL雖然預設啟動,但是如果不向MPLLCON中寫入value,那麼外部晶振直接作為系統時鐘。 EB110-4的外部晶振有兩個,一是用于系統時鐘,為12MHz;一個用于RTC,為32.768KHz。若實驗沒有向MPLLCON寫入數值,系統時鐘是12MHz。(從這裡也可以發現一個問題,如果焊闆子時外部晶振開始沒有焊上,那麼系統是無法正常啟動的。因為按照上述規則,複位後還沒有寫入 MPLLCON,這時又沒有可以使用的時鐘源,是以不會啟動。也就是硬體完成後,這個12MHz的晶振是一定要焊上的,才能進行後續的硬體測試工作。)

   上電複位後,幾個ms後晶振起振。當OSC時鐘信号穩定之後,nRESET電平拉高(這是硬體自動檢測過程)。這個時候,PLL開始按照預設的PLL配置開始工作,但是特殊性就在于PLL在上電複位後開始是不穩定的,是以S3C2410設計為把Fin在上電複位後直接作為FCLK,這是MPLL是不起作用的。如果要想是MPLL起作用,那麼方法就是寫入MPLLCON寄存器值,然後等待LOCKTIME時間後,新的FCLK開始工作。

即使不想改變MPLLCON寄存器的值,也要重新指派一下。

.

.

.

.

.

.

.

TIPS:

1、FCLK PCLK HCLK:

http://blog.csdn.net/vrix/archive/2009/07/28/4386400.aspx

2、北郵人論壇:

http://bbs.byr.cn/article/Embedded_System/2561

3、BootLoader中PLL的初始化代碼分析:

http://blog.csdn.net/formerman/archive/2009/07/26/4380126.aspx

4、關于時鐘及分頻的讨論:

http://www.linuxforum.net/forum/showflat.php?Cat=&Board=driver&Number=664181&page=&view=&sb=&o=&fpart=all&vc=1

5、從PC總線到ARM的内部總線:

http://blog.csdn.net/thewayma/archive/2009/06/22/4286891.aspx

繼續閱讀