第010课 掌握Jz2440_ARM芯片时钟体系

2020-03-23来源: eefocus关键字:Jz2440  ARM芯片  时钟体系

第001节_S3C2440时钟体系结构

S3C2440是System On Chip(SOC),在芯片上不仅仅有CPU还有一堆外设。


至于有哪些外设,可以查看参考手册。在S3C2440参考手册的第一章PRODUCT OVERVIEW里面有个BLOCK DIAGRAM图:

这里写图片描述

可以把该图分为上中下三块,上面的是与CPU密切相关的,工作于FCLK;中间的一些对性能要求较高的设备,像LCD显示、相机等,在AHB BUS,H即为High,高速之意,工作于HCLK;下面的是一些对性能要求不那么高的低速设备,在APB BUS,P即为Peripheral之意,工作在PCLK。


在参考手册的特性里介绍了S3C2440的工作频率,Fclk最高400MHz,Hclk最高136MHz,Pclk最高68MHz。


如何得到以上的三种时钟?


硬件电路上有个12M的晶振,作为时钟源产生12MHz的频率,经过SOC的PLL(锁相环)倍频产生Fclk、Hclk、Pclk。


再具体看看第7章的时钟,在Clock Generator Block Diagram展示了时钟的产生。

这里写图片描述

在该图的左上角,晶振和一个外部时钟接在一个选择器上,这个选择器通过OM[3:2]的值来决定选择哪个时钟源。然后生成的MPLL(Main PLL)和UPLL(USB PLL),MPLL直接提供给FCLK,通过HDIVN分频给HCLK,通过PDIVN分频给PCLK,再传给下面的各个设备。

这里写图片描述

第002节_编程提高运行时钟

怎么编程控制MPLL、HDIV、PDIV,使FCLK=400MHz,HCLK=100MHz,PLCK=50MHz?


需要设置MPLLCON的FCLK=400MHz,设置CLKDIVN的HCLK=FCLK/4,PCLK=FCLK/8。


首先看CLKDIVN寄存器:

这里写图片描述

想设置HCLK=FCLK/4需要将HDIVN[2:1]设置为10,同时将CAMDIVN[9]设置为0。 

查看CAMDIVN[9]的初始值默认就是0,因此只需要设置HDIVN[2:1]为10。

这里写图片描述

想设置PCLK=FCLK/8需要将PDIVN[0]设置为1,因此整个CLKDIVN寄存器设置如下:


/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */

    ldr r0, =0x4C000014

    ldr r1, =0x5

    str r1, [r0]


现在看如何使FCLK=400MHz.

在手册的PLL VALUE SELECTION TABLE里列出了常见情况PLL的设置,我们输入的是晶振的12MHz,输出需要400MHz,因此根据表格需要设置 MDIV=92(0x5C),PDIV=1,SDIV=1;



在手册介绍了MPLL的m、p、s与MDIV、PDIV、SDIV之间的关系:


Mpll = (2 * m * Fin) / (p * 2^S)

m = (MDIV + 8), p = (PDIV + 2), s = SDIV


m=MDIV+8=92+8=100

p=PDIV+2=3

s=SDIV=1

MPLL=2x100x12/(3x2^1)=400MHz


PLL控制寄存器如下:

这里写图片描述

因此需要配置(92<<12)|(1<<4)|(1<<0),



/* 设置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0) 

     *  m = MDIV+8 = 92+8=100

     *  p = PDIV+2 = 1+2 = 3

     *  s = SDIV = 1

     *  FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M

     */

    ldr r0, =0x4C000004

    ldr r1, =(92<<12)|(1<<4)|(1<<0)

    str r1, [r0]


3.此外,手册还提到,需要SetAsyncBusMode。


MMU_SetAsyncBusMode 

mrc p15,0,r0,c1,c0,0 

orr r0,r0,#R1_nF:OR:R1_iA 

mcr p15,0,r0,c1,c0,0


完整的start.S:


.text

.global _start


_start:


    /* 关闭看门狗 */

    ldr r0, =0x53000000

    ldr r1, =0

    str r1, [r0]


    /* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */

    /* LOCKTIME(0x4C000000) = 0xFFFFFFFF */

    ldr r0, =0x4C000000

    ldr r1, =0xFFFFFFFF

    str r1, [r0]


    /* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */

    ldr r0, =0x4C000014

    ldr r1, =0x5

    str r1, [r0]


    /* 设置CPU工作于异步模式 */

    mrc p15,0,r0,c1,c0,0

    orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iA

    mcr p15,0,r0,c1,c0,0


    /* 设置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0) 

     *  m = MDIV+8 = 92+8=100

     *  p = PDIV+2 = 1+2 = 3

     *  s = SDIV = 1

     *  FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M

     */

    ldr r0, =0x4C000004

    ldr r1, =(92<<12)|(1<<4)|(1<<0)

    str r1, [r0]


    /* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定

     * 然后CPU工作于新的频率FCLK

     */


    /* 设置内存: sp 栈 */

    /* 分辨是nor/nand启动

     * 写0到0地址, 再读出来

     * 如果得到0, 表示0地址上的内容被修改了, 它对应ram, 这就是nand启动

     * 否则就是nor启动

     */

    mov r1, #0

    ldr r0, [r1] /* 读出原来的值备份 */

    str r1, [r1] /* 0->[0] */ 

    ldr r2, [r1] /* r2=[0] */

    cmp r1, r2   /* r1==r2? 如果相等表示是NAND启动 */

    ldr sp, =0x40000000+4096 /* 先假设是nor启动 */

    moveq sp, #4096  /* nand启动 */

    streq r0, [r1]   /* 恢复原来的值 */


    bl main


