/************************************************************************************************** * @fn macBackoffTimerCompareIsr * * @brief Interrupt service routine that fires when the backoff count is equal * to the trigger count. * * @param none * * @return none ************************************************************************************************** */ void macBackoffTimerCompareIsr(void) { uint8 oldState; halIntState_t s; HAL_ENTER_CRITICAL_SECTION(s); oldState = compareState; /* if compare is a rollover, set count to zero */ if (oldState & COMPARE_STATE_ROLLOVER_BV) { MAC_RADIO_BACKOFF_SET_COUNT(0); macBackoffTimerRolloverCallback(); } /* if compare is a trigger, reset for rollover and run the trigger callback */ if (oldState & COMPARE_STATE_TRIGGER_BV) { compareState = COMPARE_STATE_ROLLOVER; MAC_RADIO_BACKOFF_SET_COMPARE(backoffTimerRollover); HAL_EXIT_CRITICAL_SECTION(s); macBackoffTimerTriggerCallback(); } else if (oldState == COMPARE_STATE_ROLLOVER_AND_ARM_TRIGGER) { compareState = COMPARE_STATE_TRIGGER; MAC_RADIO_BACKOFF_SET_COMPARE(backoffTimerTrigger); HAL_EXIT_CRITICAL_SECTION(s); } else { HAL_EXIT_CRITICAL_SECTION(s); } }
/************************************************************************************************** * @fn macBackoffTimerCompareIsr * * @brief Interrupt service routine that fires when the backoff count is equal * to the trigger count. * * @param none * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macBackoffTimerCompareIsr(void) { halIntState_t s; DBG_PRINT1(DBGSYS, "macRatChanB Compare ISR, Backoff RAT count = %u", MAC_RADIO_BACKOFF_COUNT()); macBackoffTimerTriggerCallback(); HAL_ENTER_CRITICAL_SECTION(s); MAC_BACKOFF_TIMER_UPDATE_WAKEUP(); HAL_EXIT_CRITICAL_SECTION(s); }
/************************************************************************************************** * @fn macBackoffTimerSetTrigger * * @brief Sets the trigger count for the backoff counter. A callback is exectuted when * the backoff count reaches the trigger * * @param triggerBackoff - backoff count for new trigger * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macBackoffTimerSetTrigger(uint32 triggerBackoff) { halIntState_t s; MAC_ASSERT(triggerBackoff < backoffTimerRollover); /* trigger backoff must be less than rollover backoff */ HAL_ENTER_CRITICAL_SECTION(s); backoffTimerTrigger = triggerBackoff; MAC_RADIO_BACKOFF_SET_COMPARE(triggerBackoff); if (triggerBackoff == MAC_RADIO_BACKOFF_COUNT()) { /* Clear the interrupt and fire it manually */ MAC_RADIO_BACKOFF_COMPARE_CLEAR_INTERRUPT(); HAL_EXIT_CRITICAL_SECTION(s); macBackoffTimerTriggerCallback(); } else { HAL_EXIT_CRITICAL_SECTION(s); } }
/************************************************************************************************** * @fn macBackoffTimerCompareIsr * * @brief Interrupt service routine that fires when the backoff count is equal * to the trigger count. * * @param none * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macBackoffTimerCompareIsr(void) { macBackoffTimerTriggerCallback(); }