|
发表于 2012-9-6 23:15:24
|
显示全部楼层
AVR_ARM 发表于 2012-2-5 12:23
一直不明白飞思卡尔的M4时钟设计为何那么麻烦,想跑到100M要跳好几级。其他用的还好,性价比比较有优势,就 ...
其实很简单,不知道飞思卡尔为什么把它说的那么复杂。
什么FEI、FBE、PBE。。。老衲愣是没看明白,最后干脆按着自己对时钟电路的理解试了一下,居然一步到位
下面代码把外部4MHz晶振配置为100MHz主频:
uint32 DelayTime = 1000u;
//=============================================================关闭看门狗
// HWREGH(WDOG_UNLOCK) = (uint16)0xC520u; /* Key 1 */
// HWREGH(WDOG_UNLOCK) = (uint16)0xD928u; /* Key 2 */
// HWREGH(WDOG_STCTRLH) = (uint16)0x01D2u;
//-------------------------------------------------------------
Delay(DelayTime);
HWREGB(PMC_LVDSC1) = (uint8)0x11u; // 设置低电压复位检测值
HWREG(SIM_CLKDIV1) = (uint32)0x01130000u; // 设置输出时钟分频因数
Delay(DelayTime);
HWREGB(MCG_C5) = (uint8)0x00u; // 设置PLL输入分频因数
HWREGB(MCG_C6) = (uint8)0x01u; // 设置PLL倍频因数
HWREGB(MCG_S) = (uint8)0x10u; // 清状态标志
HWREGB(MCG_C2) = (uint8)0x9Cu; // 配置并启动外部OSC
HWREGBITB(MCG_C5, PLLCLKEN0) = 1; // 开启PLL
Delay(DelayTime);
while (!HWREGBITB(MCG_S, OSCINIT0)); // 等待外部OSC时钟就绪
Delay(DelayTime);
while (!HWREGBITB(MCG_S, LOCK0)); // 等待PLL锁定
Delay(DelayTime);
HWREGBITB(MCG_C6, PLLS) = 1; // 切换到PLL时钟
Delay(DelayTime);
while (((HWREGB(MCG_S)>>CLKST) & 0x03) != 0x03); // 确认已切换到PLL时钟
Delay(DelayTime);
HWREGBIT(SIM_SOPT2, PLLFLLSEL) = 1; // 选择MCGPLLCLK时钟源
Delay(DelayTime);
HWREGBITB(MCG_C6, CME0) = 1; // 开启时钟监视器
//-------------------------------------------------------------
|
|