Skip to content

Commit 168bdc8

Browse files
mmahadevan1080xc0170
authored andcommitted
MCUXpresso: Fix issue of ticker interrupt incorrectly firing
Fix for Issue #5279 Signed-off-by: Mahadevan Mahesh <[email protected]>
1 parent e1090ca commit 168bdc8

File tree

10 files changed

+114
-15
lines changed

10 files changed

+114
-15
lines changed

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_K66F/us_ticker.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222
static int us_ticker_inited = 0;
2323

24+
static void pit_isr(void)
25+
{
26+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
27+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
28+
PIT_StopTimer(PIT, kPIT_Chnl_2);
29+
PIT_StopTimer(PIT, kPIT_Chnl_3);
30+
31+
us_ticker_irq_handler();
32+
}
33+
2434
void us_ticker_init(void)
2535
{
2636
if (us_ticker_inited) {
@@ -47,7 +57,7 @@ void us_ticker_init(void)
4757
//Ticker
4858
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
4959
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
50-
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
60+
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
5161
NVIC_EnableIRQ(PIT3_IRQn);
5262
}
5363

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_K82F/us_ticker.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222
static int us_ticker_inited = 0;
2323

24+
static void pit_isr(void)
25+
{
26+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
27+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
28+
PIT_StopTimer(PIT, kPIT_Chnl_2);
29+
PIT_StopTimer(PIT, kPIT_Chnl_3);
30+
31+
us_ticker_irq_handler();
32+
}
33+
2434
void us_ticker_init(void)
2535
{
2636
if (us_ticker_inited) {
@@ -47,7 +57,7 @@ void us_ticker_init(void)
4757
//Ticker
4858
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
4959
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
50-
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
60+
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
5161
NVIC_EnableIRQ(PIT3_IRQn);
5262
}
5363

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_KL27Z/us_ticker.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222

2323
static int us_ticker_inited = 0;
2424

25+
static void lptmr_isr(void)
26+
{
27+
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
28+
LPTMR_StopTimer(LPTMR0);
29+
30+
us_ticker_irq_handler();
31+
}
32+
2533
void us_ticker_init(void)
2634
{
2735
if (us_ticker_inited) {
@@ -56,7 +64,7 @@ void us_ticker_init(void)
5664
busClock = CLOCK_GetFreq(kCLOCK_McgInternalRefClk);
5765
LPTMR_SetTimerPeriod(LPTMR0, busClock / 1000000 - 1);
5866
/* Set interrupt handler */
59-
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)us_ticker_irq_handler);
67+
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)lptmr_isr);
6068
NVIC_EnableIRQ(LPTMR0_IRQn);
6169
}
6270

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_KL43Z/us_ticker.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222

2323
static int us_ticker_inited = 0;
2424

25+
static void lptmr_isr(void)
26+
{
27+
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
28+
LPTMR_StopTimer(LPTMR0);
29+
30+
us_ticker_irq_handler();
31+
}
32+
2533
void us_ticker_init(void)
2634
{
2735
if (us_ticker_inited) {
@@ -56,7 +64,7 @@ void us_ticker_init(void)
5664
busClock = CLOCK_GetFreq(kCLOCK_McgInternalRefClk);
5765
LPTMR_SetTimerPeriod(LPTMR0, busClock / 1000000 - 1);
5866
/* Set interrupt handler */
59-
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)us_ticker_irq_handler);
67+
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)lptmr_isr);
6068
NVIC_EnableIRQ(LPTMR0_IRQn);
6169
}
6270

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_KL82Z/us_ticker.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222
static int us_ticker_inited = 0;
2323

