void vPortClearInterruptMask( uint32_t ulNewMaskValue ) { if( ulNewMaskValue == pdFALSE ) { portCLEAR_INTERRUPT_MASK(); } }
void vPortClearInterruptMask( unsigned long ulNewMaskValue ) { if( ulNewMaskValue == pdFALSE ) { portCLEAR_INTERRUPT_MASK(); } }
void vPortTickHandler(void) { #if configUSE_TICKLESS_IDLE == 1 TICK_INTERRUPT_FLAG_SET(); #endif portSET_INTERRUPT_MASK(); /* disable interrupts */ if (xTaskIncrementTick()!=pdFALSE) { /* increment tick count */ taskYIELD(); } portCLEAR_INTERRUPT_MASK(); /* enable interrupts again */ }
void vPortExitCritical( void ) { if( ulCriticalNesting > portNO_CRITICAL_NESTING ) { /* Decrement the nesting count as the critical section is being exited. */ ulCriticalNesting--; /* If the nesting level has reached zero then all interrupt priorities must be re-enabled. */ if( ulCriticalNesting == portNO_CRITICAL_NESTING ) { /* Critical nesting has reached zero so all interrupt priorities should be unmasked. */ portCLEAR_INTERRUPT_MASK(); } } }
void vPortTickHandler(void) { /* this is how we get here: RTOSTICKLDD1_Interrupt: push {r4, lr} ... RTOSTICKLDD1_OnCounterRestart bl RTOSTICKLDD1_OnCounterRestart -> push {r4,lr} pop {r4, lr} mov r4,r0 bl vPortTickHandler pop {r4,pc} */ #if configUSE_TICKLESS_IDLE == 1 TICK_INTERRUPT_FLAG_SET(); #endif portSET_INTERRUPT_MASK(); /* disable interrupts */ if (xTaskIncrementTick()!=pdFALSE) { /* increment tick count */ taskYIELD(); } portCLEAR_INTERRUPT_MASK(); /* enable interrupts again */ }
void FreeRTOS_Tick_Handler( void ) { /* Set interrupt mask before altering scheduler structures. The tick handler runs at the lowest priority, so interrupts cannot already be masked, so there is no need to save and restore the current mask value. */ __disable_irq(); portICCPMR_PRIORITY_MASK_REGISTER = ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ); __asm( "DSB \n" "ISB \n" ); __enable_irq(); /* Increment the RTOS tick. */ if( xTaskIncrementTick() != pdFALSE ) { ulPortYieldRequired = pdTRUE; } /* Ensure all interrupt priorities are active again. */ portCLEAR_INTERRUPT_MASK(); }