历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2020年04月15日 | 2.3【裸机部分】掌握ARM芯片时钟体系

2020-04-15 来源:eefocus

一、时钟体系结构

CPU-FCLK:400MHZ


AHB总线-HCLK:136MHZ

APB总线-PCLK:68MHZ


文档解释:

中文翻译:FCLK、HCLK和PCLK,FCLK由ARM920T使用。HCLK用于AHB总线,由ARM920T、内存控制器、中断控制器、LCD控制器、DMA和USB主机块。PCLK用于APB总线,用于WDT、IIS、I2C、PWM定时器、MMC接口等外围设备,ADC、UART、GPIO、RTC和SPI。


问题:如何得到FCLK,HCLK,PCLK和MPLL、HDIV、PDIV?

(假设我们要使用FCLK=400MHZ,HCLK=100MHZ,PCLK=50MHZ——>1:4:8)


第一步:先设置lock time

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

 

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

 

    ldr r0, =0x4C000000

 

    ldr r1, =0xFFFFFFFF

 

    str r1, [r0]

 

第二步:设置CLKDIVN

讲解:


设置CLKDIV的HDIVN[2:1]=10且CAMDIVN[9]=0(默认为0,如果没使用可以不修改):HCLK=FCLK/4


设置CLKDIV的[0]为1:PCLK=HCLK/2


所以设置完后CLKDIV=0x101


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

 

    ldr r0, =0x4C000014

 

    ldr r1, =0x5

 

    str r1, [r0]


第三步:设置MPLLCON

讲解:设置MPLLCON:FCLK=400M→MDIV=92,PDIV=1 ,SDIV=1


m=MDIV+8=92+8=100,p=PDIV+2=1+2=3,s=SDIV=1+2=3


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


/* 设置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]

 

第四步:设置CPU工作于异步模式

所以我们还需要将这段代码拷贝到我们的start.S中去,让CPU处于异步模式


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

备注:实例为上一节的led.c

推荐阅读

史海拾趣

DELTA公司的发展小趣事

随着人们生活水平的提高和环保意识的增强,Delta公司提出了“智能绿生活”战略,致力于为个人、家庭和企业带来更环保健康的生活型态。在这一战略指导下,Delta推出了一系列视讯显像系统、网络通信系统、LED照明、智能语音系统及云计算等产品。这些产品不仅具有高效、节能的特点,还为用户提供了更加便捷、智能的生活体验。

3D PLUS公司的发展小趣事

在电子行业的浪潮中,3D PLUS公司以其前瞻性的技术视角,率先投身于3D技术的研发。公司初期便聚焦于3D扫描技术的突破,成功开发出全自动彩色桌面型3D扫描仪,该设备能够在短短几分钟内实现实物向数字的转变,为行业带来了前所未有的高效与便捷。这一创新产品的推出,不仅迅速获得了市场的认可,更在行业内树立了3D PLUS的技术领先地位。

Cygnal Integrated Products Inc公司的发展小趣事

为了加快技术发展和市场拓展的步伐,Cygnal积极寻求与其他公司的战略合作。通过与半导体制造商、软件开发商等公司的合作,Cygnal获得了更多的技术支持和市场资源。这些合作不仅提升了Cygnal的技术实力和市场竞争力,还为其未来的发展奠定了坚实的基础。

EREM公司的发展小趣事

作为一家具有社会责任感的企业,EREM始终关注环境保护和可持续发展。在生产过程中,EREM严格遵守环保法规和标准,采用环保材料和工艺,减少对环境的影响。此外,EREM还积极参与公益活动和社会责任项目,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

请注意,以上故事均为虚构,旨在展示EREM公司在电子行业中的发展历程和可能面临的挑战与机遇。如需了解更多关于EREM公司的信息,请查阅相关官方资料或咨询行业专家。

DSMI Electronics SA公司的发展小趣事

面对激烈的市场竞争,DSMI Electronics SA公司始终坚持创新驱动的发展战略。公司投入大量资源进行技术研发和产品创新,不断推出具有更高性能、更低功耗、更小体积的新产品。这些创新产品不仅满足了市场的多样化需求,还引领了行业的技术发展方向。同时,DSMI还积极申请专利保护,保护自己的创新成果。

Gumstix公司的发展小趣事
检查电路中是否有异物导致短路,清理异物并修复受损部分。

问答坊 | AI 解惑

protel dxp中为什么没有intel的元件

protel dxp中为什么没有intel的元件,到那可以下载到啊,谁能告诉我一下。    另外,在99se中有元件库Intel Databooks.ddb,怎么把他导入dxp中使用。…

查看全部问答>

模拟传感器系统的抗干扰措施

一、前言      模拟传感器的应用非常广泛,不论是在工业、农业、国防建设,还是在日常生活、教育事业以及科学研究等领域,处处可见模拟传感器的身影。但在模拟传感器的设计和使用中,都有一个如何使其测量精度达到最高的问题。而众多的 ...…

查看全部问答>

Altium Designer Summer 08 集成库 pcb封装 sch封装

这是Altium Designer Summer 08 集成库 是三年用这个软件自己做的所有封装,里面基本上涵盖了所有的常用元件,单片机封装,很实用。对于单片机学习者相当的有帮助! [ 本帖最后由 water1987 于 2010-1-11 10:40 编辑 ]…

查看全部问答>

我看了ADS下的stratup.s怎么移植到KEIL下?

我看了ADS下的stratup.s怎么移植到KEIL下? 请教高手 …

查看全部问答>

DT930显示中文

有谁知道DT930程序如何显示中文,注册了自定义字体后还需什么代码吗?…

查看全部问答>

想做GPRS数据采集,发送,应该选用什么GPRS产品?

现在想做一个加油站的加油数据采集和无线传输,数据采集和数据传输功能需要哪些设备?特别是无线数据传输这块,预计采用GPRS网络进行传输,不知道完成这个传输功能应该采用什么设备? 1.是基于GPRS网卡的二次开发? 2.直接使用GPRS DTU,这个价格 ...…

查看全部问答>

关于51单片机的地址

我在课件上看到,STC89C52RC单片机的地址,只有80H-FFH这段地址能用程序来控制, 这就是在REG52.H头文件中被定义了,至于00H-7EH这段是被称为\"直接或间接寻址寄存器\", 一共分为四个区的,请问这四个区, 既然不能被程序控制,那么它是用在存放什么数据的 ...…

查看全部问答>

寻STM32FUSB接口电路

                                 坛子里哪位大仙儿用过STM32F通过USB接口连接计算机USB的成熟的电路图给俺一份借鉴下,或者万利的电路图也行,等待 ...…

查看全部问答>

android

有用Basic4android进行开发的吗?…

查看全部问答>

抄了一块超声波电子白板原理图,帮忙分析下前端运放

前段时间抄了一块超声波电子白板的原理图,现在样品也做出来了,不过对超声波信号接收总是存在波动。估计是前端接收到的超声波信号放大处理存在问题,请哪位大神帮我分析下下面超声波信号的放大处理电路。 1.MK是超声波接收头,频率40K。 2.DS1 ...…

查看全部问答>