首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MC9S12DG128B中PLL的问题

MC9S12DG128B中PLL的问题

我MC9S12DG128B中PWM生成1Hz 50%的方波(外晶振16M)
用PLL升频32后方波变成4Hz 50%了
我想应该是2Hz 50%才对的啊?
是不是我程序错了 或者计算有误?
请教大虾们来了
谢谢!
代码如下:


/********晶振16MHz PWM产生 1 Hz占空比为50%的矩形波,先为低后为高 *********/

//已经验证 正确

#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"



/****** 初始化PLL锁相环 ******/

/*****void PLL_Init(void)
{
DisableInterrupts; //关全局中断

//设置PLL锁相环(内部)时钟32MHz为系统时钟 (外部时钟为16MHz,经PLL内部时钟为32MHz)
//PLLCTL=0x40; //
CLKSEL &= 0x7F;
REFDV = 1; //PLLCLK = 2*OSCCLK x (SYNR + 1)/(REFDV + 1)=64M
SYNR = 3;

while(!(CRGFLG&0x08));

while(CLKSEL != 0x80)
{

CLKSEL |= 0x80; //Bus Clock =PLLCLK/2=32M

}

} *********/


void pwminitial()
{
PWMPOL=0X01; //通道0输出波形开始极性为0 先为低后为高
PWMCAE=0x00; //左对齐输出模式
PWMCLK=0X01; //PWM时钟源为SA
PWMPRCLK=0X07; //时钟A128分频 Clock A is 16MHz/128=128KHz
PWMSCLA=0XFF; //时钟SA为128KHz/(256*2)/2 Clock SA is 128KHz/512/2=128Hz

PWMPER0=128; //设定输出周期=通道时钟周期*128 (1/128)*128=1s
PWMDTY0=64; //占空为50%
PWME=0X01; //通道0使能

}

void main()
{
//PLL_Init();
pwminitial();
DDRB=0XFF;

for(;;)
{

PORTB=PTP; //点亮LED

}

}
问句天几高 心中似比天更高
这个片子能达到那么高的速度吗,
当外部晶振为16M时,系统时钟为8M。现在你将系统时钟升为32M,PWM频率当然变为以前的4倍。
海纳百川  有容乃大
问题就在 外部晶振为16M时,系统时钟为8M还是16M?因为我上面代码是按照16M来算是对的啊, 然后,即使是系统时钟2分频,用了PLL后还不是2分频变32/2=16M?这里是哪里不对呢?
问句天几高 心中似比天更高
当外部晶振为16M时,总线时钟为8M。现在你是将PLL的输出时钟升为64M,总线时钟为32M。
海纳百川  有容乃大
返回列表