24+
static void pit_isr(void)
25+
{
26+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
27+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
28+
PIT_StopTimer(PIT, kPIT_Chnl_2);
29+
PIT_StopTimer(PIT, kPIT_Chnl_3);
30+
31+
us_ticker_irq_handler();
32+
}
33+
2434
void us_ticker_init(void)
2535
{
2636
if (us_ticker_inited) {
@@ -47,7 +57,7 @@ void us_ticker_init(void)
4757
//Ticker
4858
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
4959
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
50-
NVIC_SetVector(PIT0_IRQn, (uint32_t)us_ticker_irq_handler);
60+
NVIC_SetVector(PIT0_IRQn, (uint32_t)pit_isr);
5161
NVIC_EnableIRQ(PIT0_IRQn);
5262
}
5363

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_KW24D/us_ticker.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222
static int us_ticker_inited = 0;
2323

24+
static void pit_isr(void)
25+
{
26+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
27+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
28+
PIT_StopTimer(PIT, kPIT_Chnl_2);
29+
PIT_StopTimer(PIT, kPIT_Chnl_3);
30+
31+
us_ticker_irq_handler();
32+
}
33+
2434
void us_ticker_init(void)
2535
{
2636
if (us_ticker_inited) {
@@ -47,7 +57,7 @@ void us_ticker_init(void)
4757
//Ticker
4858
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
4959
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
50-
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
60+
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
5161
NVIC_EnableIRQ(PIT3_IRQn);
5262
}
5363

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_KW41Z/us_ticker.c

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,16 @@
2222

2323
static int us_ticker_inited = 0;
2424

25-
void us_ticker_init(void) {
25+
static void lptmr_isr(void)
26+
{
27+
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
28+
LPTMR_StopTimer(LPTMR0);
29+
30+
us_ticker_irq_handler();
31+
}
32+
33+
void us_ticker_init(void)
34+
{
2635
if (us_ticker_inited) {
2736
return;
2837
}
@@ -55,28 +64,32 @@ void us_ticker_init(void) {
5564
busClock = CLOCK_GetFreq(kCLOCK_McgInternalRefClk);
5665
LPTMR_SetTimerPeriod(LPTMR0, busClock / 1000000 - 1);
5766
/* Set interrupt handler */
58-
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)us_ticker_irq_handler);
67+
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)lptmr_isr);
5968
NVIC_EnableIRQ(LPTMR0_IRQn);
6069
}
6170

6271

63-
uint32_t us_ticker_read() {
72+
uint32_t us_ticker_read()
73+
{
6474
if (!us_ticker_inited) {
6575
us_ticker_init();
6676
}
6777

6878
return ~(PIT_GetCurrentTimerCount(PIT, kPIT_Chnl_1));
6979
}
7080

71-
void us_ticker_disable_interrupt(void) {
81+
void us_ticker_disable_interrupt(void)
82+
{
7283
LPTMR_DisableInterrupts(LPTMR0, kLPTMR_TimerInterruptEnable);
7384
}
7485

75-
void us_ticker_clear_interrupt(void) {
86+
void us_ticker_clear_interrupt(void)
87+
{
7688
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
7789
}
7890

79-
void us_ticker_set_interrupt(timestamp_t timestamp) {
91+
void us_ticker_set_interrupt(timestamp_t timestamp)
92+
{
8093
uint32_t delta = timestamp - us_ticker_read();
8194
LPTMR_StopTimer(LPTMR0);
8295
LPTMR_SetTimerPeriod(LPTMR0, (uint32_t)delta);

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_MCU_K22F/us_ticker.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222
static int us_ticker_inited = 0;
2323

24+
static void pit_isr(void)
25+
{
26+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
27+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
28+
PIT_StopTimer(PIT, kPIT_Chnl_2);
29+
PIT_StopTimer(PIT, kPIT_Chnl_3);
30+
31+
us_ticker_irq_handler();
32+
}
33+
2434
void us_ticker_init(void)
2535
{
2636
if (us_ticker_inited) {
@@ -47,7 +57,7 @@ void us_ticker_init(void)
4757
//Ticker
4858
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
4959
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
50-
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
60+
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
5161
NVIC_EnableIRQ(PIT3_IRQn);
5262
}
5363

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_MCU_K24F/us_ticker.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222
static int us_ticker_inited = 0;
2323

24+
static void pit_isr(void)
25+
{
26+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
27+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
28+
PIT_StopTimer(PIT, kPIT_Chnl_2);
29+
PIT_StopTimer(PIT, kPIT_Chnl_3);
30+
31+
us_ticker_irq_handler();
32+
}
33+
2434
void us_ticker_init(void)
2535
{
2636
if (us_ticker_inited) {
@@ -47,7 +57,7 @@ void us_ticker_init(void)
4757
//Ticker
4858
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
4959
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
50-
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
60+
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
5161
NVIC_EnableIRQ(PIT3_IRQn);
5262
}
5363

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_MCU_K64F/us_ticker.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222
static int us_ticker_inited = 0;
2323

24+
static void pit_isr(void)
25+
{
26+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
27+
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
28+
PIT_StopTimer(PIT, kPIT_Chnl_2);
29+
PIT_StopTimer(PIT, kPIT_Chnl_3);
30+
31+
us_ticker_irq_handler();
32+
}
33+
2434
void us_ticker_init(void)
2535
{
2636
if (us_ticker_inited) {
@@ -47,7 +57,7 @@ void us_ticker_init(void)
4757
//Ticker
4858
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
4959
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
50-
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
60+
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
5161
NVIC_EnableIRQ(PIT3_IRQn);
5262
}
5363

0 commit comments

Comments
 (0)