打印

关于eCos中LPC2468模板的CCLK设置

[复制链接]
2137|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arm86|  楼主 | 2009-8-30 00:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是ecos.db里面所包含的模板,为EA LPC2468 OEM board的模板。
在C:\cygwin\opt\ecos-3.0\packages\hal\arm\lpc24xx\ea2468\v3_0\src目录下的ea2468_misc.c文件中,函数void hal_pll_init(void)里面的几行,如下:

212    // Set CPU clock divider
213    //
214    HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_CCLKCFG,
215                     CYGNUM_HAL_ARM_LPC24XX_CPU_CLK_DIV - 1);
216                     
217    //
218    // Set USB clock divider
219    //
220    HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_CCLKCFG,
221                     CYGNUM_HAL_ARM_LPC24XX_USB_CLK_DIV - 1);

需要注意的是CYGARC_HAL_LPC24XX_REG_CCLKCFG,在设置USB时钟时,却是给CPU时钟赋值。因此,在eCos Configuration Tool里对CPU的频率作修改后,最后还是由USB的分频值来确定CPU的时钟。如果两个时钟都是设定为48MHz,那么在程序运行时不会出现问题。如果需要CPU的时钟为72MHz,而USB的时钟为48MHz,此时CPU的时钟仍为48MHz。将220行作如下修改,即可。
220    HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_USBCLKCFG,

另外,还有一个设置串口波特率时需要注意的地方。
在void hal_plf_startup(void)函数中:
    // Set clock speed of all peripherals to reset value (CPU speed / 4)
    //
    HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PCLKSEL0, 0x00000000);
    HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PCLKSEL1, 0x00000000);
这里设置了外围设备的时钟为CPU时钟的1/4。
波特率的计算为:
    UxDLM = (UARTx_PCLK / (baudrate*16)) >> 8;
    UxDLL = (UARTx_PCLK / (baudrate*16)) & 0xFF;
假设CPU_CL=48MHz,需要设置baudrate为115200,这时可以计算出:
    UxDLM = ((48000000/4) / (115200*16)) >> 8 = 0
    UxDLL = ((48000000/4) / (115200*16)) & 0xFF = 6
其实,(48000000/4) / (115200*16) = 6.51。可以看出,误差很大。
再计算一下波特率为128000的情况:(48000000/4) / (128000*16) = 5.86。
由此可以知道,当评估板的波特率按照以上参数设置时,由于误差的存在,设置的波特率并不是如eCos配置工具所显示的。
使用较低的波特率将不会出现该问题。或者可以提高UART0的时钟,只需作如下修改:
    HAL_WRITE_UINT32(SCB_BASE + CYGARC_HAL_LPC24XX_REG_PCLKSEL0, 0x00000040);
修改后的 UxDLL = (48000000 / (115200*16)) & 0xFF = 26,
而 (48000000 / (115200*16)) = 26.04,误差就小多了。
如果使用更高的时钟,例如72MHz,可算得(72000000 / (115200*16)) = 39.06,误差就更小了。
在72MHz时,芯片会有点发热,用手可以感觉出来,可见功耗应该蛮大的。

以上两个问题,我大概花了5个小时才搞定,有点郁闷,所以整理出来,希望对遇到该问题的同行有点用处,或许可以减少点郁闷的时间,呵呵。

相关帖子

沙发
一朝成名| | 2009-8-30 08:18 | 只看该作者
lz非常仔细啊~~我也在用这个

使用特权

评论回复
板凳
一朝成名| | 2009-8-30 08:25 | 只看该作者
更正lz一点问题,如果想要跑USB,那么cpu主频只能跑到48,跑72的话是不行的~(貌似是这样的)
lz可以查阅下datesheet,我是参考过的~~~~~

使用特权

评论回复
地板
arm86|  楼主 | 2009-8-30 11:21 | 只看该作者
谢谢楼上的,我得去仔细看看。

使用特权

评论回复
5
一朝成名| | 2009-8-30 11:24 | 只看该作者
lz看下站内信,我最近也做跟lz类似的项目,我们可以交流下~
ea2468~

使用特权

评论回复
6
lw2008| | 2011-7-27 00:52 | 只看该作者
我想买基于ECOS的板子,做个TCP服务器的模块。ECOS内置的LWIP应比我自已移植的要好。
QQ:123600562

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

745

帖子

5

粉丝