mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-06-06 20:39:04 -04:00
Replace the CLZ function with a CLZ intrinsic in the Cortex-R4 port layer.
Add EDS support in the PIC24 port layer. Remove unnecessary EHB instructions from PIC32 port. In the PIC32 port assembly code, replace the &= code with a single ins instruction.
This commit is contained in:
parent
b5cf299df1
commit
4e7b460eaf
|
@ -233,15 +233,6 @@ vPortPreemptiveTick:
|
||||||
; Restore the context of the task selected to execute.
|
; Restore the context of the task selected to execute.
|
||||||
portRESTORE_CONTEXT
|
portRESTORE_CONTEXT
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
.def ulPortCountLeadingZeros
|
|
||||||
|
|
||||||
ulPortCountLeadingZeros:
|
|
||||||
|
|
||||||
CLZ R0, R0
|
|
||||||
BX LR
|
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
.if (__TI_VFP_SUPPORT__)
|
.if (__TI_VFP_SUPPORT__)
|
||||||
|
|
|
@ -122,9 +122,6 @@ extern void vPortYield( void );
|
||||||
/* Architecture specific optimisations. */
|
/* Architecture specific optimisations. */
|
||||||
#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
|
#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
|
||||||
|
|
||||||
/* Generic helper function. */
|
|
||||||
unsigned long ulPortCountLeadingZeros( unsigned long ulBitmap );
|
|
||||||
|
|
||||||
/* Check the configuration. */
|
/* Check the configuration. */
|
||||||
#if( configMAX_PRIORITIES > 32 )
|
#if( configMAX_PRIORITIES > 32 )
|
||||||
#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
|
#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
|
||||||
|
@ -136,7 +133,7 @@ extern void vPortYield( void );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31 - ulPortCountLeadingZeros( ( uxReadyPriorities ) ) )
|
#define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31 - __clz( ( uxReadyPriorities ) ) )
|
||||||
|
|
||||||
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
|
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
|
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||||
|
|
||||||
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
|
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
|
||||||
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
FreeRTOS WEB site.
|
FreeRTOS WEB site.
|
||||||
|
|
||||||
1 tab == 4 spaces!
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
* *
|
* *
|
||||||
* Having a problem? Start by reading the FAQ "My application does *
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
@ -52,17 +52,17 @@
|
||||||
* *
|
* *
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
|
||||||
|
|
||||||
http://www.FreeRTOS.org - Documentation, training, latest versions, license
|
http://www.FreeRTOS.org - Documentation, training, latest versions, license
|
||||||
and contact details.
|
and contact details.
|
||||||
|
|
||||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||||
|
|
||||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||||
the code with commercial support, indemnification, and middleware, under
|
the code with commercial support, indemnification, and middleware, under
|
||||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||||
provide a safety engineered and independently SIL3 certified version under
|
provide a safety engineered and independently SIL3 certified version under
|
||||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
#define portTIMER_PRESCALE 8
|
#define portTIMER_PRESCALE 8
|
||||||
#define portINITIAL_SR 0
|
#define portINITIAL_SR 0
|
||||||
|
|
||||||
/* Defined for backward compatability with project created prior to
|
/* Defined for backward compatability with project created prior to
|
||||||
FreeRTOS.org V4.3.0. */
|
FreeRTOS.org V4.3.0. */
|
||||||
#ifndef configKERNEL_INTERRUPT_PRIORITY
|
#ifndef configKERNEL_INTERRUPT_PRIORITY
|
||||||
#define configKERNEL_INTERRUPT_PRIORITY 1
|
#define configKERNEL_INTERRUPT_PRIORITY 1
|
||||||
|
@ -103,25 +103,46 @@ unsigned portBASE_TYPE uxCriticalNesting = 0xef;
|
||||||
|
|
||||||
#ifdef MPLAB_PIC24_PORT
|
#ifdef MPLAB_PIC24_PORT
|
||||||
|
|
||||||
#define portRESTORE_CONTEXT() \
|
#ifdef __HAS_EDS__
|
||||||
asm volatile( "MOV _pxCurrentTCB, W0 \n" /* Restore the stack pointer for the task. */ \
|
#define portRESTORE_CONTEXT() \
|
||||||
"MOV [W0], W15 \n" \
|
asm volatile( "MOV _pxCurrentTCB, W0 \n" /* Restore the stack pointer for the task. */ \
|
||||||
"POP W0 \n" /* Restore the critical nesting counter for the task. */ \
|
"MOV [W0], W15 \n" \
|
||||||
"MOV W0, _uxCriticalNesting \n" \
|
"POP W0 \n" /* Restore the critical nesting counter for the task. */ \
|
||||||
"POP PSVPAG \n" \
|
"MOV W0, _uxCriticalNesting \n" \
|
||||||
"POP CORCON \n" \
|
"POP DSWPAG \n" \
|
||||||
"POP TBLPAG \n" \
|
"POP DSRPAG \n" \
|
||||||
"POP RCOUNT \n" /* Restore the registers from the stack. */ \
|
"POP CORCON \n" \
|
||||||
"POP W14 \n" \
|
"POP TBLPAG \n" \
|
||||||
"POP.D W12 \n" \
|
"POP RCOUNT \n" /* Restore the registers from the stack. */ \
|
||||||
"POP.D W10 \n" \
|
"POP W14 \n" \
|
||||||
"POP.D W8 \n" \
|
"POP.D W12 \n" \
|
||||||
"POP.D W6 \n" \
|
"POP.D W10 \n" \
|
||||||
"POP.D W4 \n" \
|
"POP.D W8 \n" \
|
||||||
"POP.D W2 \n" \
|
"POP.D W6 \n" \
|
||||||
"POP.D W0 \n" \
|
"POP.D W4 \n" \
|
||||||
"POP SR " );
|
"POP.D W2 \n" \
|
||||||
|
"POP.D W0 \n" \
|
||||||
|
"POP SR " );
|
||||||
|
#else /* __HAS_EDS__ */
|
||||||
|
#define portRESTORE_CONTEXT() \
|
||||||
|
asm volatile( "MOV _pxCurrentTCB, W0 \n" /* Restore the stack pointer for the task. */ \
|
||||||
|
"MOV [W0], W15 \n" \
|
||||||
|
"POP W0 \n" /* Restore the critical nesting counter for the task. */ \
|
||||||
|
"MOV W0, _uxCriticalNesting \n" \
|
||||||
|
"POP PSVPAG \n" \
|
||||||
|
"POP CORCON \n" \
|
||||||
|
"POP TBLPAG \n" \
|
||||||
|
"POP RCOUNT \n" /* Restore the registers from the stack. */ \
|
||||||
|
"POP W14 \n" \
|
||||||
|
"POP.D W12 \n" \
|
||||||
|
"POP.D W10 \n" \
|
||||||
|
"POP.D W8 \n" \
|
||||||
|
"POP.D W6 \n" \
|
||||||
|
"POP.D W4 \n" \
|
||||||
|
"POP.D W2 \n" \
|
||||||
|
"POP.D W0 \n" \
|
||||||
|
"POP SR " );
|
||||||
|
#endif /* __HAS_EDS__ */
|
||||||
#endif /* MPLAB_PIC24_PORT */
|
#endif /* MPLAB_PIC24_PORT */
|
||||||
|
|
||||||
#ifdef MPLAB_DSPIC_PORT
|
#ifdef MPLAB_DSPIC_PORT
|
||||||
|
@ -163,15 +184,15 @@ unsigned portBASE_TYPE uxCriticalNesting = 0xef;
|
||||||
*/
|
*/
|
||||||
static void prvSetupTimerInterrupt( void );
|
static void prvSetupTimerInterrupt( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See header file for description.
|
* See header file for description.
|
||||||
*/
|
*/
|
||||||
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
||||||
{
|
{
|
||||||
unsigned short usCode;
|
unsigned short usCode;
|
||||||
portBASE_TYPE i;
|
portBASE_TYPE i;
|
||||||
|
|
||||||
const portSTACK_TYPE xInitialStack[] =
|
const portSTACK_TYPE xInitialStack[] =
|
||||||
{
|
{
|
||||||
0x1111, /* W1 */
|
0x1111, /* W1 */
|
||||||
0x2222, /* W2 */
|
0x2222, /* W2 */
|
||||||
|
@ -235,8 +256,16 @@ const portSTACK_TYPE xInitialStack[] =
|
||||||
|
|
||||||
*pxTopOfStack = CORCON;
|
*pxTopOfStack = CORCON;
|
||||||
pxTopOfStack++;
|
pxTopOfStack++;
|
||||||
*pxTopOfStack = PSVPAG;
|
|
||||||
pxTopOfStack++;
|
#if defined(__HAS_EDS__)
|
||||||
|
*pxTopOfStack = DSRPAG;
|
||||||
|
pxTopOfStack++;
|
||||||
|
*pxTopOfStack = DSWPAG;
|
||||||
|
pxTopOfStack++;
|
||||||
|
#else /* __HAS_EDS__ */
|
||||||
|
*pxTopOfStack = PSVPAG;
|
||||||
|
pxTopOfStack++;
|
||||||
|
#endif /* __HAS_EDS__ */
|
||||||
|
|
||||||
/* Finally the critical nesting depth. */
|
/* Finally the critical nesting depth. */
|
||||||
*pxTopOfStack = 0x00;
|
*pxTopOfStack = 0x00;
|
||||||
|
@ -249,7 +278,7 @@ const portSTACK_TYPE xInitialStack[] =
|
||||||
portBASE_TYPE xPortStartScheduler( void )
|
portBASE_TYPE xPortStartScheduler( void )
|
||||||
{
|
{
|
||||||
/* Setup a timer for the tick ISR. */
|
/* Setup a timer for the tick ISR. */
|
||||||
prvSetupTimerInterrupt();
|
prvSetupTimerInterrupt();
|
||||||
|
|
||||||
/* Restore the context of the first task to run. */
|
/* Restore the context of the first task to run. */
|
||||||
portRESTORE_CONTEXT();
|
portRESTORE_CONTEXT();
|
||||||
|
@ -265,7 +294,7 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the scheduler for the PIC port will get stopped
|
/* It is unlikely that the scheduler for the PIC port will get stopped
|
||||||
once running. If required disable the tick interrupt here, then return
|
once running. If required disable the tick interrupt here, then return
|
||||||
to xPortStartScheduler(). */
|
to xPortStartScheduler(). */
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
|
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||||
|
|
||||||
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
|
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
|
||||||
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
FreeRTOS WEB site.
|
FreeRTOS WEB site.
|
||||||
|
|
||||||
1 tab == 4 spaces!
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
* *
|
* *
|
||||||
* Having a problem? Start by reading the FAQ "My application does *
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
@ -52,17 +52,17 @@
|
||||||
* *
|
* *
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
|
||||||
|
|
||||||
http://www.FreeRTOS.org - Documentation, training, latest versions, license
|
http://www.FreeRTOS.org - Documentation, training, latest versions, license
|
||||||
and contact details.
|
and contact details.
|
||||||
|
|
||||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||||
|
|
||||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||||
the code with commercial support, indemnification, and middleware, under
|
the code with commercial support, indemnification, and middleware, under
|
||||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||||
provide a safety engineered and independently SIL3 certified version under
|
provide a safety engineered and independently SIL3 certified version under
|
||||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -86,9 +86,14 @@ _vPortYield:
|
||||||
PUSH W14
|
PUSH W14
|
||||||
PUSH RCOUNT
|
PUSH RCOUNT
|
||||||
PUSH TBLPAG
|
PUSH TBLPAG
|
||||||
|
|
||||||
PUSH CORCON
|
PUSH CORCON
|
||||||
PUSH PSVPAG
|
#ifdef __HAS_EDS__
|
||||||
|
PUSH DSRPAG
|
||||||
|
PUSH DSWPAG
|
||||||
|
#else
|
||||||
|
PUSH PSVPAG
|
||||||
|
#endif /* __HAS_EDS__ */
|
||||||
MOV _uxCriticalNesting, W0 /* Save the critical nesting counter for the task. */
|
MOV _uxCriticalNesting, W0 /* Save the critical nesting counter for the task. */
|
||||||
PUSH W0
|
PUSH W0
|
||||||
MOV _pxCurrentTCB, W0 /* Save the new top of stack into the TCB. */
|
MOV _pxCurrentTCB, W0 /* Save the new top of stack into the TCB. */
|
||||||
|
@ -100,7 +105,12 @@ _vPortYield:
|
||||||
MOV [W0], W15
|
MOV [W0], W15
|
||||||
POP W0 /* Restore the critical nesting counter for the task. */
|
POP W0 /* Restore the critical nesting counter for the task. */
|
||||||
MOV W0, _uxCriticalNesting
|
MOV W0, _uxCriticalNesting
|
||||||
|
#ifdef __HAS_EDS__
|
||||||
|
POP DSWPAG
|
||||||
|
POP DSRPAG
|
||||||
|
#else
|
||||||
POP PSVPAG
|
POP PSVPAG
|
||||||
|
#endif /* __HAS_EDS__ */
|
||||||
POP CORCON
|
POP CORCON
|
||||||
POP TBLPAG
|
POP TBLPAG
|
||||||
POP RCOUNT /* Restore the registers from the stack. */
|
POP RCOUNT /* Restore the registers from the stack. */
|
||||||
|
|
|
@ -224,7 +224,6 @@
|
||||||
|
|
||||||
mtc0 k0, _CP0_STATUS
|
mtc0 k0, _CP0_STATUS
|
||||||
mtc0 k1, _CP0_EPC
|
mtc0 k1, _CP0_EPC
|
||||||
ehb
|
|
||||||
eret
|
eret
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
|
FreeRTOS V7.3.0 - Copyright (C) 2012 Real Time Engineers Ltd.
|
||||||
|
|
||||||
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
|
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
|
||||||
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
FreeRTOS WEB site.
|
FreeRTOS WEB site.
|
||||||
|
|
||||||
1 tab == 4 spaces!
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
* *
|
* *
|
||||||
* Having a problem? Start by reading the FAQ "My application does *
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
@ -52,33 +52,33 @@
|
||||||
* *
|
* *
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
|
||||||
|
|
||||||
http://www.FreeRTOS.org - Documentation, training, latest versions, license
|
http://www.FreeRTOS.org - Documentation, training, latest versions, license
|
||||||
and contact details.
|
and contact details.
|
||||||
|
|
||||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
including FreeRTOS+Trace - an indispensable productivity tool.
|
including FreeRTOS+Trace - an indispensable productivity tool.
|
||||||
|
|
||||||
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
Real Time Engineers ltd license FreeRTOS to High Integrity Systems, who sell
|
||||||
the code with commercial support, indemnification, and middleware, under
|
the code with commercial support, indemnification, and middleware, under
|
||||||
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
the OpenRTOS brand: http://www.OpenRTOS.com. High Integrity Systems also
|
||||||
provide a safety engineered and independently SIL3 certified version under
|
provide a safety engineered and independently SIL3 certified version under
|
||||||
the SafeRTOS brand: http://www.SafeRTOS.com.
|
the SafeRTOS brand: http://www.SafeRTOS.com.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <p32xxxx.h>
|
#include <p32xxxx.h>
|
||||||
#include <sys/asm.h>
|
#include <sys/asm.h>
|
||||||
#include "ISR_Support.h"
|
#include "ISR_Support.h"
|
||||||
|
|
||||||
|
|
||||||
.set nomips16
|
.set nomips16
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
|
||||||
.extern pxCurrentTCB
|
.extern pxCurrentTCB
|
||||||
.extern vTaskSwitchContext
|
.extern vTaskSwitchContext
|
||||||
.extern vPortIncrementTick
|
.extern vPortIncrementTick
|
||||||
.extern xISRStackTop
|
.extern xISRStackTop
|
||||||
|
|
||||||
.global vPortStartFirstTask
|
.global vPortStartFirstTask
|
||||||
.global vPortYieldISR
|
.global vPortYieldISR
|
||||||
.global vPortTickInterruptHandler
|
.global vPortTickInterruptHandler
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.set noat
|
.set noat
|
||||||
.ent vPortTickInterruptHandler
|
.ent vPortTickInterruptHandler
|
||||||
|
|
||||||
vPortTickInterruptHandler:
|
vPortTickInterruptHandler:
|
||||||
|
|
||||||
portSAVE_CONTEXT
|
portSAVE_CONTEXT
|
||||||
|
@ -125,8 +125,8 @@ vPortStartFirstTask:
|
||||||
|
|
||||||
vPortYieldISR:
|
vPortYieldISR:
|
||||||
|
|
||||||
/* Make room for the context. First save the current status so we can
|
/* Make room for the context. First save the current status so we can
|
||||||
manipulate it, and the cause and EPC registers so we capture their
|
manipulate it, and the cause and EPC registers so we capture their
|
||||||
original values in case of interrupt nesting. */
|
original values in case of interrupt nesting. */
|
||||||
mfc0 k0, _CP0_CAUSE
|
mfc0 k0, _CP0_CAUSE
|
||||||
addiu sp, sp, -portCONTEXT_SIZE
|
addiu sp, sp, -portCONTEXT_SIZE
|
||||||
|
@ -216,14 +216,13 @@ vPortYieldISR:
|
||||||
ins s7, $0, 10, 6
|
ins s7, $0, 10, 6
|
||||||
ori s6, s7, ( configMAX_SYSCALL_INTERRUPT_PRIORITY << 10 ) | 1
|
ori s6, s7, ( configMAX_SYSCALL_INTERRUPT_PRIORITY << 10 ) | 1
|
||||||
|
|
||||||
/* This mtc0 re-enables interrupts, but only above
|
/* This mtc0 re-enables interrupts, but only above
|
||||||
configMAX_SYSCALL_INTERRUPT_PRIORITY. */
|
configMAX_SYSCALL_INTERRUPT_PRIORITY. */
|
||||||
mtc0 s6, _CP0_STATUS
|
mtc0 s6, _CP0_STATUS
|
||||||
|
|
||||||
/* Clear the software interrupt in the core. */
|
/* Clear the software interrupt in the core. */
|
||||||
mfc0 s6, _CP0_CAUSE
|
mfc0 s6, _CP0_CAUSE
|
||||||
addiu s4,zero,-257
|
ins s6, zero, 8, 1
|
||||||
and s6, s6, s4
|
|
||||||
mtc0 s6, _CP0_CAUSE
|
mtc0 s6, _CP0_CAUSE
|
||||||
|
|
||||||
/* Clear the interrupt in the interrupt controller. */
|
/* Clear the interrupt in the interrupt controller. */
|
||||||
|
@ -296,10 +295,9 @@ vPortYieldISR:
|
||||||
/* Remove stack frame. */
|
/* Remove stack frame. */
|
||||||
addiu sp, sp, portCONTEXT_SIZE
|
addiu sp, sp, portCONTEXT_SIZE
|
||||||
|
|
||||||
mtc0 k1, _CP0_STATUS
|
mtc0 k1, _CP0_STATUS
|
||||||
mtc0 k0, _CP0_EPC
|
mtc0 k0, _CP0_EPC
|
||||||
ehb
|
eret
|
||||||
eret
|
|
||||||
nop
|
nop
|
||||||
|
|
||||||
.end vPortYieldISR
|
.end vPortYieldISR
|
||||||
|
|
Loading…
Reference in a new issue