在线时间0 小时
UID2038218
注册时间2013-9-2
NXP金币0
该用户从未签到
注册会员

- 积分
- 62
- 最后登录
- 1970-1-1
|
各位新年好!
(1)我正在用 MK60FX512VLQ,将主频倍到150 M的时候来翻转GPIO ,发现速度特别慢,才几百KHZ,怀疑是时钟设置有问题,请各位前辈帮忙看看!工程文件我会做为附件添上来。
(2)另外我打算用20M有源晶振倍频到150M,是可行否?
(3)最后还有个问题,P653 的例子,是将 16M晶振倍频到 128M,设的是 PRDIV0 分频2,VDIV0 倍频16,
MCGOUT=16MHZ/2*16=128M
我之前看到前辈分享的一份资料,FAQ_Kinetis常见问题与解答(第十三版),非常好,里面有个50M倍频达不到150M的问题,前辈的回答是 PLL 模块中,VCO 的输出会减半,所以倍频时应加倍,原来10M倍到150Md VCO的 VDIV0不应设为15倍,应设为30倍,使VCO OUT 为300M,对应的PLL 输出为150M。
所以呢,倍频时,用户手册的 VDIV0 设的系数没有加倍,前辈的资料有加倍,我想问问前辈们,是否需要加倍?
各位要看下我工程文件啊,非常非常感谢!
工程中的pll_init 函数是这样的:
uint32 pll_init()
{
MCG_C2=0x28;
SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
PMC_REGSC=PMC_REGSC_ACKISO_MASK;
MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(0); //MCGOUTCLK 选择外部参考时钟 设置一个 FRDIV 分频,其实不必要。因为 FLL 不会用到
PMC_REGSC |= PMC_REGSC_ACKISO_MASK;
MCG_C6=0;
while (MCG_S & MCG_S_IREFST_MASK); // 等待 FLL 参考时钟变成 external ref-erence clock
while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2); //等待时钟状态显示为外部参考时钟(ext ref clk)//进入 PBE 模式
//MCG_C5配置PLL
//由于外部用的有源晶振是20M,而0x01对应的分频系数是2,则分频后是20/2=10M
MCG_C5 = MCG_C5_PRDIV0(1); // 设置 PLL 匹配晶振的参考分频数
//确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLL VCO分频器
//倍频,以及废除一些检测位
MCG_C6 = 0x0;
//PLL的选择,取决于参数的时钟选项
set_sys_dividers(0,1,2,5); //core=150M, bus=75M, FlexBus=50M, Flash Clk=25M
MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV0(0x0b); //VDIV = 10(10*30)300MHz//pll_freq = 150;
while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set
while (!(MCG_S & MCG_S_LOCK0_MASK)){}; // Wait for LOCK bit to set// Now running PBE Mode// Transition into PEE by setting CLKS to 0// CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
MCG_C1 &= ~MCG_C1_CLKS_MASK;// Wait for clock status bits to update
while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};// Now running PEE Mode}
//此时进入PEE模式
return (uint32)(150*1000);//返回内核时钟(KHz)
|
|