MSP430F5xx / F6xx系列 DCO频率范围选择方法

wuchangjian2021-10-29 12:59:36编程学习

1. 数控振荡器(DCO)

DCO是一个集成的数字控制振荡器。DCO频率可以通过软件使用UCSCTL1.DCORSEL、UCSCTL0.DCO和UCSCTL0.MOD位进行调整。DCO频率可由FLL选择性地稳定到FLLREFCLK/n的多个倍频。FLL可以接受由UCSCTL3.SELREF位选择的不同参考时钟源。参考时钟源包括XT1CLK、REFOCLK或XT2CLK(如果可用)。n的值由UCSCTL3.FLLREFDIV位(n=1、2、4、8、12或16)定义。默认值为n=1。在某些情况下,可能不需要或不希望FLL操作;在这些情况下,不需要FLLREFCLK。这可以通过设置UCSCTL3.SELREF={7}来实现。

*******************************************************************

注:仅适用于MSP430F543x和MSP430F541x非A版本

通过设置UCSCTL3.SELREF={7} 将XT2CLK用作FLL参考时钟源

*******************************************************************

UCSCTL2.FLLD位将FLL预分频器值D配置为1、2、4、8、16或32。默认情况下,D=2,MCLK和SMCLK来自DCOCLKDIV,提供时钟频率DCOCLK/2。

倍频器(N+1)和分频器值D定义了DCOCLK和DCOCLKDIV频率。倍频器(N+1)可使用UCSCTL2.FLLN位设置,其中N>0。可以使用的最小乘数(N+1)是2。如果无意中写入FLLN=0h,逻辑将导致FLLN=1h。因此,设置FLLN=0h也相当于设置FLLN=1h,并将产生乘2。所有其他FLLN设置的行为如下所述;例如,FLLN=2h导致乘3,或FLLN=3h导致乘4。

2.DCO频率区间选择

MSP430F6736A, MSP430F6735A, MSP430F6734A, MSP430F6733A

MSP430F6731A, MSP430F6730A, MSP430F6726A, MSP430F6725A

MSP430F6724A, MSP430F6723A, MSP430F6721A, MSP430F6720A 这些芯片为例

 当选择适当的DCO频率范围(UCSCTL1.DCORSEL)时,目标DCO频率fDCO应设置为在fDCO(n,0)、MAX≤fDCO≤fDCO(n,31)、MIN范围内,其中:

fDCO(n,0),MAX代表:DCORSEL=n、DCO=0指定的最大频率,

fDCO(n,31)、MIN代表:DCORSEL=n、DCO=31指定的最小频率

这样可以确保目标DCO频率位于选定的范围内。还应注意,如果所选范围的实际fDCO频率导致FLL或应用程序选择节拍0或31,则DCO故障标志置位,报告所选范围处于其最小或最大节拍设置。

 例如:需要fDCO的输出频率位16MHz,那么DCORSEL=5

fDCO(5,0), max = 6MHz  <  fDCO(16MHz)  <  fDCO(5,31), min = 23.7MHz

 3.调整DCO频率

默认情况下,FLL处于启用状态。可通过设置SCG0或SCG1来禁用FLL。当FLL被禁用时,DCO将继续在UCSCTL0和UCSCTL1中定义的当前设置下运行。如果需要,可以手动调整DCO频率。否则,DCO频率由FLL来稳定

在PUC之后,UCSCTL1.DCORSEL={2}和UCSCTL0.DCO={0}。MCLK和SMCLK来源于DCOCLKDIV。由于CPU执行代码的时钟是MCLK,来自快速启动DCO的,因此在不到5us的时间内从PUC开始执行代码。

DCOCLK的频率由以下设置:

  • 3个UCSCTL1.DCORSEL位为DCO选择八个标称频率范围中的一个。这些范围是在设备特定数据表中定义的。
  • 5个UCSCTL0.DCO位将UCSCTL1.DCORSEL位选择的DCO范围分成32个频率步进,间隔约为8%。
  • 5个UCSCTL0.MOD位在由UCSCTL0.DCO位选择的频率和由{DCO+1}设置的下一个更高频率之间切换。当DCO={31}时,MOD位无效,因为DCO已经处于所选UCSCTL1.DCORSEL范围的最高设置。

4.频率锁定环(FLL)

FLL连续向上或向下计数频率积分器。驱动DCO的频率积分器的输出可以在UCSCTL0(MOD和DCO)、UCSCTL1中读取。计数用频率fFLLREFCLK/n(n=1、2、4、8、12或16)调整+1,或用频率fDCOCLK/[D×(N+1)]调整-1。

*******************************************************************

注:读取UCSCTL0.MOD和UCSCTL0.DCO

积分器由DCOCLK更新,DCOCLK可能和MCLK工作频率不同。用户可能无法立即读取先前写入的值,因为尚未对积分器进行更新。这很正常。在下一次DCOCLK更新积分器时,可以读取正确的值。

另外,由于MCLK可以异步于积分器更新,在这种情况下,可能导致读取的值损坏。在这种情况下,应采用多数表决法。

*******************************************************************

5个积分器位(UCSCTL0位12至8)设置DCO频率节拍。DCO实现了32个节拍,每个节拍比前一个提高了大约8%。调制器混合两个相邻的DCO频率以产生分数节拍。

对于给定的DCO偏差范围设置,必须给DCO留出一定的时间,以使其稳定运行在适当的节拍上。节拍之间需要(n×32)个fFLLREFCLK周期,最坏情况下需要(n×32×32)个fFLLREFCLK周期才能使得DCO稳定。值n由UCSCTL3.FLLREFDIV位(n=1、2、4、8、12或16)定义。

返回列表

上一篇:csdn编辑

下一篇:哈夫曼树详解

相关文章

连接(join)group by、order by、where的执行顺序

一、group by group by主要用于分组,达到对数据的分类更加...

Java 线程并发 常用辅助类 (二) Cyclicbarrier

定义介绍:允许一组线程全部等待彼此达到共同屏障点的同步辅助。循环阻塞在涉及...

15个问题自查你真的了解java编译优化吗?

摘要:为什么C++的编译速度会比java慢很多...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。