Bug in fsl_clock.c in SDK for LPC812

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Bug in fsl_clock.c in SDK for LPC812

870件の閲覧回数
petrolivka
Contributor II

Hi!

  The frequency of USART is not correctly computed in file fsl_clock.c in SDK 2.9.0 for LPC812. 

  The current code is:

uint32_t CLOCK_GetUartClkFreq(void)
{
    uint32_t freq = CLOCK_GetMainClkFreq();
    uint32_t uartDiv = SYSCON->UARTCLKDIV & 0xffU;

    return uartDiv == 0U ? 0U :
    (uint32_t)((uint64_t)(freq << 8U) /
        (uartDiv * (256U + ((SYSCON->UARTFRGMULT) & SYSCON_UARTFRGMULT_MULT_MASK))));
}

The variable freq should be retyped to uint64_t before shift left. Better is:

return uartDiv == 0U ? 0U : (uint32_t)((((uint64_t)(freq)) << 8U) /....

It is easy to test it for MainClock 24 MHz, UARTCLKDIV =1 and UARTFRGMULT=0. The correct result should be 24 MHz, but the function returns bad result: 7222784 Hz. 

The 24 MHz is 0x16E3600 and after shift left is out of range of uint32_t. 

Petr

 

 

 

1 返信

855件の閲覧回数
ZhangJennie
NXP TechSupport
NXP TechSupport

Hi petrolivka

We will fix this problem in release SDK2.11.0.

Thank you for bringing the problem to our attention.

 

Best Regards

Jun Zhang

0 件の賞賛
返信