在线时间0 小时
UID306662
注册时间2011-7-19
NXP金币0
该用户从未签到
新手上路

- 积分
- 59
- 最后登录
- 1970-1-1
|
开发板自带的system_k60n512vmd100.c的时钟初始化使用的是内部时钟,频率是47.9Mhz.
程序的时钟可选项和实际板子上使用的50Mhz外部震荡起完全不一样,在MDK里面设置时钟频率也没有用,因为程序里面是设定死的,没有按设定时钟来计算,并且可选的选项都是使用的晶体,而不是外部振荡器。
#elif (CLOCK_SETUP == 1)
#define CPU_XTAL_CLK_HZ 50000000u /* Value of the external crystal or oscillator clock frequency in Hz */
#define CPU_XTAL32k_CLK_HZ 32768u /* Value of the external 32k crystal or oscillator clock frequency in Hz */
#define CPU_INT_SLOW_CLK_HZ 32768u /* Value of the slow internal oscillator clock frequency in Hz */
#define CPU_INT_FAST_CLK_HZ 4000000u /* Value of the fast internal oscillator clock frequency in Hz */
#define DEFAULT_SYSTEM_CLOCK 1000000000u /* Default System clock value */
于是我在这个文件上修改定义如上。
然后初始化部分,改成如下:
#elif (CLOCK_SETUP == 1)
/* Switch to FBE Mode */
/* OSC->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */
OSC->CR = (uint8_t)0x80u;
/* SIM->SOPT2: MCGCLKSEL=0 */
SIM->SOPT2 &= (uint8_t)~(uint8_t)0x01u;
/* MCG->C2: ??=0,??=0,RANGE=2,HGO=0,EREFS=0,LP=0,IRCS=0 */
MCG->C2 = (uint8_t)0x20u;
/* MCG->C1: CLKS=2,FRDIV=5,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
MCG->C1 = (uint8_t)0xAAu; //50/1024=48k FLL
/* MCG->C4: DMX32=0,DRST_DRS=0 */
MCG->C4 &= (uint8_t)~(uint8_t)0xE0u; //48*640=31.25M
/* MCG->C5: ??=0,PLLCLKEN=0,PLLSTEN=0,PRDIV=19 */
MCG->C5 = (uint8_t)0x13u; //50/20=2.5M
/* MCG->C5: PLLCLKEN=1 */
MCG->C5 |= (uint8_t)0x40u; /* Enable the PLL */
/* MCG->C6: LOLIE=0,PLLS=0,CME=0,VDIV=16 */
MCG->C6 = (uint8_t)0x10u; //2.5X40=100
// while((MCG->S & MCG_S_OSCINIT_MASK) == 0u) { /* Check that the oscillator is running */
// }
while((MCG->S & MCG_S_IREFST_MASK) != 0u) { /* Check that the source of the FLL reference clock is the external reference clock. */
}
while((MCG->S & 0x0Cu) != 0x08u) { /* Wait until external reference clock is selected as MCG output */
}
/* Switch to PBE Mode */
/* MCG->C1: CLKS=2,FRDIV=0,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
MCG->C1 = (uint8_t)0x82u;
// MCG->C1 = (uint8_t)0xAAu;
/* MCG->C6: LOLIE=0,PLLS=1,CME=0,VDIV=16 */
// MCG->C6 = (uint8_t)0x40u;
MCG->C6 = (uint8_t)0x50u; //2.5X40=100M
/* Switch to PEE Mode */
/* MCG->C1: CLKS=0,FRDIV=0,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
MCG->C1 = (uint8_t)0x02u;
// MCG->C1 = (uint8_t)0x2Au; //50/1024=48K
/* MCG->C5: ??=0,PLLCLKEN=0,PLLSTEN=0,PRDIV=19 */
MCG->C5 = (uint8_t)0x13u; //50/20=2.5M
/* MCG->C6: LOLIE=0,PLLS=1,CME=0,VDIV=16 */
MCG->C6 = (uint8_t)0x50u; //2.5X40=100M
while((MCG->S & 0x0Cu) != 0x0Cu) { /* Wait until output of the PLL is selected */
}
while((MCG->S & MCG_S_LOCK_MASK) == 0u) { /* Wait until locked */
}
/* SIM->CLKDIV1: OUTDIV1=0,OUTDIV2=0,OUTDIV3=1,OUTDIV4=1,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */
// SIM->CLKDIV1 = (uint32_t)0x00110000u; /* Update system prescalers */
SIM->CLKDIV1 = (uint32_t)0x01140000u; /* Update system prescalers */
//system/core clock=100Mhz bus clock=50Mhz flex clock=50Mhz flash clock=20Mhz
现在的情况是,在调试模式下可以运行,看到systemcoreclock也是100Mhz,但是,下载后不能独立运行。程序是下载到flash里面调试的。
奇怪的是,按道理flash clock应该设定为25Mhz,但是,只能设定到20Mhz,否者就死机。
|
|