Update to allow interrupt nesting (not yet complete).

This commit is contained in:
Richard Barry 2008-08-08 15:52:41 +00:00
parent 181889d6b1
commit 431d1c009d
3 changed files with 10 additions and 15 deletions

View file

@ -158,20 +158,16 @@ void vPortExitCritical( void )
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
unsigned portBASE_TYPE uxPortSetInterruptMaskFromISR( void ) void vPortYieldHandler( void )
{ {
return 0; unsigned portLONG ulSavedInterruptMask;
}
/*-----------------------------------------------------------*/
void vPortClearInterruptMaskFromISR( unsigned portBASE_TYPE uxSavedInterruptMask )
{
}
void vPortClearYield( void )
{
/* -32 as we are using the high word of the 64bit mask. */ /* -32 as we are using the high word of the 64bit mask. */
MCF_INTC0_INTFRCH &= ~( 1UL << ( configYIELD_INTERRUPT_VECTOR - 32UL ) ); MCF_INTC0_INTFRCH &= ~( 1UL << ( configYIELD_INTERRUPT_VECTOR - 32UL ) );
ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();
vTaskSwitchContext();
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulSavedInterruptMask );
} }

View file

@ -73,8 +73,7 @@ ulPortSetIPL:
/* Yield interrupt. */ /* Yield interrupt. */
__cs3_isr_interrupt_127: __cs3_isr_interrupt_127:
portSAVE_CONTEXT portSAVE_CONTEXT
jsr vPortClearYield jsr vPortYieldHandler
jsr vTaskSwitchContext
portRESTORE_CONTEXT portRESTORE_CONTEXT
/********************************************************************/ /********************************************************************/

View file

@ -88,7 +88,7 @@ extern "C" {
#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) #define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
unsigned portLONG ulPortSetIPL( unsigned portLONG ); unsigned portLONG ulPortSetIPL( unsigned portLONG );
#define portDISABLE_INTERRUPTS() ulPortSetIPL( configKERNEL_INTERRUPT_PRIORITY ) #define portDISABLE_INTERRUPTS() ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
#define portENABLE_INTERRUPTS() ulPortSetIPL( 0 ) #define portENABLE_INTERRUPTS() ulPortSetIPL( 0 )
@ -99,8 +99,8 @@ extern void vPortExitCritical( void );
extern unsigned portBASE_TYPE uxPortSetInterruptMaskFromISR( void ); extern unsigned portBASE_TYPE uxPortSetInterruptMaskFromISR( void );
extern void vPortClearInterruptMaskFromISR( unsigned portBASE_TYPE ); extern void vPortClearInterruptMaskFromISR( unsigned portBASE_TYPE );
#define portSET_INTERRUPT_MASK_FROM_ISR() uxPortSetInterruptMaskFromISR() #define portSET_INTERRUPT_MASK_FROM_ISR() ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister ) vPortClearInterruptMaskFromISR( uxSavedStatusRegister ) #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister ) ulPortSetIPL( uxSavedStatusRegister )
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/