]> git.sur5r.net Git - freertos/commitdiff
Continue work on the SH2A port.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 15 Feb 2010 17:16:38 +0000 (17:16 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 15 Feb 2010 17:16:38 +0000 (17:16 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@982 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Source/portable/Renesas/SH2A_FPU/ISR_Support.inc [new file with mode: 0644]
Source/portable/Renesas/SH2A_FPU/port.c
Source/portable/Renesas/SH2A_FPU/portasm.src
Source/portable/Renesas/SH2A_FPU/portmacro.h

diff --git a/Source/portable/Renesas/SH2A_FPU/ISR_Support.inc b/Source/portable/Renesas/SH2A_FPU/ISR_Support.inc
new file mode 100644 (file)
index 0000000..0ee6f35
--- /dev/null
@@ -0,0 +1,48 @@
+       .macro portSAVE_CONTEXT\r
+\r
+       ; Save r0 to r14 and pr.\r
+       movml.l r15, @-r15\r
+       \r
+       ; Save mac1, mach and gbr\r
+       sts.l   macl, @-r15\r
+       sts.l   mach, @-r15\r
+       stc.l   gbr, @-r15\r
+       \r
+       ; Get the address of pxCurrentTCB\r
+       mov.l   #_pxCurrentTCB, r0\r
+       \r
+       ; Get the address of pxTopOfStack from the TCB.\r
+       mov.l   @r0, r0\r
+       \r
+       ; Save the stack pointer in pxTopOfStack.\r
+       mov.l   r15, @r0\r
+\r
+       .endm\r
+\r
+;-----------------------------------------------------------\r
+\r
+       .macro portRESTORE_CONTEXT\r
+\r
+       ; Get the address of the pxCurrentTCB variable.\r
+       mov.l   #_pxCurrentTCB, r0\r
+\r
+       ; Get the address of the task stack from pxCurrentTCB.\r
+       mov.l   @r0, r0\r
+\r
+       ; Get the task stack itself into the stack pointer. \r
+       mov.l   @r0, r15                \r
+\r
+       ; Restore system registers.\r
+       ldc.l   @r15+, gbr\r
+       lds.l   @r15+, mach\r
+       lds.l   @r15+, macl\r
+\r
+       ; Restore r0 to r14 and PR\r
+       movml.l @r15+, r15\r
+       \r
+       ; Pop the SR and PC to jump to the start of the task.\r
+       rte\r
+       nop\r
+\r
+       .endm\r
+;-----------------------------------------------------------
\ No newline at end of file
index 7ce291939c3a14b446ec696741fb274c3db18907..536281362a7368e393d7375cf17c959061d43e97 100644 (file)
@@ -241,7 +241,7 @@ long lInterruptMask;
        trapa( portYIELD_TRAP_NO );\r
        \r
        /* Restore the interrupt mask to whatever it was previously (when the\r
-       function was entered. */\r
+       function was entered). */\r
        set_imask( ( int ) lInterruptMask );\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -290,8 +290,3 @@ extern void * volatile pxCurrentTCB;
 /*-----------------------------------------------------------*/\r
 \r
 \r
-\r
-\r
-\r
-\r
-\r
index 948b57dd7df274566f6c3fbe26a3c512a1803a5f..591b2f5bbc9f6937ae1b9fbe7195324925879fa1 100644 (file)
 \r
     .section    P\r
 \r
-       .macro portSAVE_CONTEXT\r
-\r
-       ; Save r0 to r14 and pr.\r
-       movml.l r15, @-r15\r
-       \r
-       ; Save mac1, mach and gbr\r
-       sts.l   macl, @-r15\r
-       sts.l   mach, @-r15\r
-       stc.l   gbr, @-r15\r
-       \r
-       ; Get the address of pxCurrentTCB\r
-       mov.l   #_pxCurrentTCB, r0\r
-       \r
-       ; Get the address of pxTopOfStack from the TCB.\r
-       mov.l   @r0, r0\r
-       \r
-       ; Save the stack pointer in pxTopOfStack.\r
-       mov.l   r15, @r0\r
-\r
-       .endm\r
-\r
-;-----------------------------------------------------------\r
-\r
-       .macro portRESTORE_CONTEXT\r
-\r
-       ; Get the address of the pxCurrentTCB variable.\r
-       mov.l   #_pxCurrentTCB, r0\r
-\r
-       ; Get the address of the task stack from pxCurrentTCB.\r
-       mov.l   @r0, r0\r
-\r
-       ; Get the task stack itself into the stack pointer. \r
-       mov.l   @r0, r15                \r
-\r
-       ; Restore system registers.\r
-       ldc.l   @r15+, gbr\r
-       lds.l   @r15+, mach\r
-       lds.l   @r15+, macl\r
-\r
-       ; Restore r0 to r14 and PR\r
-       movml.l @r15+, r15\r
-       \r
-       ; Pop the SR and PC to jump to the start of the task.\r
-       rte\r
-       nop\r
-\r
-       .endm\r
-;-----------------------------------------------------------\r
+       .INCLUDE "ISR_Support.inc"\r
        \r
 _vPortStartFirstTask:\r
                \r
index 93c64d96b6b5059d6ac5b2f112d0901121a1e271..c174914e015c70dad14a76ec948e82cfb5580194 100644 (file)
@@ -102,6 +102,9 @@ portSTACK_TYPE and portBASE_TYPE. */
 void vPortYield( void );\r
 #define portYIELD()                                            vPortYield()\r
 \r
+extern void vTaskSwitchContext( void );\r
+#define portYIELD_FROM_ISR( x )                        if( x != pdFALSE ) vTaskSwitchContext()\r
+\r
 /* \r
  * This function tells the kernel that the task referenced by xTask is going to \r
  * use the floating point registers and therefore requires the floating point \r