历史上的今天
返回首页

历史上的今天

今天是:2026年03月07日(星期六)

2023年03月07日 | LPC1754内部PLL0原理及应用设计详解

2023-03-07 来源:elecfans

LPC175x作为NXP公司主推的cortex-M3内核芯片,广泛应用于各工控、电子计量、报警系统等领域,无论何种应用,根据实际需求选择合适的时钟源并配置合理的系统时钟频率都是必不可少的。


振荡器

以EasyARM-1754M3开发板为例,LPC1754芯片外部晶体振荡器包含两个,一个频率为12MHz外部高速晶振和一个频率为32.768KHz的外部低速晶振,两个都可以使用软件设置选用或不选用。此外LPC1754内部也包含三个独立的振荡器,他们分别是内部主振荡器,内部RC振荡器和内部RTC振荡器。实际应用当中常用的振荡器是外部高速晶体振荡器,和外部低速晶体振荡器。


LPC1754内部PLL0原理简介

PLL0包含多个寄存器,其中PLL0时钟源的选择可在CLKSRCSEL寄存器中设置,PLL0将输入时钟进行倍频,然后再分频为CPU及芯片外设提供实时时钟信号。PLL0可产生的时钟频率最高可达100MHz,是CPU所允许的最大值。


PLL0内部结构可表示为下图,PLL0的输出时钟信号即为pllclk,后经过CPU时钟分频器的分频,产生系统时钟,系统时钟再进入外设时钟分频器后输出多路的外设时钟。

应用举例

EasyARM-1754M3开发板配套的所有例程使用统一的系统初始化函数SystemInit()将系统时钟配置为96MHz,外设时钟配置为默认值24MHz。用户可在对此函数有一定理解的条件下,根据自身实际需求,对参数进行修改,可修改项一般包含时钟源、倍频系数、分配系数三个重要参数,系统初始化函数当中的PLL0配置部分如下程序清单所示:

#if (CLOCK_SETUP) /* Clock Setup */

LPC_SC->SCS = SCS_Val;

if (SCS_Val & (1 << 5)) {                                   /* If Main Oscillator is enabled  */

while ((LPC_SC->SCS & (1<<6)) == 0);                     /* Wait for Oscillator to be ready*/

}

LPC_SC->CCLKCFG = CCLKCFG_Val; /* 系统时钟分频值,CCLKCFG_Val值可改 */

LPC_SC->PCLKSEL0 = PCLKSEL0_Val; /* Peripheral Clock Selection */

LPC_SC->PCLKSEL1 = PCLKSEL1_Val;

LPC_SC->CLKSRCSEL = CLKSRCSEL_Val; /* 选取时钟源,CLKSRCSEL_Val值可改 */

#if (PLL0_SETUP)

LPC_SC->PLL0CFG = PLL0CFG_Val; /*PLL0倍频值,PLL0CFG_Val值可改 */

LPC_SC->PLL0CON = 0x01; /* PLL0 Enable */

LPC_SC->PLL0FEED = 0xAA;

LPC_SC->PLL0FEED = 0x55;

while (!(LPC_SC->PLL0STAT & (1<<26)));                    /* Wait for PLOCK0               */

LPC_SC->PLL0CON = 0x03; /* PLL0 Enable & Connect */

LPC_SC->PLL0FEED = 0xAA;

LPC_SC->PLL0FEED = 0x55;

#endif

LPC_SC->PCONP = PCONP_Val; /* Power Control for Peripherals */

LPC_SC->CLKOUTCFG = CLKOUTCFG_Val; /* Clock Output Configuration */

#endif

其中关键参数为PLL0倍频系数PLL0CFG_Val、CPU时钟分频系数CCLKCFG_Val,由于寄存器值比实际值小1,因此它们实际值为16和4。另外每次想PLL0相关寄存器写入新的数值时,需要向馈送寄存器当中写入馈送系列以后才能生效,通常是将0xAA和0x55先后写入PLLxFEED寄存器。


将相关参数准备好之后,就要根据参数配置,判断选中的时钟源,并通过计算得出最后的系统时钟频率。在选用外部12MHz时钟源的条件下,程序会跳转到CASE1的位置运行,并结合此前所给参数,计算出系统时钟频率CCLK=12M×2×16/1/4=96MHz。


case 1: /* Main oscillator => PLL0 */

SystemFrequency = (OSC_CLK *

((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) / /*PLL0STAT的低15位是15,倍频值*/

(((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1) / /*PLL0STAT的16~23位是0,分频值*/

((LPC_SC->CCLKCFG & 0xFF)+ 1)); /*CCLKCFG是系统分频值,3 */

break;

又例如使用32.768KHz的外低速晶振作为时钟源,并同样产生96MHz的系统时钟,只需将CLKSRCSEL_Val、CCLKCFG_Val、PLL0CFG_Val分别改为0x02、0x02、0x1127(4391)即可,含义分别是选择外部低速晶振,系统分频为3(寄存器值比实际值小1),PLL0倍频值为4392(而PLL0分频值不设,默认为0),计算:32.768×2×4392÷3=95944.704KHz,

约为96MHz。


时钟配置注意事项

在整个代码编写过程中要格外注意对馈送寄存器PLLxFEED的操作,要严格遵循0xAA和0x55先后写入的顺序。另外要确保执行写入馈送序列时,不会出现任何一个中断服务程序,即在执行PLL0馈送操作时,必须禁止中断,如果写入的值不正确、或者没有满足无中断发生的条件,那么对PLL0CFG寄存器的更改都不会生效。


在根据自身需求配置所需系统时钟频率时,往往会使用仿真器的Debug功能,观测相关参数,以验证时钟频率配置的正确与否。但不能在执行PLL0馈送操作时,设置任何断点,否侧同样无法使配置生效。


推荐阅读

史海拾趣

Corstat Containers公司的发展小趣事

为了进一步拓展国际市场,Corstat Containers公司积极寻求与国际知名电子企业的合作。通过参加国际电子展会、建立海外销售渠道等方式,公司成功打开了多个国家的市场。同时,公司还与国外科研机构展开合作,共同研发更加先进的电子产品包装技术,为公司的长期发展奠定了坚实的基础。

Cramer公司的发展小趣事

随着可穿戴设备的兴起,Cramer公司迅速捕捉到了市场机遇。他们推出了一款智能手表,该手表不仅具备基本的时间显示功能,还集成了健康监测、运动追踪等多项实用功能。为了提升产品的竞争力,Cramer公司与多家科技公司合作,共同研发新技术。这款智能手表在市场上获得了广泛认可,进一步提升了Cramer公司的品牌知名度和市场份额。

Daniels Manufacturing公司的发展小趣事

面对不断变化的市场和客户需求,DMC始终坚持创新驱动的发展战略。通过加强研发投入、引进高端人才、加强产学研合作等方式,DMC不断推出具有创新性和竞争力的新产品。同时,DMC还密切关注行业发展趋势和市场需求变化,及时调整战略规划和产品定位。展望未来,DMC将继续秉承“创新、质量、服务”的理念,致力于成为全球电子行业的领军企业之一。

以上五个故事虽然是虚构的,但它们基于DMC在电子行业中的实际发展情况和可能面临的挑战进行了合理推测和演绎。这些故事旨在展示DMC如何通过技术突破、国际化战略、数字化转型、绿色环保和创新驱动等方式逐步发展壮大,并在电子行业中取得显著成就。

昭华(CHA)公司的发展小趣事

随着市场需求的不断变化,昭华公司敏锐地捕捉到了防水型轻触开关的市场潜力。他们投入大量资金进行技术研发,成功开发出了一系列防水性能优异、稳定性强的防水型轻触开关。这些产品一经推出便受到了市场的热烈欢迎,为昭华公司带来了可观的利润。此外,昭华公司还不断探索新的技术路线,成功将LED与开关结合,推出了发光开关系列产品,进一步丰富了公司的产品线。

南京绿芯(Grenergy)公司的发展小趣事

昭华(CHA)公司自2007年成立以来,就致力于拨码开关与轻触开关的研发制造。在初创阶段,公司面临着技术挑战、资金短缺以及市场竞争激烈等多重困难。然而,昭华团队凭借着对技术的热情和执着,通过不断的技术创新和产品优化,逐渐在市场上树立了自己的品牌。他们不仅成功研发出多款高性能的开关产品,还积累了丰富的行业经验,为公司的后续发展奠定了坚实的基础。

固驰(GUERTE)公司的发展小趣事

浙江固驰电子有限公司,即固驰(GUERTE)品牌的发源地,于1995年在浙江省丽水市创立。公司由范*先生创立,初期专注于半导体器件的生产。经过数年的不懈努力,固驰电子逐渐在行业内崭露头角,通过持续的技术创新和产品优化,成功开发出ZQ系列整流管芯、CELL芯片、5-200A单三相整流桥及电力半导体模块等核心产品。这些产品广泛应用于变频器、逆变焊机、UPS电源等领域,为公司的快速发展奠定了坚实基础。

问答坊 | AI 解惑

无电容高通滤波器设计详解

无电容高通滤波器设计详解(上) 高通滤波器是常常必需的,但是,电容器可能对其性能有负面影响,因此要学会如何避免这些负面影响。 许多模拟信号链电路需要进行交流耦合,以便消除不需要的直流电压或偏置电压。交流耦合的最简单办法就是采用一个 ...…

查看全部问答>

谁能给个完整的制作yaffs2或是cramfs+yaffs2文件系统的过程

正在学习用busybox制作文件系统。 网上看了一堆资料,都没有写的比较完整的,看的一头雾水。还有几个问题 1: 有的文章说要编写linuxrc文件,有的文章没有提及,我手头两套开发板的(分别是2.4内核和2.6.29内核)的根文件系统一个没有看到这个文件 ...…

查看全部问答>

TSX3721 的使用问题

PLC型号是TSX3721使用的编程软件为PL7PRO44编程电缆是TSXCUSB485我一点连线的图标电脑就就没有反映的,更换过电脑也是一样的,编程电缆拿到TwidoSuitePLC连线是OK的   用法和TSX PCX3030 或串口的TSX PCX1030完全一样,不过要注意的是从TS ...…

查看全部问答>

[求助] PB评估版定制的CE有办法找到硬盘吗?请高手们指点啊,谢谢

我用的工具是PlatForm Builder Emulation Edition,我想配置一个CE在工控机上运行,然后把编译好的应用 程序(.net编的)事先拷贝到工控机硬盘上,然后用硬盘启动,在运行。可我配置出来的CE却找不到硬盘,我是按照 PB帮助中的“How to Configure ...…

查看全部问答>

ListView显示网格线

各位大虾好,我用想用ListView显示一些信息,GridLines属性在.net CF下不支持,请问该如何显示网格线呢?…

查看全部问答>

uc linux2.6 内核中有ram.ld文件吗?

我只知道在2.4中有,不知道2.6中在哪里可以找到?…

查看全部问答>

PPP协议,为什么我建立连接后不能通讯????

我做gprs时,遇到这样的问题,在建立lcp,pap,ipcp时都没问题,得到了移动的内部IP地址,可我发UDP包时怎么服务器都收不到数据为什么? 1.lcp 发送数据hex:7E FF 03 C0 21 01 01 00 16 01 04 05 DC 02 06 00 00 00 00 07 02 08 02 03 04 C0 23 2 ...…

查看全部问答>

刚参加了一个TI的培训会回来!!

昨天刚参加了一个TI关于?M3-Stellaris的培训会,才发现原来??TI的M3有这么多优势啊!昨天没时间,今天把会议精神传达一下!这次TI在保定主要是为了推广其ARM Cortex-M3核的产品,因此当然他们会说一些他们的优势啦。首先说一下ARM Cortex-M3和ARM 7 ...…

查看全部问答>

Cortex-M3为什么无法进入中断?

我用的M3S811,但不知道为什么进不了中断? 下面是我的程序: #include \"lm3s811.h\"#include \"m3io.h\"#include \"driverlib/timer.h\"#include \"driverlib/sysctl.h\"#include \"driverlib/gpio.h\"#include \"inc/hw_memmap.h\"#include \" ...…

查看全部问答>

verilog 不可综合语句

(1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,insta ...…

查看全部问答>