forked from epagris/FreeRTOS-Kernel
		
	deprecating the mcf5235 port (#334)
This commit is contained in:
		
							parent
							
								
									f37bcd5c14
								
							
						
					
					
						commit
						736f2302ae
					
				@ -1,285 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V4.1.1 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
    MCF5235 Port - Copyright (C) 2006 Christian Walter.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS 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 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; 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, without being obliged to provide
 | 
			
		||||
    the source code for any proprietary components.  See the licensing section
 | 
			
		||||
    of https://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
    can be applied.
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
    *                                                                         *
 | 
			
		||||
    * Get the FreeRTOS eBook!  See https://www.FreeRTOS.org/Documentation     *
 | 
			
		||||
    *                                                                         *
 | 
			
		||||
    * This is a concise, step by step, 'hands on' guide that describes both   *
 | 
			
		||||
    * general multitasking concepts and FreeRTOS specifics. It presents and   *
 | 
			
		||||
    * explains numerous examples that are written using the FreeRTOS API.     *
 | 
			
		||||
    * Full source code for all the examples is provided in an accompanying    *
 | 
			
		||||
    * .zip file.                                                              *
 | 
			
		||||
    *                                                                         *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
	Please ensure to read the configuration and relevant port sections of the
 | 
			
		||||
	online documentation.
 | 
			
		||||
 | 
			
		||||
	https://www.FreeRTOS.org - Documentation, latest information, license and 
 | 
			
		||||
	contact details.
 | 
			
		||||
 | 
			
		||||
        https://www.highintegritysystems.com/safertos/ - A version that is
 | 
			
		||||
        certified for use in safety critical systems.
 | 
			
		||||
 | 
			
		||||
        https://www.highintegritysystems.com/openrtos/ - Commercial support,
 | 
			
		||||
        development, porting, licensing and training services.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include "FreeRTOS.h"
 | 
			
		||||
#include "FreeRTOSConfig.h"
 | 
			
		||||
#include "task.h"
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Types ----------------------------------------- */
 | 
			
		||||
typedef volatile uint32_t vuint32;
 | 
			
		||||
typedef volatile uint16_t vuint16;
 | 
			
		||||
typedef volatile uint8_t vuint8;
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Defines --------------------------------------- */
 | 
			
		||||
#define portVECTOR_TABLE                __RAMVEC
 | 
			
		||||
#define portVECTOR_SYSCALL              ( 32 + portTRAP_YIELD )
 | 
			
		||||
#define portVECTOR_TIMER                ( 64 + 36 )
 | 
			
		||||
 | 
			
		||||
#define MCF_PIT_PRESCALER               512UL
 | 
			
		||||
#define MCF_PIT_TIMER_TICKS             ( FSYS_2 / MCF_PIT_PRESCALER )
 | 
			
		||||
#define MCF_PIT_MODULUS_REGISTER(freq)  ( MCF_PIT_TIMER_TICKS / ( freq ) - 1UL)
 | 
			
		||||
 | 
			
		||||
#define MCF_PIT_PMR0                    ( *( vuint16 * )( void * )( &__IPSBAR[ 0x150002 ] ) )
 | 
			
		||||
#define MCF_PIT_PCSR0                   ( *( vuint16 * )( void * )( &__IPSBAR[ 0x150000 ] ) )
 | 
			
		||||
#define MCF_PIT_PCSR_PRE(x)             ( ( ( x ) & 0x000F ) << 8 )
 | 
			
		||||
#define MCF_PIT_PCSR_EN                 ( 0x0001 )
 | 
			
		||||
#define MCF_PIT_PCSR_RLD                ( 0x0002 )
 | 
			
		||||
#define MCF_PIT_PCSR_PIF                ( 0x0004 )
 | 
			
		||||
#define MCF_PIT_PCSR_PIE                ( 0x0008 )
 | 
			
		||||
#define MCF_PIT_PCSR_OVW                ( 0x0010 )
 | 
			
		||||
#define MCF_INTC0_ICR36                 ( *( vuint8 * )( void * )( &__IPSBAR[ 0x000C64 ] ) )
 | 
			
		||||
#define MCF_INTC0_IMRH                  ( *( vuint32 * )( void * )( &__IPSBAR[ 0x000C08 ] ) )
 | 
			
		||||
#define MCF_INTC0_IMRH_INT_MASK36       ( 0x00000010 )
 | 
			
		||||
#define MCF_INTC0_IMRH_MASKALL          ( 0x00000001 )
 | 
			
		||||
#define MCF_INTC0_ICRn_IP(x)            ( ( ( x ) & 0x07 ) << 0 )
 | 
			
		||||
#define MCF_INTC0_ICRn_IL(x)            ( ( ( x ) & 0x07 ) << 3 )
 | 
			
		||||
 | 
			
		||||
#define portNO_CRITICAL_NESTING         ( ( uint32_t ) 0 )
 | 
			
		||||
#define portINITIAL_CRITICAL_NESTING    ( ( uint32_t ) 10 )
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Static variables ------------------------------ */
 | 
			
		||||
volatile uint32_t              ulCriticalNesting = portINITIAL_CRITICAL_NESTING;
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Static functions ------------------------------ */
 | 
			
		||||
#if configUSE_PREEMPTION == 0
 | 
			
		||||
static void prvPortPreemptiveTick ( void ) __attribute__ ((interrupt_handler));
 | 
			
		||||
#else
 | 
			
		||||
static void prvPortPreemptiveTick ( void );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Start implementation -------------------------- */
 | 
			
		||||
 | 
			
		||||
StackType_t *
 | 
			
		||||
pxPortInitialiseStack( StackType_t * pxTopOfStack, TaskFunction_t pxCode,
 | 
			
		||||
                       void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
    /* Place the parameter on the stack in the expected location. */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) pvParameters;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* Place dummy return address on stack. Tasks should never terminate so
 | 
			
		||||
     * we can set this to anything. */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* Create a Motorola Coldfire exception stack frame. First comes the return
 | 
			
		||||
     * address. */
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) pxCode;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* Format, fault-status, vector number for exception stack frame. Task
 | 
			
		||||
     * run in supervisor mode. */
 | 
			
		||||
    *pxTopOfStack = 0x40002000UL | ( portVECTOR_SYSCALL + 32 ) << 18;
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    /* Set the initial critical section nesting counter to zero. This value
 | 
			
		||||
     * is used to restore the value of ulCriticalNesting. */
 | 
			
		||||
    *pxTopOfStack = 0;
 | 
			
		||||
    *pxTopOfStack--;
 | 
			
		||||
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xA6;    /* A6 / FP */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xA5;    /* A5 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xA4;    /* A4 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xA3;    /* A3 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xA2;    /* A2 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xA1;    /* A1 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xA0;    /* A0 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD7;    /* D7 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD6;    /* D6 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD5;    /* D5 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD4;    /* D4 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD3;    /* D3 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD2;    /* D2 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD1;    /* D1 */
 | 
			
		||||
    pxTopOfStack--;
 | 
			
		||||
    *pxTopOfStack = ( StackType_t ) 0xD0;    /* D0 */
 | 
			
		||||
 | 
			
		||||
    return pxTopOfStack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Called by portYIELD() or taskYIELD() to manually force a context switch.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
