Line 82... |
Line 82... |
#define portCRITICAL_NESTING_IN_TCB 1
|
#define portCRITICAL_NESTING_IN_TCB 1
|
#define portINSTRUCTION_SIZE ( ( portSTACK_TYPE ) 4 )
|
#define portINSTRUCTION_SIZE ( ( portSTACK_TYPE ) 4 )
|
#define portNO_CRITICAL_SECTION_NESTING ( ( portSTACK_TYPE ) 0 )
|
#define portNO_CRITICAL_SECTION_NESTING ( ( portSTACK_TYPE ) 0 )
|
|
|
#define portYIELD_FROM_ISR() portYIELD()
|
#define portYIELD_FROM_ISR() portYIELD()
|
#define portYIELD() { \
|
#define portYIELD() \
|
__asm__ __volatile__ ( "l.nop " ); \
|
__asm__ __volatile__ ( "l.nop \n\t" \
|
__asm__ __volatile__ ( "l.sys 0x0FCC" ); \
|
"l.sys 0x0FCC\n\t" \
|
__asm__ __volatile__ ( "l.nop " ); \
|
"l.nop \n\t" \
|
}
|
);
|
#define portNOP() __asm__ __volatile__ ( "l.nop" )
|
#define portNOP() __asm__ __volatile__ ( "l.nop" )
|
|
|
|
|
void vPortDisableInterrupts( void );
|
/*-----------------------------------------------------------*/
|
void vPortEnableInterrupts( void );
|
#define portDISABLE_INTERRUPTS() { extern inline void vPortDisableInterrupts( void ); vPortDisableInterrupts(); }
|
#define portDISABLE_INTERRUPTS() vPortDisableInterrupts()
|
#define portENABLE_INTERRUPTS() { extern inline void vPortEnableInterrupts( void ); vPortEnableInterrupts(); }
|
#define portENABLE_INTERRUPTS() vPortEnableInterrupts()
|
|
|
|
|
#define portENTER_CRITICAL() { extern void vTaskEnterCritical( void ); vTaskEnterCritical(); }
|
|
#define portEXIT_CRITICAL() { extern void vTaskExitCritical( void ); vTaskExitCritical(); }
|
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
extern void vTaskEnterCritical( void );
|
|
extern void vTaskExitCritical( void );
|
|
#define portENTER_CRITICAL() vTaskEnterCritical()
|
|
#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 )
|
|
|
#define portRESTORE_CONTEXT() \
|
/*
|
asm volatile ( \
|
Context layout
|
" .global pxCurrentTCB \n\t" \
|
0x00 r9
|
" # restore stack pointer \n\t" \
|
0x04 r2
|
" l.movhi r3, hi(pxCurrentTCB) \n\t" \
|
0x08 r3
|
" l.ori r3, r3, lo(pxCurrentTCB)\n\t" \
|
0x0C r4
|
" l.lwz r3, 0x0(r3) \n\t" \
|
0x10 r5
|
" l.lwz r1, 0x0(r3) \n\t" \
|
0x14 r6
|
" # restore context \n\t" \
|
0x18 r7
|
" l.lwz r9, 0x00(r1) \n\t" \
|
0x1C r8
|
" l.lwz r2, 0x04(r1) \n\t" \
|
0x20 r10
|
" l.lwz r6, 0x14(r1) \n\t" \
|
0x24 r11
|
" l.lwz r7, 0x18(r1) \n\t" \
|
0x28 r12
|
" l.lwz r8, 0x1C(r1) \n\t" \
|
0x2C r13
|
" l.lwz r10, 0x20(r1) \n\t" \
|
0x30 r14
|
" l.lwz r11, 0x24(r1) \n\t" \
|
0x34 r15
|
" l.lwz r12, 0x28(r1) \n\t" \
|
0x38 r16
|
" l.lwz r13, 0x2C(r1) \n\t" \
|
0x3C r17
|
" l.lwz r14, 0x30(r1) \n\t" \
|
0x40 r18
|
" l.lwz r15, 0x34(r1) \n\t" \
|
0x44 r19
|
" l.lwz r16, 0x38(r1) \n\t" \
|
0x48 r20
|
" l.lwz r17, 0x3C(r1) \n\t" \
|
0x4C r21
|
" l.lwz r18, 0x40(r1) \n\t" \
|
0x50 r22
|
" l.lwz r19, 0x44(r1) \n\t" \
|
0x54 r23
|
" l.lwz r20, 0x48(r1) \n\t" \
|
0x58 r24
|
" l.lwz r21, 0x4C(r1) \n\t" \
|
0x5C r25
|
" l.lwz r22, 0x50(r1) \n\t" \
|
0x60 r26
|
" l.lwz r23, 0x54(r1) \n\t" \
|
0x64 r27
|
" l.lwz r24, 0x58(r1) \n\t" \
|
0x68 r28
|
" l.lwz r25, 0x5C(r1) \n\t" \
|
0x6C r29
|
" l.lwz r26, 0x60(r1) \n\t" \
|
0x70 r30
|
" l.lwz r27, 0x64(r1) \n\t" \
|
0x74 r31
|
" l.lwz r28, 0x68(r1) \n\t" \
|
0x78 ESR
|
" l.lwz r29, 0x6C(r1) \n\t" \
|
0x7C EPCR
|
" l.lwz r30, 0x70(r1) \n\t" \
|
*/
|
" l.lwz r31, 0x74(r1) \n\t" \
|
|
" # restore SPR_ESR_BASE(0), SPR_EPCR_BASE(0)\n\t" \
|
#define REDZONE_SIZE (128)
|
" l.lwz r3, 0x78(r1) \n\t" \
|
#define CONTEXT_SIZE (128)
|
" l.lwz r4, 0x7C(r1) \n\t" \
|
#define STACKFRAME_SIZE (CONTEXT_SIZE + REDZONE_SIZE)
|
" l.mtspr r0, r3, ((0<<11) + 64) \n\t" \
|
|
" l.mtspr r0, r4, ((0<<11) + 32) \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" \
|
|
" l.addi r1, r1, 132 \n\t" \
|
|
" l.rfe \n\t" \
|
|
" l.nop \n\t" \
|
|
);
|
|
|
|
#ifdef __cplusplus
|
#ifdef __cplusplus
|
}
|
}
|
#endif
|
#endif
|
|
|