高级会员

- 积分
- 767

- 威望
- 468
- 贡献
- 169
- 兑换币
- 47
- 注册时间
- 2010-11-7
- 在线时间
- 65 小时
|
本帖最后由 sword1224 于 2012-2-16 12:10 编辑
Kinetis中有很多个时钟,有内核时钟,总线时钟,还有一个FLASH时钟,每一个时钟都有自己独立的分频数,你的现象很可能是总线时钟与内核时钟没有超,但FLASH时钟超了,所以程序在RAM中运行没问题,而在FLASH中运行就不行,对于清华的K10,好像FLASH时钟30多M就不顶了。
这是我的设置各个时钟分频数的代码(这段代码加的位置不是任意的,由于程序太长,完整的初始化代码就不贴出来了,你看一下你的时钟初始化程序,把SIM_CLKDIV1的设置替换掉就可以了),其中内核时钟的分频数为1,总线时钟,FlexBus时钟,以及FLASH时钟的分频数由宏来定义:
#define DIV_BusClk_Kinetis 2 /* BusClock的分频数(相对于内核时钟),最大不能超过64M */
#define DIV_FlexClk_Kinetis 2 /* FlexBusclock的分频数(相对于内核时钟),最大不能超过64M */
#define DIV_FlashClk_Kinetis 4 /* Flashclock的分频数(相对于内核时钟),最大不能超过32M */
// set clock dividers to desired value
SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0)
| SIM_CLKDIV1_OUTDIV2(DIV_BusClk_Kinetis - 1)
| SIM_CLKDIV1_OUTDIV3(DIV_FlexClk_Kinetis - 1)
| SIM_CLKDIV1_OUTDIV4(DIV_FlashClk_Kinetis - 1);
// wait for dividers to change
for (i = 0 ; i < DIV_FlashClk_Kinetis ; i++) ; |
|