求助:关于8051U使用PLL无法正常获得时钟的问题
各位坛友好,本来准备使用PLL来提供系统时钟,同时关闭48MHz的USB时钟。通过寄存器设置无法获得正确的频率。
通过P4.7输出SYSCLK后用示波器观察,实际频率为8MHz。 IRC设置的是24MHz, 通过PLL锁频后输出96MHz, 再3分频给到SYSCLK,从结来看似乎PLL没起到作用。但检查寄存器又没找到问题,因此发上来希望有高手指导一下。 谢谢。
1.寄存器设置如下:
HIRCCR |= 0X80;
MCLKOCR = 0X01; //SYSCLK原频输出到P4.7
HSCLKDIV = 0x02; //IO对96MHz 2分频
CLKSEL = 0x44; //选择PLL96MHz为系统时钟和IO时钟;
USBCLK &= 0x0f;
USBCLK |= 0xa0; //使能PLL倍频, HIRC 2分频送PLL, HIRC为24MHz
CLKDIV = 0x03; //对PLL 3分频后送给SYSCLK
IRC48MCR &= 0x7f; //关闭48MHz USB专用时钟.
IRCBAND = 0x02;
while(!(HIRCCR&0x01)) //等待内部IRC时钟稳定
{
_nop_();
_nop_();
}
2.ISP设置:
继续检测目标单片机 ...
单片机型号: STC8051U-34K64
当前芯片的硬件选项为:
. 系统ISP工作频率: 24.010MHz
. 内部IRC振荡器的频率: 24.000MHz
. 掉电唤醒定时器的频率: 35.725KHz
. 振荡器放大增益使能
. 用户EEPROM大小被设置为 1 K
. P3.2和P3.3与下次下载无关
. 上电复位时增加额外的复位延时
. 复位引脚用作普通I/O口
. 检测到低压时复位
3.输出频率为8MHz,和程序跑的情况一致。
设计好时钟路径,然后挨个寄存器配置一遍
已经搞定了, 问题出在代码执行顺序上, 不能一开始就选通时钟路径。 等PLL启动后再选通道就可以了。 寄存器值设置本身没有问题。
IRC48MCR &= 0x7f;
while(!(HIRCCR&0x01)) //等待内部IRC时钟稳定
{
_nop_();
_nop_();
}
CLKSEL = 0X00;//可以不写这行
USBCLK &= 0X0f;
USBCLK |= 0X20;
USBCLK |= 0X80;
clk_delay();
CLKDIV = 0X03;
CLKSEL |= 0x04; //选通MCLK
IRCBAND &= 0x3f;//选通USB 96Mhz/2 时钟
HSCLKDIV = 0x02; //IO时钟分频 96/2 MHz
CLKSEL |= 0X40;//选通IO时钟
MCLKOCR = 0X01; //SYSCLK原频输出到P4.7
开心
DebugLab 发表于 2025-1-17 20:09
设计好时钟路径,然后挨个寄存器配置一遍
已解决,谢谢。
页:
[1]