- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
寄存器描述 馈送寄存器 PLLFEED PLLFEED[7 : 0] 7 : 0 PLL馈送寄存器(PLLFEED): PLLFEED[7:0]:PLL馈送序列必须写入该寄存器才能使PLL配置和控制寄存器的更改生效。 馈送序列分两步进行,如下所示: step1. 将值0xAA写入PLLFEED step2. 将值0x55写入PLLFEED 操作示例 DISABLE_IRQ(); //关闭中断,防止馈送序列操作被打断 PLLFEED=0xAA; //馈送序列第一步 PLLFEED=0x55; //馈送序列第二步 ENABLE_IRQ(); //馈送序列操作结束,打开中断 注:这两个写操作的顺序必须正确,且必须是连续的VPB总线周期。 4.4.6 时钟部件-PLL(锁相环) PLL和掉电模式 掉电模式会自动关闭并断开PLL。从掉电模式唤醒不会自动恢复PLL的设定,PLL的恢复必须由软件来完成。通常,首先将PLL激活并等待锁定,然后再将PLL连接。 注:不要试图在掉电唤醒之后简单地执行馈送序列来重新启动PLL,因为这会在PLL锁定建立之前同时使能并连接PLL。 4.4.6 时钟部件-PLL(锁相环) PLL频率计算 Fosc为晶体振荡器的输出频率,即PLL的输入频率 相位频率 检测 流控 振荡器 CCO 2P 分频 M分频 PLL FOSC FCCO FCCO/(2×p) FCCO/(2×p×M) 1 2 3 锁定之后这两个频率相等 FOSC= FCCO/(2×p×M) 连接PLL之后 FCCLK= FCCO/(2×p) Fcco为PLL电流控制振荡器的输出频率 Fcclk为PLL最终的输出频率(也是处理器的时钟频率) Fcco经过“2P分频”部件后得到Fcco/(2×p)的频率 Fcco/(2×p)信号经过“M分频”部件,得到Fcco/ (2×p×M)的频率 PLL锁定后相位频率检测的两输入端信号的频率相等 4.4.6 时钟部件-PLL(锁相环) PLL频率计算 可以得出以下几个等式: Fosc = Fcco/(2×p×M) ? Fcco = Fosc×(2×p×M) Fcclk = Fcco/(2×p) ? Fcco = Fcclk×(2×p) 最后得出PLL的输出频率(当PLL激活并连接时)为: Fcclk = M×Fosc 或 Fcclk = Fcco / (2×P) CCO输出频率为: Fcco = Fcclk×2×P 或 Fcco = Fosc×M×2×P 相位频率 检测 流控 振荡器 CCO 2P 分频 M分频 FCCLK PLL FOSC 4.4.6 时钟部件-PLL(锁相环) 确定PLL设定的过程 2.选择合适的晶振频率 3.计算M值 4.计算P值 1.确定处理器时钟频率 选择处理器的操作频率(Fcclk)。这可以根据处理器的整体要求、UART波特率的支持等因素来决定。 1 选择振荡器频率(Fosc)。Fcclk一定要是Fosc的整数倍。 2 计算M值以配置MSEL位。M = Fcclk/Fosc,M的取值范围为1~32。实际写入MSEL位的值为M-1的整数倍。 3 选择P值以配置PSEL位。通过设置P值,使Fcco在定义的频率限制范围内。P必须是1, 2, 4或8其中的一个。 4 PLL设置举例 系统要求Fosc=10MHz,Fcclk=60MHz。 根据这些要求: 确定Fcclk=60MHz; 选择Fosc=10MHz; 计算M= Fcclk/Fosc=60MHz/10MHz=6。M-1=5,所以写入PLLCFG[4:0]=00101; 计算P=Fcco/( Fcclk*2),其中Fcco为156~320 MHz。当Fcco=156MHz时,P=156MHz/(2*60MHz)=1.3当Fcco=320MHz时, P=2.67 P取整数2,所以写入PLLCFG[6:5]=01。 PLL设置举例 PLL配置过程: uint8 PLLSet(uint32 Fcclk, uint32 Fosc, uint32 Fcco) { uint8 i; uint32 plldat; i = (Fcco / Fcclk); switch(i) { case 2: plldat = ((Fcclk / Fosc) -
原创力文档


文档评论(0)