summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>2009-02-04 13:08:12 +0000
committerRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>2009-02-04 13:08:12 +0000
commit57ac49f1221badd88724efe03f3da1305c23127a (patch)
treeb9f0efe4b62273b77cdead9d1759ccb928a294b0
parentaf73f5af6f133cb9bdc4ccdea91400df98893968 (diff)
downloadfreertos-57ac49f1221badd88724efe03f3da1305c23127a.tar.gz
freertos-57ac49f1221badd88724efe03f3da1305c23127a.tar.bz2
freertos-57ac49f1221badd88724efe03f3da1305c23127a.tar.xz
Continue 78K0R development.
git-svn-id: https://freertos.svn.sourceforge.net/svnroot/freertos/trunk@673 1d2547de-c912-0410-9cb9-b8ca96c0e9e2
-rw-r--r--Source/portable/IAR/78K0R/ISR_Support.h99
-rw-r--r--Source/portable/IAR/78K0R/portasm.s2669
-rw-r--r--Source/portable/IAR/78K0R/portmacro.h3
3 files changed, 101 insertions, 70 deletions
diff --git a/Source/portable/IAR/78K0R/ISR_Support.h b/Source/portable/IAR/78K0R/ISR_Support.h
new file mode 100644
index 00000000..6b291cc9
--- /dev/null
+++ b/Source/portable/IAR/78K0R/ISR_Support.h
@@ -0,0 +1,99 @@
+; FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry.
+;
+; This file is part of the FreeRTOS.org distribution.
+;
+; FreeRTOS.org is free software; you can redistribute it and/or modify
+; it under the terms of the GNU General Public License as published by
+; the Free Software Foundation; either version 2 of the License, or
+; (at your option) any later version.
+;
+; FreeRTOS.org is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with FreeRTOS.org; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;
+; A special exception to the GPL can be applied should you wish to distribute
+; a combined work that includes FreeRTOS.org, without being obliged to provide
+; the source code for any proprietary components. See the licensing section
+; of http://www.FreeRTOS.org for full details of how and when the exception
+; can be applied.
+;
+; ***************************************************************************
+; See http://www.FreeRTOS.org for documentation, latest information, license
+; and contact details. Please ensure to read the configuration and relevant
+; port sections of the online documentation.
+; ***************************************************************************
+;
+;------------------------------------------------------------------------------
+
+#include "FreeRTOSConfig.h"
+
+; Variables used by scheduler
+;------------------------------------------------------------------------------
+ EXTERN pxCurrentTCB
+ EXTERN usCriticalNesting
+
+;------------------------------------------------------------------------------
+; portSAVE_CONTEXT MACRO
+; Saves the context of the remaining general purpose registers, CS and ES
+; (only in far memory mode) registers
+; the usCriticalNesting Value and the Stack Pointer
+; of the active Task onto the task stack
+;------------------------------------------------------------------------------
+portSAVE_CONTEXT MACRO
+
+ PUSH AX ; save AX Register to stack
+ PUSH HL
+#if configMEMORY_MODE == 1
+ MOV A, CS ; save CS register
+ XCH A, X
+ MOV A, ES ; save ES register
+ PUSH AX
+#else
+ MOV A, CS ; save CS register
+ PUSH AX
+#endif
+ PUSH DE ; save the remaining general purpose registers
+ PUSH BC
+ MOVW AX, usCriticalNesting ; save the usCriticalNesting value
+ PUSH AX
+ MOVW AX, pxCurrentTCB ; save the Stack pointer
+ MOVW HL, AX
+ MOVW AX, SP
+ MOVW [HL], AX
+ ENDM
+;------------------------------------------------------------------------------
+
+;------------------------------------------------------------------------------
+; portRESTORE_CONTEXT MACRO
+; Restores the context of the Stack Pointer, usCriticalNesting
+; value, general purpose registers and the CS and ES (only in far memory mode)
+; of the selected task from the task stack
+;------------------------------------------------------------------------------
+
+portRESTORE_CONTEXT MACRO
+ MOVW AX, pxCurrentTCB ; restore the Stack pointer
+ MOVW HL, AX
+ MOVW AX, [HL]
+ MOVW SP, AX
+ POP AX ; restore usCriticalNesting value
+ MOVW usCriticalNesting, AX
+ POP BC ; restore the necessary general purpose registers
+ POP DE
+#if configMEMORY_MODE == 1
+ POP AX ; restore the ES register
+ MOV ES, A
+ XCH A, X ; restore the CS register
+ MOV CS, A
+#else
+ POP AX
+ MOV CS, A ; restore CS register
+#endif
+ POP HL ; restore general purpose register HL
+ POP AX ; restore AX
+ ENDM
+;------------------------------------------------------------------------------
diff --git a/Source/portable/IAR/78K0R/portasm.s26 b/Source/portable/IAR/78K0R/portasm.s26
index 62206ed5..2bb46e1c 100644
--- a/Source/portable/IAR/78K0R/portasm.s26
+++ b/Source/portable/IAR/78K0R/portasm.s26
@@ -29,8 +29,7 @@
; ***************************************************************************
;
;------------------------------------------------------------------------------
-; Note: Select the correct include files for the device used by the application.
-#include "FreeRTOSConfig.h"
+#include "ISR_Support.h"
;------------------------------------------------------------------------------
#if __CORE__ != __78K0R__
@@ -51,12 +50,6 @@
EXTERN vTaskSwitchContext
EXTERN vTaskIncrementTick
-; Variables used by scheduler
-;------------------------------------------------------------------------------
- EXTERN pxCurrentTCB
- EXTERN usCriticalNesting
-
-
; Tick ISR Prototype
;------------------------------------------------------------------------------
EXTERN ?CL78K0R_V2_L00
@@ -68,66 +61,6 @@ MD_INTTM05 SYMBOL "MD_INTTM05"
`??MD_INTTM05??INTVEC 68` SYMBOL "??INTVEC 68", MD_INTTM05
-;------------------------------------------------------------------------------
-; portSAVE_CONTEXT MACRO
-; Saves the context of the remaining general purpose registers, CS and ES
-; (only in far memory mode) registers
-; the usCriticalNesting Value and the Stack Pointer
-; of the active Task onto the task stack
-;------------------------------------------------------------------------------
-portSAVE_CONTEXT MACRO
-
- PUSH AX ; save AX Register to stack
- PUSH HL
-#if configMEMORY_MODE == 1
- MOV A, CS ; save CS register
- XCH A, X
- MOV A, ES ; save ES register
- PUSH AX
-#else
- MOV A, CS ; save CS register
- PUSH AX
-#endif
- PUSH DE ; save the remaining general purpose registers
- PUSH BC
- MOVW AX, usCriticalNesting ; save the usCriticalNesting value
- PUSH AX
- MOVW AX, pxCurrentTCB ; save the Stack pointer
- MOVW HL, AX
- MOVW AX, SP
- MOVW [HL], AX
- ENDM
-;------------------------------------------------------------------------------
-
-;------------------------------------------------------------------------------
-; portRESTORE_CONTEXT MACRO
-; Restores the context of the Stack Pointer, usCriticalNesting
-; value, general purpose registers and the CS and ES (only in far memory mode)
-; of the selected task from the task stack
-;------------------------------------------------------------------------------
-
-portRESTORE_CONTEXT MACRO
- MOVW AX, pxCurrentTCB ; restore the Stack pointer
- MOVW HL, AX
- MOVW AX, [HL]
- MOVW SP, AX
- POP AX ; restore usCriticalNesting value
- MOVW usCriticalNesting, AX
- POP BC ; restore the necessary general purpose registers
- POP DE
-#if configMEMORY_MODE == 1
- POP AX ; restore the ES register
- MOV ES, A
- XCH A, X ; restore the CS register
- MOV CS, A
-#else
- POP AX
- MOV CS, A ; restore CS register
-#endif
- POP HL ; restore general purpose register HL
- POP AX ; restore AX
- ENDM
-;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; Port Yield function to check for a Task switch in the cooperative mode
diff --git a/Source/portable/IAR/78K0R/portmacro.h b/Source/portable/IAR/78K0R/portmacro.h
index 08d68cf2..1255ff6d 100644
--- a/Source/portable/IAR/78K0R/portmacro.h
+++ b/Source/portable/IAR/78K0R/portmacro.h
@@ -124,9 +124,8 @@ extern volatile unsigned portSHORT usCriticalNesting; \
/* Task utilities. */
extern void vPortStart( void );
-extern void portSAVE_CONTEXT( void );
-extern void portRESTORE_CONTEXT( void );
#define portYIELD() __asm( "BRK" )
+#define portYIELD_FROM_ISR( xHigherPriorityTaskWoken ) if( xHigherPriorityTaskWoken ) vTaskSwitchContext()
#define portNOP() __asm( "NOP" )
/*-----------------------------------------------------------*/