prvPortYield( void )
 | 
			
		||||
{
 | 
			
		||||
    asm volatile ( "move.w  #0x2700, %sr\n\t" );
 | 
			
		||||
#if _GCC_USES_FP == 1
 | 
			
		||||
    asm volatile ( "unlk %fp\n\t" );
 | 
			
		||||
#endif
 | 
			
		||||
     /* Perform the context switch.  First save the context of the current task. */
 | 
			
		||||
    portSAVE_CONTEXT(  );
 | 
			
		||||
 | 
			
		||||
    /* Find the highest priority task that is ready to run. */
 | 
			
		||||
    vTaskSwitchContext(  );
 | 
			
		||||
 | 
			
		||||
    /* Restore the context of the new task. */
 | 
			
		||||
    portRESTORE_CONTEXT(  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if configUSE_PREEMPTION == 0
 | 
			
		||||
/*
 | 
			
		||||
 * The ISR used for the scheduler tick depends on whether the cooperative or
 | 
			
		||||
 * the preemptive scheduler is being used.
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
prvPortPreemptiveTick ( void )
 | 
			
		||||
{
 | 
			
		||||
    /* The cooperative scheduler requires a normal IRQ service routine to
 | 
			
		||||
     * simply increment the system tick.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    xTaskIncrementTick();
 | 
			
		||||
    MCF_PIT_PCSR0 |= MCF_PIT_PCSR_PIF;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
prvPortPreemptiveTick( void )
 | 
			
		||||
{
 | 
			
		||||
    asm volatile ( "move.w  #0x2700, %sr\n\t" );
 | 
			
		||||
#if _GCC_USES_FP == 1
 | 
			
		||||
    asm volatile ( "unlk %fp\n\t" );
 | 
			
		||||
#endif
 | 
			
		||||
    portSAVE_CONTEXT(  );
 | 
			
		||||
    MCF_PIT_PCSR0 |= MCF_PIT_PCSR_PIF;
 | 
			
		||||
    if( xTaskIncrementTick() != pdFALSE )
 | 
			
		||||
	{
 | 
			
		||||
		vTaskSwitchContext(  );
 | 
			
		||||
	}
 | 
			
		||||
    portRESTORE_CONTEXT(  );
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
vPortEnterCritical()
 | 
			
		||||
{
 | 
			
		||||
    /* FIXME: We should store the old IPL here - How are we supposed to do
 | 
			
		||||
     * this.
 | 
			
		||||
     */
 | 
			
		||||
    ( void )portSET_IPL( portIPL_MAX );
 | 
			
		||||
 | 
			
		||||
    /* Now interrupts are disabled ulCriticalNesting can be accessed
 | 
			
		||||
     * directly.  Increment ulCriticalNesting to keep a count of how many times
 | 
			
		||||
     * portENTER_CRITICAL() has been called. */
 | 
			
		||||
    ulCriticalNesting++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
vPortExitCritical()
 | 
			
		||||
{
 | 
			
		||||
    if( ulCriticalNesting > portNO_CRITICAL_NESTING )
 | 
			
		||||
    {
 | 
			
		||||
        /* Decrement the nesting count as we are leaving a critical section. */
 | 
			
		||||
        ulCriticalNesting--;
 | 
			
		||||
 | 
			
		||||
        /* If the nesting level has reached zero then interrupts should be
 | 
			
		||||
        re-enabled. */
 | 
			
		||||
        if( ulCriticalNesting == portNO_CRITICAL_NESTING )
 | 
			
		||||
        {
 | 
			
		||||
            ( void )portSET_IPL( 0 );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BaseType_t
 | 
			
		||||
xPortStartScheduler( void )
 | 
			
		||||
{
 | 
			
		||||
    extern void     ( *portVECTOR_TABLE[  ] ) (  );
 | 
			
		||||
 | 
			
		||||
    /* Add entry in vector table for yield system call. */
 | 
			
		||||
    portVECTOR_TABLE[ portVECTOR_SYSCALL ] = prvPortYield;
 | 
			
		||||
    /* Add entry in vector table for periodic timer. */
 | 
			
		||||
    portVECTOR_TABLE[ portVECTOR_TIMER ] = prvPortPreemptiveTick;
 | 
			
		||||
 | 
			
		||||
    /* Configure the timer for the system clock. */
 | 
			
		||||
    if ( configTICK_RATE_HZ > 0)
 | 
			
		||||
    {
 | 
			
		||||
        /* Configure prescaler */
 | 
			
		||||
        MCF_PIT_PCSR0 = MCF_PIT_PCSR_PRE( 0x9 ) | MCF_PIT_PCSR_RLD | MCF_PIT_PCSR_OVW;
 | 
			
		||||
        /* Initialize the periodic timer interrupt. */
 | 
			
		||||
        MCF_PIT_PMR0 = MCF_PIT_MODULUS_REGISTER( configTICK_RATE_HZ );
 | 
			
		||||
        /* Configure interrupt priority and level and unmask interrupt. */
 | 
			
		||||
        MCF_INTC0_ICR36 = MCF_INTC0_ICRn_IL( 0x1 ) | MCF_INTC0_ICRn_IP( 0x1 );
 | 
			
		||||
        MCF_INTC0_IMRH &= ~( MCF_INTC0_IMRH_INT_MASK36 | MCF_INTC0_IMRH_MASKALL );
 | 
			
		||||
        /* Enable interrupts */
 | 
			
		||||
        MCF_PIT_PCSR0 |= MCF_PIT_PCSR_PIE | MCF_PIT_PCSR_EN | MCF_PIT_PCSR_PIF;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Restore the context of the first task that is going to run. */
 | 
			
		||||
    portRESTORE_CONTEXT(  );
 | 
			
		||||
 | 
			
		||||
    /* Should not get here. */
 | 
			
		||||
    return pdTRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
vPortEndScheduler( void )
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
@ -1,183 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
    FreeRTOS V4.1.1 - Copyright (C) 2003-2006 Richard Barry.
 | 
			
		||||
    MCF5235 Port - Copyright (C) 2006 Christian Walter.
 | 
			
		||||
 | 
			
		||||
    This file is part of the FreeRTOS distribution.
 | 
			
		||||
 | 
			
		||||
    FreeRTOS 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 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; 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, without being obliged to provide
 | 
			
		||||
    the source code for any proprietary components.  See the licensing section
 | 
			
		||||
    of https://www.FreeRTOS.org for full details of how and when the exception
 | 
			
		||||
    can be applied.
 | 
			
		||||
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
    *                                                                         *
 | 
			
		||||
    * Get the FreeRTOS eBook!  See https://www.FreeRTOS.org/Documentation      *
 | 
			
		||||
	*                                                                         *
 | 
			
		||||
	* This is a concise, step by step, 'hands on' guide that describes both   *
 | 
			
		||||
	* general multitasking concepts and FreeRTOS specifics. It presents and   *
 | 
			
		||||
	* explains numerous examples that are written using the FreeRTOS API.     *
 | 
			
		||||
	* Full source code for all the examples is provided in an accompanying    *
 | 
			
		||||
	* .zip file.                                                              *
 | 
			
		||||
    *                                                                         *
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
    ***************************************************************************
 | 
			
		||||
 | 
			
		||||
	Please ensure to read the configuration and relevant port sections of the
 | 
			
		||||
	online documentation.
 | 
			
		||||
 | 
			
		||||
	https://www.FreeRTOS.org - Documentation, latest information, license and
 | 
			
		||||
	contact details.
 | 
			
		||||
 | 
			
		||||
        https://www.highintegritysystems.com/safertos/ - A version that is
 | 
			
		||||
        certified for use in safety critical systems.
 | 
			
		||||
 | 
			
		||||
        https://www.highintegritysystems.com/openrtos/ - Commercial support,
 | 
			
		||||
        development, porting,
 | 
			
		||||
	licensing and training services.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef PORTMACRO_H
 | 
			
		||||
#define PORTMACRO_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Data types for Coldfire ----------------------- */
 | 
			
		||||
#define portCHAR        char
 | 
			
		||||
#define portFLOAT       float
 | 
			
		||||
#define portDOUBLE      double
 | 
			
		||||
#define portLONG        long
 | 
			
		||||
#define portSHORT       short
 | 
			
		||||
#define portSTACK_TYPE  unsigned int
 | 
			
		||||
#define portBASE_TYPE   int
 | 
			
		||||
 | 
			
		||||
typedef portSTACK_TYPE StackType_t;
 | 
			
		||||
typedef long BaseType_t;
 | 
			
		||||
typedef unsigned long UBaseType_t;
 | 
			
		||||
 | 
			
		||||
#if( configUSE_16_BIT_TICKS == 1 )
 | 
			
		||||
    typedef uint16_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t ) 0xffff
 | 
			
		||||
#else
 | 
			
		||||
    typedef uint32_t TickType_t;
 | 
			
		||||
    #define portMAX_DELAY ( TickType_t ) 0xffffffffUL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Architecture specifics ------------------------ */
 | 
			
		||||
#define portSTACK_GROWTH                ( -1 )
 | 
			
		||||
#define portTICK_PERIOD_MS                ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
#define portBYTE_ALIGNMENT              4
 | 
			
		||||
 | 
			
		||||
#define portTRAP_YIELD                  0   /* Trap 0 */
 | 
			
		||||
#define portIPL_MAX                     7   /* Only NMI interrupt 7 allowed. */
 | 
			
		||||
 | 
			
		||||
/* ------------------------ FreeRTOS macros for port ---------------------- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function must be called when the current state of the active task
 | 
			
		||||
 * should be stored. It must be called immediately after exception
 | 
			
		||||
 * processing from the CPU, i.e. there exists a Coldfire exception frame at
 | 
			
		||||
 * the current position in the stack. The function reserves space on
 | 
			
		||||
 * the stack for the CPU registers and other task dependent values (e.g
 | 
			
		||||
 * ulCriticalNesting) and updates the top of the stack in the TCB.
 | 
			
		||||
 */
 | 
			
		||||
#define portSAVE_CONTEXT()                                                   \
 | 
			
		||||
    asm volatile ( /* reserve space for task state. */                       \
 | 
			
		||||
                   "lea.l   (-64, %sp), %sp\n\t"                             \
 | 
			
		||||
                   /* push data register %d0-%d7/%a0-%a6 on stack. */        \
 | 
			
		||||
                   "movem.l %d0-%d7/%a0-%a6, (%sp)\n\t"                      \
 | 
			
		||||
                   /* push ulCriticalNesting counter on stack. */            \
 | 
			
		||||
                   "lea.l  (60, %sp), %a0\n\t"                               \
 | 
			
		||||
                   "move.l  ulCriticalNesting, (%a0)\n\t"                    \
 | 
			
		||||
                   /* set the new top of the stack in the TCB. */            \
 | 
			
		||||
                   "move.l  pxCurrentTCB, %a0\n\t"                           \
 | 
			
		||||
                   "move.l  %sp, (%a0)");
 | 
			
		||||
 | 
			
		||||
/*.
 | 
			
		||||
 * This function restores the current active and continues its execution.
 | 
			
		||||
 * It loads the current TCB and restores the processor registers, the
 | 
			
		||||
 * task dependent values (e.g ulCriticalNesting). Finally execution
 | 
			
		||||
 * is continued by executing an rte instruction.
 | 
			
		||||
 */
 | 
			
		||||
#define portRESTORE_CONTEXT()                                                \
 | 
			
		||||
    asm volatile ( "move.l  pxCurrentTCB, %sp\n\t"                           \
 | 
			
		||||
                   "move.l  (%sp), %sp\n\t"                                  \
 | 
			
		||||
                   /* stack pointer now points to the saved registers. */    \
 | 
			
		||||
                   "movem.l (%sp), %d0-%d7/%a0-%a6\n\t"                      \
 | 
			
		||||
                   /* restore ulCriticalNesting counter from stack. */       \
 | 
			
		||||
                   "lea.l   (%sp, 60), %sp\n\t"                              \
 | 
			
		||||
                   "move.l  (%sp)+, ulCriticalNesting\n\t"                   \
 | 
			
		||||
                   /* stack pointer now points to exception frame. */        \
 | 
			
		||||
                   "rte\n\t" );
 | 
			
		||||
 | 
			
		||||
#define portENTER_CRITICAL()                                                 \
 | 
			
		||||
    vPortEnterCritical();
 | 
			
		||||
 | 
			
		||||
#define portEXIT_CRITICAL()                                                  \
 | 
			
		||||
    vPortExitCritical();
 | 
			
		||||
 | 
			
		||||
#define portSET_IPL( xIPL )                                                  \
 | 
			
		||||
    asm_set_ipl( xIPL )
 | 
			
		||||
 | 
			
		||||
#define portDISABLE_INTERRUPTS() \
 | 
			
		||||
    do { ( void )portSET_IPL( portIPL_MAX ); } while( 0 )
 | 
			
		||||
#define portENABLE_INTERRUPTS() \
 | 
			
		||||
    do { ( void )portSET_IPL( 0 ); } while( 0 )
 | 
			
		||||
 | 
			
		||||
#define portYIELD()                                                          \
 | 
			
		||||
    asm volatile ( " trap   %0\n\t" : : "i"(portTRAP_YIELD) )
 | 
			
		||||
 | 
			
		||||
#define portNOP()                                                            \
 | 
			
		||||
    asm volatile ( "nop\n\t" )
 | 
			
		||||
 | 
			
		||||
#define portENTER_SWITCHING_ISR()                                            \
 | 
			
		||||
    asm volatile ( "move.w  #0x2700, %sr" );                                 \
 | 
			
		||||
    /* Save the context of the interrupted task. */                          \
 | 
			
		||||
    portSAVE_CONTEXT(  );                                                    \
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
#define portEXIT_SWITCHING_ISR( SwitchRequired )                             \
 | 
			
		||||
        /* If a switch is required we call vTaskSwitchContext(). */          \
 | 
			
		||||
        if( SwitchRequired )                                                 \
 | 
			
		||||
        {                                                                    \
 | 
			
		||||
            vTaskSwitchContext(  );                                          \
 | 
			
		||||
        }                                                                    \
 | 
			
		||||
    }                                                                        \
 | 
			
		||||
    portRESTORE_CONTEXT(  );
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Function prototypes --------------------------- */
 | 
			
		||||
void vPortEnterCritical( void );
 | 
			
		||||
void vPortExitCritical( void );
 | 
			
		||||
int asm_set_ipl( uint32_t int uiNewIPL );
 | 
			
		||||
 | 
			
		||||
/* ------------------------ Compiler specifics ---------------------------- */
 | 
			
		||||
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )                   \
 | 
			
		||||
    void vFunction( void *pvParameters )
 | 
			
		||||
 | 
			
		||||
#define portTASK_FUNCTION( vFunction, pvParameters )                         \
 | 
			
		||||
    void vFunction( void *pvParameters )
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* PORTMACRO_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								portable/GCC/MCF5235/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								portable/GCC/MCF5235/readme.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
The MCF5235 port is deprecated. The last FreeRTOS version that includes this port is 10.4.3.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user