From 6abb9c511c0d5fecf016e7c86e32001f7a49b855 Mon Sep 17 00:00:00 2001 From: Mahadevan Mahesh Date: Fri, 13 Oct 2017 10:47:03 -0500 Subject: [PATCH] MCUXpresso: Fix LPTimer issue when using multiple timeout objects Fix for Issue #5150 Signed-off-by: Mahadevan Mahesh --- .../TARGET_MCUXpresso_MCUS/api/lp_ticker.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/api/lp_ticker.c b/targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/api/lp_ticker.c index 18fc6e1dfe3..7b57feaf476 100644 --- a/targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/api/lp_ticker.c +++ b/targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/api/lp_ticker.c @@ -139,6 +139,11 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) /* Checking if LPTRM can handle this sleep */ delta_ticks = USEC_TO_COUNT(delta_us, CLOCK_GetFreq(kCLOCK_Er32kClk)); + if (delta_ticks == 0) { + /* The requested delay is less than the minimum resolution of this counter */ + delta_ticks = 1; + } + if (delta_ticks > MAX_LPTMR_SLEEP) { /* Using RTC if wait time is over 16b (2s @32kHz) */ uint32_t delta_sec; @@ -154,6 +159,11 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) /* Set aditional, subsecond, sleep time */ if (delta_us) { lptmr_schedule = USEC_TO_COUNT(delta_us, CLOCK_GetFreq(kCLOCK_Er32kClk)); + if (lptmr_schedule == 0) { + /* The requested delay is less than the minimum resolution of this counter */ + lptmr_schedule = 1; + } + } } else { /* Below RTC resolution using LPTMR */