OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Source/] [portable/] [GCC/] [OpenRISC/] [portmacro.h] - Diff between revs 664 and 665

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 664 Rev 665
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.