要设定PWM模块首先要确认片内总线时钟,MC9S12XS系列单片机增加了时钟发生器模块,确定内部频率更高的压控振荡器VCO频率,作为体系时钟,单片机的内部时钟可达80MHz,片内总线时钟可达40MHz。
- REFDV=0x07;
//REFDIV=7 - SYNR=0x53;
//SYNDIV=19 - while(LOCK!=1);
//等候VCO安稳 - POSTDIV=0;
//POSTDIV=0,VCO时钟=80MHz - CLKSEL_PLLSEL=1;
//挑选由Fpll发生总线时钟,Fbus=Fpll/2=40MHz
注:LOCK之前省去了寄存器名,这里是屏蔽不给发出来。
下面开端简略剖析一下寄存器
(1)时钟分频寄存器(CRG Reference Divider Register
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
(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为选定锁相环时钟。