diff options
author | richardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2> | 2008-08-10 21:14:08 +0000 |
---|---|---|
committer | richardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2> | 2008-08-10 21:14:08 +0000 |
commit | dfd3758a68e8a9d3ea73997364c55853254d3a9a (patch) | |
tree | 76452f570007108953b9461c1a99be1620b784e2 /Source | |
parent | 4011f7a2d30c6397f644bf016ff4896e30940f51 (diff) | |
download | freertos-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.S | 14 | ||||
-rw-r--r-- | Source/portable/GCC/ColdFire_V2/portmacro.h | 10 |
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(); \
}
|