💡
时钟分类:
  • 内核时钟(SYSCLKOUT)
  • 外设时钟
    • 低速时钟(LSPCLK)
    • 高速时钟(HSPCLK)

⭐内核时钟


1️⃣原理框图

notion image

2️⃣寄存器

  • PLLSTS
    • MCLKSTS(缺失时钟状态,0正常,1缺失)
    • MCLKOFF(缺失时钟检查关闭,1关闭)
    • PLLLOCKS(当PLLLOCKS=1,才可以改变DIVSEL)
    • PLLOFF(PLLOFF位置1可将PLL模块关闭)
    • DIVSEL(分频系数,0,1四分频;2,二分频;3,一分频)
  • PLLCR
    • DIV(乘法器系数,4bit,0-10)

3️⃣频率计算

notion image

4️⃣PLL工作模式

关闭
将PLLCR寄存器设为0x0000,PLLOFF位置1
旁路
上电复位或 复位后,PLL进入该模式但PLL 模块却未关闭。
使能
向PLLCR寄存器中写入非零的数可使能PLL 模块
详细描述
notion image

5️⃣PLL配置流程

notion image

6️⃣范例程序

初始PLL代码
void InitPll(Uint16 val, Uint16 divsel) { // Make sure the PLL is not running in limp mode if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0) { // Missing external clock has been detected // Replace this line with a call to an appropriate // SystemShutdown(); function. asm(" ESTOP0"); } // DIVSEL MUST be 0 before PLLCR can be changed from // 0x0000. It is set to 0 by an external reset XRSn // This puts us in 1/4 if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0) { EALLOW; SysCtrlRegs.PLLSTS.bit.DIVSEL = 0; EDIS; } // Change the PLLCR if (SysCtrlRegs.PLLCR.bit. != val) { EALLOW; // Before setting PLLCR turn off missing clock detect logic SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1; SysCtrlRegs.PLLCR.bit.DIV = val; EDIS; // Optional: Wait for PLL to lock. // During this time the CPU will switch to OSCCLK/2 until // the PLL is stable. Once the PLL is stable the CPU will // switch to the new PLL value. // // This time-to-lock is monitored by a PLL lock counter. // // Code is not required to sit and wait for the PLL to lock. // However, if the code does anything that is timing critical, // and requires the correct clock be locked, then it is best to // wait until this switching has completed. // Wait for the PLL lock bit to be set. // The watchdog should be disabled before this loop, or fed within // the loop via ServiceDog(). // Uncomment to disable the watchdog DisableDog(); while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1) { // Uncomment to service the watchdog // ServiceDog(); } EALLOW; SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0; EDIS; } // If switching to 1/2 if((divsel == 1)||(divsel == 2)) { EALLOW; SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel; EDIS; } // If switching to 1/1 // * First go to 1/2 and let the power settle // The time required will depend on the system, this is only an example // * Then switch to 1/1 if(divsel == 3) { EALLOW; SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; DELAY_US(50L); SysCtrlRegs.PLLSTS.bit.DIVSEL = 3; EDIS; } }
 

⭐外设时钟


notion image
 

taohu
taohu
一个普通的干饭人🍚
公告
type
Notice
status
Published
date
Jul 2, 2021
tags
slug
#
summary
类型为Notice的文章将被显示为公告,仅 hexo和next支持;仅限一个公告
category
password
icon
🎉这是Taohu的第一个网站🎉
-- 这个网站是干什么的? ---
分享学习笔记,还有一些知识碎片
您可以通过邮箱联系我哦!
我的邮箱:henryxu26@qq.com
-- 感谢您的访问 ---