背景 查看i.mx283手册时,主频450MHz,但DDR的总线频率却是206MHz,突然想起Kinetis系列的时钟问题,后来查看了几个手册,总结一下。 解决 K60 系列的芯片,有四个时钟:Core时钟、Bus时钟、FlexBus时钟、Flash 时钟。 KL26是没有FlexBus时钟,并且Bus时钟和Flash时钟是一样的。 而各个时钟对应的外设用途是: 1、Core时钟 ,顾名思义是cortex-M4内核的工作频率,主要是运算,滴答定时器,串口的频率。 2、Bus时钟,是Kinetis的外围模块工作频率,例如串口2~4 ,I2C ,PIT定时器。 3、FlexBus时钟,是芯片外围的工作频率,例如驱动片外SDRAM等。 4、Flash时钟,就是flash模块的工作频率,代码都保存在flash里的。 延伸 时钟是芯片的心跳,没有心跳芯片就“活”不下去,要设置好这个时钟也不容易的。 以K60例, 时钟设置在pll_init里面,我用的库里有个set_sys_dividers函数。 这个函数的计算方法如下: 设置系统分频因子选项:set_sys_dividers(a,b,c,d); 则相应时钟为: MCG=PLL: Core时钟= MCG/(a + 1) Bus时钟 = MCG/(b + 1), FlexBus时钟= MCG/(c + 1) Flash时钟= MCG/(d + 1)
|