summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>2008-08-10 21:14:08 +0000
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>2008-08-10 21:14:08 +0000
commitdfd3758a68e8a9d3ea73997364c55853254d3a9a (patch)
tree76452f570007108953b9461c1a99be1620b784e2 /Source
parent4011f7a2d30c6397f644bf016ff4896e30940f51 (diff)
downloadfreertos-dfd3758a68e8a9d3ea73997364c55853254d3a9a.tar.gz
freertos-dfd3758a68e8a9d3ea73997364c55853254d3a9a.tar.bz2
freertos-dfd3758a68e8a9d3ea73997364c55853254d3a9a.tar.xz
Interrupt nesting and cache support added.
git-svn-id: https://freertos.svn.sourceforge.net/svnroot/freertos/trunk@442 1d2547de-c912-0410-9cb9-b8ca96c0e9e2
Diffstat (limited to 'Source')
-rw-r--r--Source/portable/GCC/ColdFire_V2/portasm.S14
-rw-r--r--Source/portable/GCC/ColdFire_V2/portmacro.h10
2 files changed, 15 insertions, 9 deletions
diff --git a/Source/portable/GCC/ColdFire_V2/portasm.S b/Source/portable/GCC/ColdFire_V2/portasm.S
index a80f3bd5..7229c52c 100644
--- a/Source/portable/GCC/ColdFire_V2/portasm.S
+++ b/Source/portable/GCC/ColdFire_V2/portasm.S
@@ -9,8 +9,8 @@
*/
.global ulPortSetIPL
+ .global mcf5xxx_wr_cacr
.global __cs3_isr_interrupt_127
- .global __cs3_isr_interrupt_119
.global vPortStartFirstTask
.text
@@ -25,9 +25,8 @@
.endm
.macro portRESTORE_CONTEXT
-
- move.l pxCurrentTCB, %sp
- move.l (%sp), %sp
+ move.l pxCurrentTCB, %a0
+ move.l (%a0), %sp
movem.l (%sp), %d0-%fp
lea.l %sp@(60), %sp
rte
@@ -67,6 +66,13 @@ ulPortSetIPL:
lea 8(SP),SP
unlk A6
rts
+/********************************************************************/
+
+mcf5xxx_wr_cacr:
+ move.l 4(sp),d0
+ .long 0x4e7b0002 /* movec d0,cacr */
+ nop
+ rts
/********************************************************************/
diff --git a/Source/portable/GCC/ColdFire_V2/portmacro.h b/Source/portable/GCC/ColdFire_V2/portmacro.h
index 3615da74..3b002423 100644
--- a/Source/portable/GCC/ColdFire_V2/portmacro.h
+++ b/Source/portable/GCC/ColdFire_V2/portmacro.h
@@ -84,7 +84,7 @@ extern "C" {
/* Hardware specifics. */
#define portBYTE_ALIGNMENT 4
-#define portSTACK_GROWTH -4
+#define portSTACK_GROWTH -1
#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )
/*-----------------------------------------------------------*/
unsigned portLONG ulPortSetIPL( unsigned portLONG );
@@ -106,7 +106,7 @@ extern void vPortClearInterruptMaskFromISR( unsigned portBASE_TYPE );
/* Task utilities. */
-#define portYIELD() MCF_INTC0_INTFRCH |= ( 1UL << ( configYIELD_INTERRUPT_VECTOR - 32UL ) ); portNOP(); portNOP(); portNOP(); /* -32 as we are using the high word of the 64bit mask. */
+#define portYIELD() MCF_INTC0_INTFRCH |= ( 1UL << ( configYIELD_INTERRUPT_VECTOR - 32UL ) ); portNOP(); portNOP(); portNOP() /* -32 as we are using the high word of the 64bit mask. */
@@ -119,9 +119,9 @@ extern void vPortClearInterruptMaskFromISR( unsigned portBASE_TYPE );
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
/*-----------------------------------------------------------*/
-#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) \
- { \
- portYIELD(); \
+#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) \
+ { \
+ portYIELD(); \
}