Line 96... |
Line 96... |
void vPortEnableInterrupts( void );
|
void vPortEnableInterrupts( void );
|
#define portDISABLE_INTERRUPTS() vPortDisableInterrupts()
|
#define portDISABLE_INTERRUPTS() vPortDisableInterrupts()
|
#define portENABLE_INTERRUPTS() vPortEnableInterrupts()
|
#define portENABLE_INTERRUPTS() vPortEnableInterrupts()
|
|
|
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
// Critical section handling.
|
|
extern void vTaskEnterCritical( void );
|
extern void vTaskEnterCritical( void );
|
extern void vTaskExitCritical( void );
|
extern void vTaskExitCritical( void );
|
#define portENTER_CRITICAL() vTaskEnterCritical()
|
#define portENTER_CRITICAL() vTaskEnterCritical()
|
#define portEXIT_CRITICAL() vTaskExitCritical()
|
#define portEXIT_CRITICAL() vTaskExitCritical()
|
|
|
/* Task function macros as described on the FreeRTOS.org WEB site. */
|
/* Task function macros as described on the FreeRTOS.org WEB site. */
|
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
|
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
|
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
|
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
// Macro to save all registers, stack pointer into the TCB.
|
|
#define portSAVE_CONTEXT() \
|
|
asm volatile ( \
|
|
" .global pxCurrentTCB \n\t" \
|
|
" # make rooms in stack \n\t" \
|
|
" l.addi r1, r1, -128 \n\t" \
|
|
" # early save r3-r5, these are clobber register\n\t" \
|
|
" l.sw 0x08(r1), r3 \n\t" \
|
|
" l.sw 0x0C(r1), r4 \n\t" \
|
|
" l.sw 0x10(r1), r5 \n\t" \
|
|
" # save SPR_ESR_BASE(0), SPR_EPCR_BASE(0)\n\t" \
|
|
" l.mfspr r3, r0, (0<<11) + 64 \n\t" \
|
|
" l.mfspr r4, r0, (0<<11) + 32 \n\t" \
|
|
" l.sw 0x78(r1), r3 \n\t" \
|
|
" l.sw 0x7C(r1), r4 \n\t" \
|
|
" l.sw 0x00(r1), r9 \n\t" \
|
|
" # disable interrupts \n\t" \
|
|
" l.jal vPortDisableInterrupts \n\t" \
|
|
" # Save Context \n\t" \
|
|
" l.sw 0x04(r1), r2 \n\t" \
|
|
" l.sw 0x14(r1), r6 \n\t" \
|
|
" l.sw 0x18(r1), r7 \n\t" \
|
|
" l.sw 0x1C(r1), r8 \n\t" \
|
|
" l.sw 0x20(r1), r10 \n\t" \
|
|
" l.sw 0x24(r1), r11 \n\t" \
|
|
" l.sw 0x28(r1), r12 \n\t" \
|
|
" l.sw 0x2C(r1), r13 \n\t" \
|
|
" l.sw 0x30(r1), r14 \n\t" \
|
|
" l.sw 0x34(r1), r15 \n\t" \
|
|
" l.sw 0x38(r1), r16 \n\t" \
|
|
" l.sw 0x3C(r1), r17 \n\t" \
|
|
" l.sw 0x40(r1), r18 \n\t" \
|
|
" l.sw 0x44(r1), r19 \n\t" \
|
|
" l.sw 0x48(r1), r20 \n\t" \
|
|
" l.sw 0x4C(r1), r21 \n\t" \
|
|
" l.sw 0x50(r1), r22 \n\t" \
|
|
" l.sw 0x54(r1), r23 \n\t" \
|
|
" l.sw 0x58(r1), r24 \n\t" \
|
|
" l.sw 0x5C(r1), r25 \n\t" \
|
|
" l.sw 0x60(r1), r26 \n\t" \
|
|
" l.sw 0x64(r1), r27 \n\t" \
|
|
" l.sw 0x68(r1), r28 \n\t" \
|
|
" l.sw 0x6C(r1), r29 \n\t" \
|
|
" l.sw 0x70(r1), r30 \n\t" \
|
|
" l.sw 0x74(r1), r31 \n\t" \
|
|
" # Save the top of stack in TCB \n\t" \
|
|
" l.movhi r3, hi(pxCurrentTCB) \n\t" \
|
|
" l.ori r3, r3, lo(pxCurrentTCB)\n\t" \
|
|
" l.lwz r3, 0x0(r3) \n\t" \
|
|
" l.sw 0x0(r3), r1 \n\t" \
|
|
" # restore clobber register \n\t" \
|
|
" l.lwz r3, 0x08(r1) \n\t" \
|
|
" l.lwz r4, 0x0C(r1) \n\t" \
|
|
" l.lwz r5, 0x10(r1) \n\t" \
|
|
);
|
|
|
|
#define portRESTORE_CONTEXT() \
|
#define portRESTORE_CONTEXT() \
|
asm volatile ( \
|
asm volatile ( \
|
" .global pxCurrentTCB \n\t" \
|
" .global pxCurrentTCB \n\t" \
|
" # restore stack pointer \n\t" \
|
" # restore stack pointer \n\t" \
|
" l.movhi r3, hi(pxCurrentTCB) \n\t" \
|
" l.movhi r3, hi(pxCurrentTCB) \n\t" \
|
Line 205... |
Line 144... |
" l.lwz r30, 0x70(r1) \n\t" \
|
" l.lwz r30, 0x70(r1) \n\t" \
|
" l.lwz r31, 0x74(r1) \n\t" \
|
" l.lwz r31, 0x74(r1) \n\t" \
|
" # restore SPR_ESR_BASE(0), SPR_EPCR_BASE(0)\n\t" \
|
" # restore SPR_ESR_BASE(0), SPR_EPCR_BASE(0)\n\t" \
|
" l.lwz r3, 0x78(r1) \n\t" \
|
" l.lwz r3, 0x78(r1) \n\t" \
|
" l.lwz r4, 0x7C(r1) \n\t" \
|
" l.lwz r4, 0x7C(r1) \n\t" \
|
" l.mtspr r0, r3, (0<<11) + 64 \n\t" \
|
" l.mtspr r0, r3, ((0<<11) + 64) \n\t" \
|
" l.mtspr r0, r4, (0<<11) + 32 \n\t" \
|
" l.mtspr r0, r4, ((0<<11) + 32) \n\t" \
|
" # restore clobber register \n\t" \
|
" # restore clobber register \n\t" \
|
" l.lwz r3, 0x08(r1) \n\t" \
|
" l.lwz r3, 0x08(r1) \n\t" \
|
" l.lwz r4, 0x0C(r1) \n\t" \
|
" l.lwz r4, 0x0C(r1) \n\t" \
|
" l.lwz r5, 0x10(r1) \n\t" \
|
" l.lwz r5, 0x10(r1) \n\t" \
|
" l.addi r1, r1, 128 \n\t" \
|
" l.addi r1, r1, 132 \n\t" \
|
" l.rfe \n\t" \
|
" l.rfe \n\t" \
|
" l.nop \n\t" \
|
" l.nop \n\t" \
|
);
|
);
|
|
|
#ifdef __cplusplus
|
#ifdef __cplusplus
|