MSP430F5xx / F6xx系列 DCO频率范围选择方法
作者:互联网
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)定义。
标签:F6xx,DCO,fDCO,DCORSEL,FLL,频率,MSP430F5xx,UCSCTL0 来源: https://blog.csdn.net/btzhy/article/details/121032304