halt:

    b halt

关键字:Jz2440  ARM芯片  时钟体系 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492325.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:第009课 gcc和arm-linux-gcc和Makefile
下一篇:第011课 Jz2400串口(UART)的使用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

交叉编译工具的使用说明
写在前面的话,由于已经学习了JZ2440V3开发板的裸机程序。想检验下学习成果,所以从今天开始把以前学的知识点在tiny4412开发板上面做个检验。裸机部分学习到把uboot移植完成就结束;然后,学习内核的驱动和其他子系统框架。言归正传,现在开始学习交叉编译工具链的使用。源文件需要经过编译才能生成可执行文件。在Windows下进行开发时,只需要点几个按钮即可编译,集成开发环境(比如 Visual studio)已经将各种编译工具的使用封装好了。Linux下也有很优秀的集成开发工具,但是更多的时候是直接以命令方式运行编译工具;即使使用集成开发工具,也需要掌握一些编译选项。PC机上的编译工具链为gcc、 ld、 objcopy
发表于 2020-03-26
交叉编译工具的使用说明
第014课 Jz2400_ARM异常与中断体系详解
CPU有7种模式:1 usr :类比 正常模式2 sys :类比的话兴奋模式3 5种异常模式:(2440用户手册72页) :: 3.1 und :未定义模式 :: 3.2 svc :管理模式 :: 3.3 abt :终止模式 :::: a 指令预取终止(读写某条错误的指令导致终止运行) :::: b 数据访问终止 (读写某个地址,这个过程出错) :::: 都会进入终止模式 :: 3.4 IRQ: 中断模式 :: 3.5 FIQ: 快中断模式我们可以称以下6种为特权模式 und :未定义模式 svc :管理模式 abt :终止
发表于 2020-03-23
第014课 Jz2400_ARM异常与中断体系详解
第011课 Jz2400串口(UART)的使用
的RS232串口上,实现两者的数据传输。现在的电脑越来越少有RS232串口的接口,当然USB是几乎都有的。因此使用USB串口芯片将ARM芯片上的TTL电平转换成USB串口协议,即可通过USB与电脑数据传输。上面的两种方式,对ARM芯片的编程操作都是一样的。ARM芯片是如何发送/接收数据?如图所示串口结构图:要发送数据时,CPU控制内存要发送的数据通过FIFO传给UART单位,UART里面的移位器,依次将数据发送出去,在发送完成后产生中断提醒CPU传输完成。接收数据时,获取接收引脚的电平,逐位放进接收移位器,再放入FIFO,写入内存。在接收完成后产生中断提醒CPU传输完成。第002节_S3C2440_UART编程在uart.c这个文件里需要编写
发表于 2020-03-23
第011课 Jz2400串口(UART)的使用
JZ2440开发板介绍(S3C2440)
1、开发板实物图2、开发板上硬件3、在开发板使用时一般会用到JTAG接口、USB和USB-COM1接口、NAND和NOR模式选择开关、power电源开关。JTAG接口:用于J-LINK的连接。ETH:以太网网口;
发表于 2020-03-11
JZ2440开发板介绍(S3C2440)
JZ2440开发笔记(1)——arm-linux-gcc环境搭建
1、下载arm-linux-gcc-4.4.3安装包,http://arm9.net/download.asp2、解压arm-linux-gcc-4.4.3-20100728.tar.gz,使用命令tar -zxvf arm-linux-gcc-4.4.3-20100728.tar.gz3、将解压出来的文件夹重命名为arm,然后将arm文件夹拷贝到/usr/local下,#cp -rv arm  /usr/local/4、修改环境变量,把交叉编译器的路径加入到PATH。(推荐使用方法一)   方法一:修改/etc/bash.bashrc文件   #vim /etc/bash.bashrc  在最后加上:   export
发表于 2020-02-21
32位RISC-CPU-ARM芯片的应用和选型
摘要:ARM公司以及ARM芯片的现状和发展,从应用的角度介绍了ARM芯片的选择方法,并介绍了具有多芯核结构的ARM芯片。列举了目前的主要ARM芯片供应商,其产品以及应用领域。举例说明了几种嵌入式产品最佳ARM芯片选择方案。ARM公司自1990年正式成立以来,在32位RISC(Reduced Instruction Set Computer)CPU开发领域不断取得突破,其结构已经从V3发展到V6。由于ARM公司自成立以来,直以IP(Intelligence Property)提供者的身份向各大半导体制造商出售知识产权,而自己从不介入芯片的生产销售,加上其设计的芯核具有功耗低、成本低等显著优点,因此获得众多的半导体厂家和整机厂商
发表于 2019-10-18
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved