Kinetis KW24D512 - KSDK_1.3.0 - LPTMR

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Kinetis KW24D512 - KSDK_1.3.0 - LPTMR

361 次查看
fabricetocci
Contributor III

Hi,

I have to use a timer to get a real time counter for my application.
I started from KSDK_1.3.0/iar  lptmr driver example code to get a sample code.

My need is to have a count period at least egal to 26ms.

In LPTMR example driver/ main.c,

I have selected .prescalerClockSource = kClockLptmrSrcOsc0erClk, as source clock. Timer LSB is so 1µs.

To get 26ms for the timer period, I called LPTMR_DRV_SetTimerPeriodUs(LPTMR_INSTANCE,26000);

But that was not working.
With that code I can configure the timer for a maximum count period of 16,383ms!!!

I had a look to the status reported by settimerperiod function and it was kStatus_LPTMR_TimerPeriodUsTooLarge!!!

In fsl_lptmr_driver.c , lptmr_status_t LPTMR_DRV_SetTimerPeriodUs(uint32_t instance, uint32_t us), there is a some code to verify tick_count
before to calling LPTMR_HAL_SetCompareValue(base, tick_count - 1);  

It verifies that tick_count is smaller than 16bits but the compare value in LPTMR_HAL_SetCompareValue(LPTMR_Type * base,  uint32_t compareValue)
is 32bits width!!!

I changed the code like that in fsl_lptmr_driver.c:
    /* CMR register is 32 Bits */
    if (tick_count > 0xFFFFFFFFU)
    {
        return kStatus_LPTMR_TimerPeriodUsTooLarge;
    }
    
And now it works fine!! :))

标签 (1)
标记 (3)
0 项奖励
0 回复数