1、外部用8Mhz晶振,总线时钟最高能超到多少?
2、想超到80M,如何改寄存器参数
程序如下:
void PLL_init(void)
{
uint_8 temp_reg,i;
MCG_C2 = MCG_C2_RANGE0(1) | MCG_C2_EREFS0_MASK;
MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
// When the external oscillator is used need to wait for OSCINIT to set
for (i = 0 ; i < 20000 ; i++)
{
// jump out early if OSCINIT sets before loop finishes
if (MCG_S & MCG_S_OSCINIT0_MASK) break;
}
// wait for Reference clock Status bit to clear
for (i = 0 ; i < 2000 ; i++)
{
// jump out early if IREFST clears before loop finishes
if (!(MCG_S & MCG_S_IREFST_MASK)) break;
}
// Wait for clock status bits to show clock source is ext ref clk
for (i = 0 ; i < 2000 ; i++)
{
// jump out early if CLKST shows EXT CLK selected before loop finishes
if (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) == 0x2) break;
}
// Now in FBE
MCG_C6 |= MCG_C6_CME0_MASK;
MCG_C5 |= MCG_C5_PRDIV0(1);//分频在2~4MHz之间,分频后频率=晶振频率/(PRDIV+1) 2MHz
temp_reg = MCG_C6; // store present C6 value (as CME0 bit was previously set)
temp_reg &= ~MCG_C6_VDIV0_MASK; // clear VDIV settings
temp_reg |= MCG_C6_PLLS_MASK | MCG_C6_VDIV0(0); // write new VDIV and enable PLL
MCG_C6 = temp_reg; // update MCG_C6
// wait for PLLST status bit to set
for (i = 0 ; i < 2000 ; i++)
{
// jump out early if PLLST sets before loop finishes
if (MCG_S & MCG_S_PLLST_MASK) break;
}
// Wait for LOCK bit to set
for (i = 0 ; i < 4000 ; i++)
{
// jump out early if LOCK sets before loop finishes
for (i = 0 ; i < 4000 ; i++) {
// jump out early if LOCK sets before loop finishes
if (MCG_S & MCG_S_LOCK0_MASK) break;
}
SIM_CLKDIV1 = (SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV4(1) );
MCG_C1 &= ~MCG_C1_CLKS_MASK;
// Wait for clock status bits to update
for (i = 0 ; i < 2000 ; i++)
{
// jump out early if CLKST = 3 before loop finishes
if (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) == 0x3) break;
}
// Now in PEE
}