MC9S12ZVL32锁相环初始化
时间: 2023-09-18 08:15:02 浏览: 54
MC9S12ZVL32芯片的锁相环(PLL)初始化包括以下步骤:
1. 将PLLCTL寄存器的CME、PLLON和PCE位清零,将PCE位设置为1,禁止时钟监视器,关闭PLL,使能PLL预分频器。
2. 设置PLLCTL寄存器的VCOFRM、COPW和SCME位。VCOFRM位选择VCO输出频率的范围,COPW位选择COP的输出频率,SCME位选择时钟监视器的工作状态。
3. 设置SYNR和REFDV寄存器,分别设置PLL的倍频器和预分频器的参数。SYNR寄存器的SYNDIV字段设置PLL的倍频器值,REFDV寄存器的REFDV字段设置预分频器的值。
4. 将PLLCTL寄存器的PLLON位设置为1,启动PLL。
5. 等待PLL稳定,可以通过读取CRGFLG寄存器的SCIF、LOCK和LOCKA位来判断PLL是否稳定。当SCIF位为1时,表示PLL失锁;当LOCK位为1时,表示PLL已经锁定,但是还没有达到稳定状态;当LOCKA位为1时,表示PLL已经锁定并且达到稳定状态。
6. 将PLLCTL寄存器的CME位设置为1,使能时钟监视器。
以上是MC9S12ZVL32锁相环初始化的基本步骤,具体的参数设置需要根据实际应用来确定。
相关问题
MC9S12ZVL32锁相环初始化代码
下面是MC9S12ZVL32锁相环初始化的代码示例:
```c
void initPLL(void)
{
// 禁止时钟监视器,关闭PLL,使能PLL预分频器
PLLCTL &= ~(PLLCTL_CME_MASK | PLLCTL_PLLON_MASK | PLLCTL_PCE_MASK);
PLLCTL |= PLLCTL_PCE_MASK;
// 设置VCO输出频率范围、COP输出频率和时钟监视器状态
PLLCTL |= (PLLCTL_VCOFRM_MASK | PLLCTL_COPW_MASK | PLLCTL_SCME_MASK);
// 设置PLL倍频器和预分频器的参数
SYNR = 0x02; // PLL倍频器值为2
REFDV = 0x01; // PLL预分频器值为1
// 启动PLL
PLLCTL |= PLLCTL_PLLON_MASK;
// 等待PLL稳定
while (!(CRGFLG & CRGFLG_LOCKA_MASK))
;
// 使能时钟监视器
PLLCTL |= PLLCTL_CME_MASK;
}
```
在这个示例中,我们将PLL的倍频器值设置为2,预分频器值设置为1,这样就可以将系统时钟从外部晶振的频率提高到原来的2倍。需要注意的是,具体的参数设置需要根据实际应用来确定。
CODEWARRIOR中的MC9S12ZVL32的PLL初始化
MC9S12ZVL32的PLL初始化包括以下步骤:
1. 设置系统时钟分频器(SYNR)和系统时钟分频器2(REFDV)寄存器。SYNR寄存器的值为倍频器的值减1,REFDV寄存器的值为分频器的值减1。例如,如果要将系统时钟设置为24MHz,则SYNR寄存器的值应为3,REFDV寄存器的值应为1。
2. 配置PLLCTL寄存器。设置PLLCTL寄存器的值为0x60,这将使PLL进入锁定模式。如果需要使用高频率时钟,则需要设置PLLCTL的其他位,例如PLL倍频器位和PLL预分频器位。
3. 等待PLL稳定。可以通过读取CRGFLG寄存器的LOCKIF位来检查PLL是否已经稳定。如果LOCKIF位为1,则表示PLL已经稳定。
4. 配置CLKSEL寄存器。将CLKSEL寄存器的值设置为0x80,这将使系统时钟源选择为PLL。
下面是一个初始化MC9S12ZVL32 PLL的示例代码:
```c
void pll_init(void)
{
SYNR = 0x02; // 设置系统时钟分频器,将系统时钟设置为24MHz
REFDV = 0x00;
PLLCTL = 0x60; // 配置PLLCTL寄存器
while (!(CRGFLG & 0x08)); // 等待PLL稳定
CLKSEL = 0x80; // 配置CLKSEL寄存器
}
```