注册 登录
查看: 461|回复: 6

关于BUS频率的问题请教下哈

[复制链接]
发表于 2014-5-1 15:26:15 | 显示全部楼层 |阅读模式
/*!
*  @brief      系统初始化,设置系统频率,初始化printf端口
*  @since      v5.0
*  @note       此函数是系统启动初期由汇编函数调用,然后执行main函数
*/
void sysinit (void)
{
    core_clk_mhz = pll_init(CORE_CLK);     //设置系统时钟

    core_clk_khz = core_clk_mhz * 1000;     //把配置好的时钟都保存在全局变量里,以便后续使用
    bus_clk_khz = core_clk_khz / (((SIM_CLKDIV1 & SIM_CLKDIV1_OUTDIV2_MASK) >> 24) + 1);

    uart_init (FIRE_PORT, FIRE_BAUD);   //初始化printf用到的管脚
}

以上山外的代码在system_MK60DZ10.c中
core_clk_khz = core_clk_mhz * 1000;//这个,*不应该是/号吗?
bus_clk_khz = core_clk_khz / (((SIM_CLKDIV1 & SIM_CLKDIV1_OUTDIV2_MASK) >> 24) + 1);// 这是是core时钟的二分频吧

有点困惑,求指点下哈



回复

使用道具 举报

 楼主| 发表于 2014-5-1 15:42:27 | 显示全部楼层
本帖最后由 LTREE 于 2014-5-1 15:54 编辑

LDVAL trigger = (period / clock period) -1    //   参考官方手册

这里我要定时2ms - 20ms的中断的话,这里计算LDVAL
(2ms - 20ms)*BUS频率 - 1,因为这里的前面是ms单位,后面对应的是s的单位,所以需要将BUS频率/1000
这样想对吗?那代码中是不是应该是/1000而不是*1000。。

刚开始接触了解不多,不要笑哈
回复 支持 反对

使用道具 举报

发表于 2014-5-1 16:31:09 | 显示全部楼层
core_clk_khz = core_clk_mhz * 1000;//这个,*不应该是/号吗

肯定不是除号啊,数学关系而已。自己推敲一下单位就知道了。
回复 支持 反对

使用道具 举报

发表于 2014-5-1 16:32:17 | 显示全部楼层
bus_clk_khz = core_clk_khz / (((SIM_CLKDIV1 & SIM_CLKDIV1_OUTDIV2_MASK) >> 24) + 1);// 这是是core时钟的二分频吧

不是二分之一,而是 (OUTDIV2 + 1 )分之一。OUTDIV2是SIM模块的CLKDIV1寄存器。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-1 18:37:10 | 显示全部楼层
锺离思涵 发表于 2014-5-1 16:31
core_clk_khz = core_clk_mhz * 1000;//这个,*不应该是/号吗

肯定不是除号啊,数学关系而已。自己推敲一 ...

1Mhz = 1000KHz    不是这样吗
回复 支持 反对

使用道具 举报

发表于 2014-5-1 20:43:49 | 显示全部楼层
LTREE 发表于 2014-5-1 18:37
1Mhz = 1000KHz    不是这样吗

1Mhz = 1000KHz


core_clk_khz   = 1000 的时候,就是表示 1M CORE,就是 core_clk_mhz  = 1。

那么 core_clk_khz   = core_clk_mhz   * 1000 不就对了嘛!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-2 09:45:39 | 显示全部楼层
缑萱彤 发表于 2014-5-1 20:43
1Mhz = 1000KHz

    好吧   恕我愚钝 知道了 谢啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部