原创 关于eCos中LPC2468模板的CCLK设置

2009-11-16 22:08 3416 7 7 分类: MCU/ 嵌入式
这是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个小时才搞定,有点郁闷,所以整理出来,希望对遇到该问题的同行有点用处,或许可以减少点郁闷的时间,呵呵。

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条