From a2e2f1f29876fc9efe6c5848e0411c7c0905dc80 Mon Sep 17 00:00:00 2001 From: richardbarry Date: Sun, 10 Aug 2008 21:14:08 +0000 Subject: [PATCH] Interrupt nesting and cache support added. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@442 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- Source/portable/GCC/ColdFire_V2/portasm.S | 14 ++++++++++---- 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 a80f3bd51..7229c52cb 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 3615da743..3b0024239 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(); \ } -- 2.39.5