__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_5; // Select DCO range 16MHz operation
UCSCTL2 = FLLD_1 + 249; // Set DCO Multiplier for 8MHz
// (N + 1) * FLLRef = Fdco // (249 + 1) * 32768 = 8MHz // Set FLL Div = fDCOCLK/2
__bic_SR_register(SCG0); // Enable the FLL control loop
请问一下这里的UCSCTL1 = DCORSEL_5; 怎么得到DCO最大为16MHz,求解。谢谢!
ZhaoF:
这两张图基本就可以给出你答案了。
(1)看第一张图。
DCORSEL位于UCSCTL1,共3位,将DCO分为8个频率段。
DCOx位于UCSCTL0共5位,将DCORSEL选择的频率段分为32个频率阶,每阶比前一阶高出约8%,DCOX和MODX系统可以自动调整,通常配置为0。
设置频率范围的时候,假设你的倍频为F,那么必须有f(DCORSEL,0)<F<f(DCORSEL,31)
(2)看第二张图,给出了最明确的范围。共有3大排线,从下往上,间隔分别为0.1、1、10,由此可以看出,DCORSEL=5时,中间频率大概为16MHZ。
还可以看出,6时中心约为24,4时约为8,3时为4,2时为2,1时为1