mirror of https://github.com/ARMmbed/mbed-os.git
MCUXpresso: Fix issue of ticker interrupt incorrectly firing
Fix for Issue #5279 Signed-off-by: Mahadevan Mahesh <Mahesh.Mahadevan@nxp.com>pull/5340/head
parent
e1090cafe1
commit
168bdc8803
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void pit_isr(void)
|
||||
{
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_2);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_3);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -47,7 +57,7 @@ void us_ticker_init(void)
|
|||
//Ticker
|
||||
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
|
||||
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
|
||||
NVIC_EnableIRQ(PIT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void pit_isr(void)
|
||||
{
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_2);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_3);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -47,7 +57,7 @@ void us_ticker_init(void)
|
|||
//Ticker
|
||||
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
|
||||
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
|
||||
NVIC_EnableIRQ(PIT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,14 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void lptmr_isr(void)
|
||||
{
|
||||
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
|
||||
LPTMR_StopTimer(LPTMR0);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -56,7 +64,7 @@ void us_ticker_init(void)
|
|||
busClock = CLOCK_GetFreq(kCLOCK_McgInternalRefClk);
|
||||
LPTMR_SetTimerPeriod(LPTMR0, busClock / 1000000 - 1);
|
||||
/* Set interrupt handler */
|
||||
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)lptmr_isr);
|
||||
NVIC_EnableIRQ(LPTMR0_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,14 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void lptmr_isr(void)
|
||||
{
|
||||
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
|
||||
LPTMR_StopTimer(LPTMR0);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -56,7 +64,7 @@ void us_ticker_init(void)
|
|||
busClock = CLOCK_GetFreq(kCLOCK_McgInternalRefClk);
|
||||
LPTMR_SetTimerPeriod(LPTMR0, busClock / 1000000 - 1);
|
||||
/* Set interrupt handler */
|
||||
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)lptmr_isr);
|
||||
NVIC_EnableIRQ(LPTMR0_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void pit_isr(void)
|
||||
{
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_2);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_3);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -47,7 +57,7 @@ void us_ticker_init(void)
|
|||
//Ticker
|
||||
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
|
||||
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
|
||||
NVIC_SetVector(PIT0_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(PIT0_IRQn, (uint32_t)pit_isr);
|
||||
NVIC_EnableIRQ(PIT0_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void pit_isr(void)
|
||||
{
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_2);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_3);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -47,7 +57,7 @@ void us_ticker_init(void)
|
|||
//Ticker
|
||||
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
|
||||
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
|
||||
NVIC_EnableIRQ(PIT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
void us_ticker_init(void) {
|
||||
static void lptmr_isr(void)
|
||||
{
|
||||
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
|
||||
LPTMR_StopTimer(LPTMR0);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -55,12 +64,13 @@ void us_ticker_init(void) {
|
|||
busClock = CLOCK_GetFreq(kCLOCK_McgInternalRefClk);
|
||||
LPTMR_SetTimerPeriod(LPTMR0, busClock / 1000000 - 1);
|
||||
/* Set interrupt handler */
|
||||
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(LPTMR0_IRQn, (uint32_t)lptmr_isr);
|
||||
NVIC_EnableIRQ(LPTMR0_IRQn);
|
||||
}
|
||||
|
||||
|
||||
uint32_t us_ticker_read() {
|
||||
uint32_t us_ticker_read()
|
||||
{
|
||||
if (!us_ticker_inited) {
|
||||
us_ticker_init();
|
||||
}
|
||||
|
|
@ -68,15 +78,18 @@ uint32_t us_ticker_read() {
|
|||
return ~(PIT_GetCurrentTimerCount(PIT, kPIT_Chnl_1));
|
||||
}
|
||||
|
||||
void us_ticker_disable_interrupt(void) {
|
||||
void us_ticker_disable_interrupt(void)
|
||||
{
|
||||
LPTMR_DisableInterrupts(LPTMR0, kLPTMR_TimerInterruptEnable);
|
||||
}
|
||||
|
||||
void us_ticker_clear_interrupt(void) {
|
||||
void us_ticker_clear_interrupt(void)
|
||||
{
|
||||
LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
|
||||
}
|
||||
|
||||
void us_ticker_set_interrupt(timestamp_t timestamp) {
|
||||
void us_ticker_set_interrupt(timestamp_t timestamp)
|
||||
{
|
||||
uint32_t delta = timestamp - us_ticker_read();
|
||||
LPTMR_StopTimer(LPTMR0);
|
||||
LPTMR_SetTimerPeriod(LPTMR0, (uint32_t)delta);
|
||||
|
|
|
|||
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void pit_isr(void)
|
||||
{
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_2);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_3);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -47,7 +57,7 @@ void us_ticker_init(void)
|
|||
//Ticker
|
||||
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
|
||||
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
|
||||
NVIC_EnableIRQ(PIT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void pit_isr(void)
|
||||
{
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_2);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_3);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -47,7 +57,7 @@ void us_ticker_init(void)
|
|||
//Ticker
|
||||
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
|
||||
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
|
||||
NVIC_EnableIRQ(PIT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
static int us_ticker_inited = 0;
|
||||
|
||||
static void pit_isr(void)
|
||||
{
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK);
|
||||
PIT_ClearStatusFlags(PIT, kPIT_Chnl_2, PIT_TFLG_TIF_MASK);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_2);
|
||||
PIT_StopTimer(PIT, kPIT_Chnl_3);
|
||||
|
||||
us_ticker_irq_handler();
|
||||
}
|
||||
|
||||
void us_ticker_init(void)
|
||||
{
|
||||
if (us_ticker_inited) {
|
||||
|
|
@ -47,7 +57,7 @@ void us_ticker_init(void)
|
|||
//Ticker
|
||||
PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1);
|
||||
PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_SetVector(PIT3_IRQn, (uint32_t)pit_isr);
|
||||
NVIC_EnableIRQ(PIT3_IRQn);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue