查看: 5582|回复: 4

[已解决] K60使用50M有源晶振无法配置到150M (已解决)

[复制链接]

该用户从未签到

4

主题

11

帖子

0

新手上路

Rank: 1

积分
32
最后登录
1970-1-1
发表于 2013-5-28 10:18:25 | 显示全部楼层 |阅读模式
芯片是K60FX512VLQ15,板子上是50M的有源晶振,以下是我的程序,然后我通过trace管脚查看的频率只有18.75M,用PWM什么的输出以后检查,也发现时钟频率只有150的1/4.
void pll_init(void){
  //进入FBE模式
  MCG_C2=0x28;
  SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
  PMC_REGSC=PMC_REGSC_ACKISO_MASK;
  MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(5); //MCGOUTCLK选择外部参考时钟 设置一个FRDIV分频,其实不必要。因为FLL不会用到
  MCG_C6=0;
  while (MCG_S & MCG_S_IREFST_MASK); // 等待FLL参考时钟变成external reference clock
  while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2); // 等待时钟状态显示为外部参考时钟(ext ref clk)
  //进入PBE模式
  MCG_C5 = MCG_C5_PRDIV0(5); // 设置 PLL 匹配晶振的参考分频数 
  MCG_C6 = 0x0;
  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(2); //VDIV = 15 (8.3*18) 150MHz
  //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
}
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

4

主题

11

帖子

0

新手上路

Rank: 1

积分
32
最后登录
1970-1-1
 楼主| 发表于 2013-5-28 12:09:41 | 显示全部楼层

回复:K60使用50M有源晶振无法配置到150M (正解)

回复第 2 楼 于2013-05-28 11:46:22发表:
通过MCG模块图可以看到PLL输出时钟实际上是VCO时钟的一半,所以要让PLL输出150MHz时钟,需要把VCO时钟配置为300MHz。

由于PLL参考时钟为10MHz, 所以,你需要配置 MCG_C6 [VDIV0] 的值为 0b01110 (30)。
 
 
 
你好,感谢你的回复。我有源晶振50M,然后PRDIV=5 那么实际是6分频,然后乘以VDIV0=20(36)得到300M 然后2分频就变成150M了吧,然后我SIM模块里设置内核分频是0,所以内核也是150M。但是如此PWM和trace clock的值还是小了一半,不明白为什么
 
回复 支持 0 反对 1

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-5-28 11:46:22 | 显示全部楼层

回复:K60使用50M有源晶振无法配置到150M

通过MCG模块图可以看到PLL输出时钟实际上是VCO时钟的一半,所以要让PLL输出150MHz时钟,需要把VCO时钟配置为300MHz。
与非网.jpg
由于PLL参考时钟为10MHz, 所以,你需要配置 MCG_C6 [VDIV0] 的值为 0b01110 (30)。
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-5-28 13:04:00 | 显示全部楼层

回复:K60使用50M有源晶振无法配置到150M

Flextimer模块使用的时钟是总线时钟,而不是系统(内核)时钟。
Trace clock可以输出系统(内核)时钟的1/2.
与非网.jpg
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

11

帖子

0

新手上路

Rank: 1

积分
32
最后登录
1970-1-1
 楼主| 发表于 2013-5-28 13:30:06 | 显示全部楼层

回复:K60使用50M有源晶振无法配置到150M

回复第 4 楼 于2013-05-28 13:04:00发表:
Flextimer模块使用的时钟是总线时钟,而不是系统(内核)时钟。
Trace clock可以输出系统(内核)时钟的1/2.

 
恩多谢 明白了之前是因为看到了这个,所以才以为FTM是由system clock驱动的。。。现在明白了,在clock distribution里找到了 QQ截图20130528132732.png
 
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-10-21 06:55 , Processed in 0.102846 second(s), 26 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表