pll :Phase Locking Loop
在我使用的MC9S12XDP512 单片机中
设置pll十分简单:
CLKSEL = 0x00; //设置当前fBUS使用外部晶振
PLLCTL = 0xe1; //设置进入pll设置模式
//pll计算:
//fPLL= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1),
// fBUS= fPLL/2
//其中fOSC就是外部晶振的频率,fBUS是最后总线的频率
SYNR = 0x01;
REFDV = 0x01;
PLLCTL = 0x60;
asm NOP;
asm NOP;
asm NOP;
while (0 == (CRGFLG & 0x08))
; //JUDGE THE LOCK BIT, =1 CLOCK STABLE
CLKSEL = 0x80; //SELECT PLL clock
其他s12x的单片机大同小异,无非是公式变了:
// fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)
// fPLL= fVCO/(2 × POSTDIV)
// fBUS= fPLL/2
加多一句POSTDIV = 0x00; 则fPLL= fVCO,
另外可能有两个值要设置分别是SYNR和REFDV寄存器的第6,7位,
对于SYNR
// VCOCLK Frequency Ranges VCOFRQ[7:6]
// 32MHz <= fVCO <= 48MHz 00
// 48MHz < fVCO <= 80MHz 01
// Reserved 10
// 80MHz < fVCO <= 120MHz 11
对于REFDV
// REFFRQ[7:6];REFDIV[5:0]
// fREF=fOSC/(REFDIV + 1)
// REFCLK Frequency Ranges REFFRQ[7:6]
// 1MHz <= fREF <= 2MHz 00
// 2MHz < fREF <= 6MHz 01
// 6MHz < fREF <= 12MHz 10
// fREF > 12MHz 11
算出对应的fVCO 、fREF 赋值进去就好,
其中fREF 我也还没搞清楚是啥子。
还有,该系列单片机的fBUS使用外部晶振不进行pll时,fBUS为外部fOSC的一半