mirror of https://github.com/ARMmbed/mbed-os.git
switch to timer 2 due to conflict
parent
7f23b6df0f
commit
a04102ae39
|
|
@ -162,10 +162,10 @@ static uint32_t palTimerGetCurrentTime(void)
|
|||
/* Read and return the captured count value from capture register 1 */
|
||||
return PalRtcCounterGet();
|
||||
#else
|
||||
/* Capture current TIMER1 count to capture register 1 */
|
||||
NRF_TIMER1->TASKS_CAPTURE[TIMER_CHANNEL_READ_TICK] = 1;
|
||||
/* Capture current TIMER2 count to capture register 1 */
|
||||
NRF_TIMER2->TASKS_CAPTURE[TIMER_CHANNEL_READ_TICK] = 1;
|
||||
/* Read and return the captured count value from capture register 1 */
|
||||
return NRF_TIMER1->CC[TIMER_CHANNEL_READ_TICK];
|
||||
return NRF_TIMER2->CC[TIMER_CHANNEL_READ_TICK];
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -192,28 +192,28 @@ void PalTimerInit(PalTimerCompCback_t expCback)
|
|||
PalRtcIrqRegister(RTC_CHANNEL_START_BB, palTimerRtcIrqHandler);
|
||||
#else
|
||||
/* Give scheduler timer the highest priority. */
|
||||
NVIC_SetPriority(TIMER1_IRQn, 0); /* highest priority */
|
||||
NVIC_DisableIRQ(TIMER1_IRQn);
|
||||
NVIC_SetPriority(TIMER2_IRQn, 0); /* highest priority */
|
||||
NVIC_DisableIRQ(TIMER2_IRQn);
|
||||
|
||||
/* stop timer if it was somehow running (timer must be stopped for configuration) */
|
||||
NRF_TIMER1->TASKS_STOP = 1;
|
||||
NRF_TIMER2->TASKS_STOP = 1;
|
||||
|
||||
/* clear timer to zero count */
|
||||
NRF_TIMER1->TASKS_CLEAR = 1;
|
||||
NRF_TIMER2->TASKS_CLEAR = 1;
|
||||
|
||||
/* configure timer */
|
||||
NRF_TIMER1->MODE = TIMER_MODE_MODE_Timer;
|
||||
NRF_TIMER1->BITMODE = TIMER_BITMODE_BITMODE_32Bit;
|
||||
NRF_TIMER1->PRESCALER = PAL_TIMER_1MHZ_PRESCALER; /* f = 16MHz / (2 ^ TIMER_PRESCALER) */
|
||||
NRF_TIMER2->MODE = TIMER_MODE_MODE_Timer;
|
||||
NRF_TIMER2->BITMODE = TIMER_BITMODE_BITMODE_32Bit;
|
||||
NRF_TIMER2->PRESCALER = PAL_TIMER_1MHZ_PRESCALER; /* f = 16MHz / (2 ^ TIMER_PRESCALER) */
|
||||
|
||||
/* timer1 is a free running clock. */
|
||||
NRF_TIMER1->TASKS_START = 1;
|
||||
NRF_TIMER2->TASKS_START = 1;
|
||||
|
||||
/* Clear out and enable timer1 interrupt at system level. */
|
||||
NRF_TIMER1->INTENCLR = 0xFFFFFFFF;
|
||||
NRF_TIMER1->EVENTS_COMPARE[TIMER_CHANNEL_START_BB] = 0;
|
||||
NVIC_ClearPendingIRQ(TIMER1_IRQn);
|
||||
NVIC_EnableIRQ(TIMER1_IRQn);
|
||||
NRF_TIMER2->INTENCLR = 0xFFFFFFFF;
|
||||
NRF_TIMER2->EVENTS_COMPARE[TIMER_CHANNEL_START_BB] = 0;
|
||||
NVIC_ClearPendingIRQ(TIMER2_IRQn);
|
||||
NVIC_EnableIRQ(TIMER2_IRQn);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
@ -231,10 +231,10 @@ void PalTimerDeInit(void)
|
|||
{
|
||||
#if SCH_TIMER_REQUIRED == TRUE
|
||||
#if BB_CLK_RATE_HZ != 32768
|
||||
NVIC_DisableIRQ(TIMER1_IRQn);
|
||||
NVIC_DisableIRQ(TIMER2_IRQn);
|
||||
|
||||
/* stop timer */
|
||||
NRF_TIMER1->TASKS_STOP = 1;
|
||||
NRF_TIMER2->TASKS_STOP = 1;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
@ -284,13 +284,13 @@ void PalTimerStart(uint32_t expTimeUsec)
|
|||
uint32_t startTimeTick = palTimerGetCurrentTime() + PAL_TIMER_US_TO_TICKS(expTimeUsec);
|
||||
|
||||
/* Clear pending events. */
|
||||
NRF_TIMER1->EVENTS_COMPARE[TIMER_CHANNEL_START_BB] = 0;
|
||||
NRF_TIMER2->EVENTS_COMPARE[TIMER_CHANNEL_START_BB] = 0;
|
||||
|
||||
/* Set compare value. */
|
||||
NRF_TIMER1->CC[TIMER_CHANNEL_START_BB] = startTimeTick;
|
||||
NRF_TIMER2->CC[TIMER_CHANNEL_START_BB] = startTimeTick;
|
||||
|
||||
/* Enable timer1 interrupt source for CC[0]. */
|
||||
NRF_TIMER1->INTENSET = TIMER_INTENSET_COMPARE0_Msk;
|
||||
NRF_TIMER2->INTENSET = TIMER_INTENSET_COMPARE0_Msk;
|
||||
#endif
|
||||
|
||||
palTimerCb.compareVal = startTimeTick;
|
||||
|
|
@ -317,7 +317,7 @@ void PalTimerStop()
|
|||
PalRtcDisableCompareIrq(RTC_CHANNEL_START_BB);
|
||||
#else
|
||||
/* Disable this interrupt */
|
||||
NRF_TIMER1->INTENCLR = TIMER_INTENCLR_COMPARE0_Msk;
|
||||
NRF_TIMER2->INTENCLR = TIMER_INTENCLR_COMPARE0_Msk;
|
||||
#endif
|
||||
|
||||
palTimerCb.state = PAL_TIMER_STATE_READY;
|
||||
|
|
@ -328,10 +328,10 @@ void PalTimerStop()
|
|||
|
||||
/*************************************************************************************************/
|
||||
/*!
|
||||
* \brief TIMER1 interrupt handler dedicated to scheduler timer.
|
||||
* \brief TIMER2 interrupt handler dedicated to scheduler timer.
|
||||
*/
|
||||
/*************************************************************************************************/
|
||||
void TIMER1_IRQHandler(void)
|
||||
void TIMER2_IRQHandler(void)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
nrf_gpio_pin_set(PAL_TIMER_DEBUG_0_PIN);
|
||||
|
|
@ -339,14 +339,14 @@ void TIMER1_IRQHandler(void)
|
|||
|
||||
PAL_TIMER_CHECK(palTimerCb.state == PAL_TIMER_STATE_BUSY);
|
||||
/* Check hardware status */
|
||||
PAL_TIMER_CHECK(NRF_TIMER1->EVENTS_COMPARE[TIMER_CHANNEL_START_BB]);
|
||||
PAL_TIMER_CHECK(NRF_TIMER1->CC[TIMER_CHANNEL_START_BB] == palTimerCb.compareVal);
|
||||
PAL_TIMER_CHECK(NRF_TIMER1->INTENSET == TIMER_INTENSET_COMPARE0_Msk);
|
||||
PAL_TIMER_CHECK(NRF_TIMER2->EVENTS_COMPARE[TIMER_CHANNEL_START_BB]);
|
||||
PAL_TIMER_CHECK(NRF_TIMER2->CC[TIMER_CHANNEL_START_BB] == palTimerCb.compareVal);
|
||||
PAL_TIMER_CHECK(NRF_TIMER2->INTENSET == TIMER_INTENSET_COMPARE0_Msk);
|
||||
|
||||
/* Callback function could restart timer1. However, we blindly stop timer1 first. */
|
||||
NRF_TIMER1->INTENCLR = TIMER_INTENCLR_COMPARE0_Msk;
|
||||
NRF_TIMER2->INTENCLR = TIMER_INTENCLR_COMPARE0_Msk;
|
||||
/* Clear event again just in case. */
|
||||
NRF_TIMER1->EVENTS_COMPARE[TIMER_CHANNEL_START_BB] = 0;
|
||||
NRF_TIMER2->EVENTS_COMPARE[TIMER_CHANNEL_START_BB] = 0;
|
||||
|
||||
palTimerCb.state = PAL_TIMER_STATE_READY;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue