要设定PWM模块首先要确定片内总线时钟,MC9S12XS系列单片机增加了时钟产生器模块,锁定内部频率更高的压控振荡器VCO频率,作为系统时钟,单片机的内部时钟可达80MHz,片内总线时钟可达40MHz。
先给出一段例程
1.REFDV=0x07;//REFDIV=7
2.SYNR=0x53;//SYNDIV=19
3.while(LOCK!=1);//等待VCO稳定
4.POSTDIV=0;//POSTDIV=0,VCO时钟=80MHz
5.CLKSEL_PLLSEL=1;//选择由Fpll产生总线时钟,Fbus=Fpll/2=40MHz
注:LOCK之前省去了寄存器名,这里是屏蔽不给发出来。
下面开始简单分析一下寄存器
(1)时钟分频寄存器(CRG Reference Divider Register,REFDV)
REFDV
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
REFFRQ1
REFFRQ0
REFDV5
REFDV4
REFDV3
REFDV2
REFDV1
REFDV0
复位时:
0
0
0
0
0
0
0
0
REFDV寄存器的高两位REFFRQ[ 1:0 ]表示参考时钟范围
REFFRQ1
REFFRQ0
参考时钟范围
0
0
1~2MHz(默认)
0
1
2~6MHz
1
0
6~12MHz
1
1
大于12MHz
REFDV的低六位为分频因子REFDV的值,有效值的范围为0~63.
(2)时钟合成寄存器(CRG Synthesizer Register , SYNR)
SYNR
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
VCOFRQ1
VCOFRQ0
SYNR5
SYNR4
SYNR3
SYNR2
SYNR1
SYNR0
复位时
0
0
0
0
0
0
0
0
SYNR高两位控制压控振动器VCO的增益
VCOFRQ1
VCOFRQ0
VOC频率
0
0
默认,32~48MHz
0
1
48~80MHz
1
0
冗余
1
1
80~120MHz
SYNR寄存器的低六位可写入0~63.可将锁相环时钟倍频1~64倍。
锁相环产生的时钟频率可由下面的公式得到
PLLCLK=2 * OSCCLK * ( SYNR+1 ) / ( REFDV+1 )
(3)锁相环寄存器(PLL Control Register , PLLCTL)
PLLCTL
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
CME
PLLON
FM1
FM0
PSTWKP
PRE
PCE
SCME
复位时:
1
1
0
0
0
0
0
1
CME:时钟监控允许位。
PLLON:锁相环电路允许位。
FM [ 1 : 0 ]:选择附加调频滤波器以降低VCO噪声,默认值表示不使用该滤波器,可写入01,10或11,表示参考频率相对于VCO偏高1%,2%,4%时自动调整。
FSTWKP:时钟快速唤醒CPU功能位。
PRE:CPU伪停止状态时,实时中断(RT1)允许位。
PCE:CPU虚拟停止时,看门狗(COP)允许位。
SCEM:自时钟方式允许位,默认为1,探测到外部晶振停振时进入自时钟模式,为0时,禁止自时钟模式,探测到外部晶振停振时复位。
(4)时钟产生标志寄存器(CRG Flag Register)
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
RTIF
PORF
LVRF
LOCKIF
LOCK
ILAF
SCMIF
SCM
复位时:
0
0
0
0
0
0
0
0
LOCK:锁相环频率锁定标志,为1表示时钟频率已稳定,锁相环频率已锁定。
(5)时钟选择寄存器(Clock Select Register , CLKSEL)
CLKSEL
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
PLLSEL
PSTF
SYSWA
ROAWA
PLLWAI
CWA
RTIWA
COPWA
复位时:
0
0
0
0
0
0
0
0
PLLSEL:选定锁相环(PLL Select)位,置1为选定锁相环时钟。