zoukankan      html  css  js  c++  java
  • 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
    "        /* 写入控制寄存器 */
        );
  • 相关阅读:
    三种方式重启NGINX 简单
    转MongoDB、HandlerSocket和MySQL性能测试及其结果分析 简单
    php ini_set post_max_size,upload_max_filesize 简单
    grep 命令 简单
    ANSI,GBK,UTF8,UTF16LE,UTF16BE 简单
    提升工作效率软件 简单
    会议记录 简单
    第一章 :zabbix监控
    第七章 :分布式监控与SNMP监控
    linux系统安装SNMP(可用)
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3560494.html
Copyright © 2011-2022 走看看