• JZ2440开发笔记(8)——FCLK、HCLK和PCLK


      S3C2440中有三种时钟,分别是FCLK,HCLK和PCLK。这三种时钟的功能各不相同,其中FCLK主要是为ARM920T的内核提供工作频率,如图:

      HCLK主要是为S3C2440 AHB总线(Advanced High performance Bus)上挂接硬件提供工作频率,AHB总线主要挂接有内存,NAND,LCD控制器等硬件,如图:

      PCLK主要是为APB总线提供频率,APB总线上主要挂载UART、WatchDog等硬件控制器,如图:

      S3C2440上的时钟源是12MHz,如果想让CPU工作在更高频率上,就需要通过PLL(锁相环)来提高主频。S3C2440上的PLL有两种,一种是MPLL,它是用来产生FCLK、HCLK、PCLK的高频工作时钟;还有一种是UPLL,用来为USB提供工作频率。

      从时序图中,我们可以看到,上电之后,如果什么都不设置,FCLK和晶振的频率相等。当设置PLL后,CPU并不是马上就使用设置好的高频时钟,而是有一段锁定时间,在这段时间里,CPU停止运行,等12MHz变成高频时钟稳定以后,整个系统再重新运行。

      

      开启MPLL的过程: 1、设置LOCKTIME变频锁定时间

                2、设置FCLK与晶振输入频率(Fin)的倍数

                3、设置FCLK,HCLK,PCLK三者之间的比例

      从手册上可以看到,LOCKTIME的默认时间是0xFFFFFFFF,控制方法如图:

      

      FCLK与Fin的倍数通过MPLLCON寄存器设置,三者之间有以下关系:

      MPLL(FCLK) = (2*m*Fin)/(p*2^s)

      其中:m = MDIV + 8, p = PDIV + 2, s = SDIV

      PLL配置寄存器如图:

      当设置完MPLL之后,就会自动进入LockTime变频锁定期间,LockTime之后,MPLL输出稳定时钟频率。

        FCLK、HCLK、PCLK的设置比例如图:

      而设置HDIVN和PDIVN的值是通过设置CLKDIVN来完成的,如图:

      如果HDIV设置为非0,CPU的总线模式要进行改变,默认情况下FCLK = HCLK,CPU工作在fast bus mode快速总线模式下,HDIV设置为非0后, FCLK与HCLK不再相等,要将CPU改为asynchronous bus mod异步总线模式,可以通过下面的嵌入汇编代码实现:

    __asm__(
        "mrc    p15, 0, r1, c1, c0, 0
    "        /* 读出控制寄存器 */ 
        "orr    r1, r1, #0xc0000000
    "          /* 设置为“asynchronous bus mode” */
        "mcr    p15, 0, r1, c1, c0, 0
    "        /* 写入控制寄存器 */
        );
  • 相关阅读:
    POJ 3672 水题......
    POJ 3279 枚举?
    STL
    241. Different Ways to Add Parentheses
    282. Expression Add Operators
    169. Majority Element
    Weekly Contest 121
    927. Three Equal Parts
    910. Smallest Range II
    921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3560494.html
Copyright © 2020-2023  润新知