Start point for RX62N port layer for IAR - not necessarily complete yet.
diff --git a/Source/portable/IAR/RX600/port.c b/Source/portable/IAR/RX600/port.c
new file mode 100644
index 0000000..fedf97e
--- /dev/null
+++ b/Source/portable/IAR/RX600/port.c
@@ -0,0 +1,215 @@
+/*

+    FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.

+

+    ***************************************************************************

+    *                                                                         *

+    * If you are:                                                             *

+    *                                                                         *

+    *    + New to FreeRTOS,                                                   *

+    *    + Wanting to learn FreeRTOS or multitasking in general quickly       *

+    *    + Looking for basic training,                                        *

+    *    + Wanting to improve your FreeRTOS skills and productivity           *

+    *                                                                         *

+    * then take a look at the FreeRTOS eBook                                  *

+    *                                                                         *

+    *        "Using the FreeRTOS Real Time Kernel - a Practical Guide"        *

+    *                  http://www.FreeRTOS.org/Documentation                  *

+    *                                                                         *

+    * A pdf reference manual is also available.  Both are usually delivered   *

+    * to your inbox within 20 minutes to two hours when purchased between 8am *

+    * and 8pm GMT (although please allow up to 24 hours in case of            *

+    * exceptional circumstances).  Thank you for your support!                *

+    *                                                                         *

+    ***************************************************************************

+

+    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 (version 2) as published by the

+    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.

+    ***NOTE*** The exception to the GPL is included to allow you to distribute

+    a combined work that includes FreeRTOS without being obliged to provide the

+    source code for proprietary components outside of the FreeRTOS kernel.

+    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 and the FreeRTOS license exception along with FreeRTOS; if not it

+    can be viewed here: http://www.freertos.org/a00114.html and also obtained

+    by writing to Richard Barry, contact details for whom are available on the

+    FreeRTOS WEB site.

+

+    1 tab == 4 spaces!

+

+    http://www.FreeRTOS.org - Documentation, latest information, license and

+    contact details.

+

+    http://www.SafeRTOS.com - A version that is certified for use in safety

+    critical systems.

+

+    http://www.OpenRTOS.com - Commercial support, development, porting,

+    licensing and training services.

+*/

+

+/*-----------------------------------------------------------

+ * Implementation of functions defined in portable.h for the SH2A port.

+ *----------------------------------------------------------*/

+

+/* Scheduler includes. */

+#include "FreeRTOS.h"

+#include "task.h"

+

+/* Library includes. */

+#include "string.h"

+

+/* Hardware specifics. */

+#include <iorx62n.h>

+

+/*-----------------------------------------------------------*/

+

+/* Tasks should start with interrupts enabled and in Supervisor mode, therefore

+PSW is set with U and I set, and PM and IPL clear. */

+#define portINITIAL_PSW     ( ( portSTACK_TYPE ) 0x00030000 )

+#define portINITIAL_FPSW    ( ( portSTACK_TYPE ) 0x00000100 )

+

+/*-----------------------------------------------------------*/

+

+/*

+ * Function to start the first task executing - written in asm code as direct

+ * access to registers is required.

+ */

+extern void prvStartFirstTask( void );

+

+/*

+ * The tick ISR handler.  The peripheral used is configured by the application

+ * via a hook/callback function.

+ */

+__interrupt void vTickISR( void );

+

+/*-----------------------------------------------------------*/

+

+extern void *pxCurrentTCB;

+

+/*-----------------------------------------------------------*/

+

+/*

+ * See header file for description.

+ */

+portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )

+{

+	/* R0 is not included as it is the stack pointer. */

+	

+	*pxTopOfStack = 0xdeadbeef;

+	pxTopOfStack--;

+ 	*pxTopOfStack = portINITIAL_PSW;

+	pxTopOfStack--;

+	*pxTopOfStack = ( portSTACK_TYPE ) pxCode;

+	

+	/* When debugging it can be useful if every register is set to a known

+	value.  Otherwise code space can be saved by just setting the registers

+	that need to be set. */

+	#ifdef USE_FULL_REGISTER_INITIALISATION

+	{

+		pxTopOfStack--;

+		*pxTopOfStack = 0xffffffff;	/* r15. */

+		pxTopOfStack--;

+		*pxTopOfStack = 0xeeeeeeee;

+		pxTopOfStack--;

+		*pxTopOfStack = 0xdddddddd;

+		pxTopOfStack--;

+		*pxTopOfStack = 0xcccccccc;

+		pxTopOfStack--;

+		*pxTopOfStack = 0xbbbbbbbb;

+		pxTopOfStack--;

+		*pxTopOfStack = 0xaaaaaaaa;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x99999999;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x88888888;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x77777777;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x66666666;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x55555555;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x44444444;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x33333333;

+		pxTopOfStack--;

+		*pxTopOfStack = 0x22222222;

+		pxTopOfStack--;

+	}

+	#else

+	{

+		pxTopOfStack -= 15;

+	}

+	#endif

+	

+	*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R1 */

+	pxTopOfStack--;				

+	*pxTopOfStack = portINITIAL_FPSW;

+	pxTopOfStack--;

+	*pxTopOfStack = 0x12345678; /* Accumulator. */

+	pxTopOfStack--;

+	*pxTopOfStack = 0x87654321; /* Accumulator. */

+

+	return pxTopOfStack;

+}

+/*-----------------------------------------------------------*/

+

+portBASE_TYPE xPortStartScheduler( void )

+{

+extern void vApplicationSetupTimerInterrupt( void );

+

+	/* Use pxCurrentTCB just so it does not get optimised away. */

+	if( pxCurrentTCB != NULL )

+	{

+		/* Call an application function to set up the timer that will generate the

+		tick interrupt.  This way the application can decide which peripheral to

+		use.  A demo application is provided to show a suitable example. */

+		vApplicationSetupTimerInterrupt();

+

+		/* Enable the software interrupt. */		

+		_IEN( _ICU_SWINT ) = 1;

+		

+		/* Ensure the software interrupt is clear. */

+		_IR( _ICU_SWINT ) = 0;

+		

+		/* Ensure the software interrupt is set to the kernel priority. */

+		_IPR( _ICU_SWINT ) = configKERNEL_INTERRUPT_PRIORITY;

+

+		/* Start the first task. */

+		prvStartFirstTask();

+	}

+

+	/* Should not get here. */

+	return pdFAIL;

+}

+/*-----------------------------------------------------------*/

+

+#pragma vector = VECT_CMT0_CMI0

+__interrupt void vTickISR( void )

+{

+	/* Re-enable interrupts. */

+	__enable_interrupt();

+	

+	/* Increment the tick, and perform any processing the new tick value

+	necessitates. */

+	vTaskIncrementTick();

+	

+	/* Only select a new task if the preemptive scheduler is being used. */

+	#if( configUSE_PREEMPTION == 1 )

+		taskYIELD();

+	#endif

+}

+/*-----------------------------------------------------------*/

+

+void vPortEndScheduler( void )

+{

+	/* Not implemented as there is nothing to return to. */

+}

+/*-----------------------------------------------------------*/

+

+

+

diff --git a/Source/portable/IAR/RX600/port_asm.s b/Source/portable/IAR/RX600/port_asm.s
new file mode 100644
index 0000000..f057dee
--- /dev/null
+++ b/Source/portable/IAR/RX600/port_asm.s
@@ -0,0 +1,185 @@
+/*

+    FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.

+

+    ***************************************************************************

+    *                                                                         *

+    * If you are:                                                             *

+    *                                                                         *

+    *    + New to FreeRTOS,                                                   *

+    *    + Wanting to learn FreeRTOS or multitasking in general quickly       *

+    *    + Looking for basic training,                                        *

+    *    + Wanting to improve your FreeRTOS skills and productivity           *

+    *                                                                         *

+    * then take a look at the FreeRTOS eBook                                  *

+    *                                                                         *

+    *        "Using the FreeRTOS Real Time Kernel - a Practical Guide"        *

+    *                  http://www.FreeRTOS.org/Documentation                  *

+    *                                                                         *

+    * A pdf reference manual is also available.  Both are usually delivered   *

+    * to your inbox within 20 minutes to two hours when purchased between 8am *

+    * and 8pm GMT (although please allow up to 24 hours in case of            *

+    * exceptional circumstances).  Thank you for your support!                *

+    *                                                                         *

+    ***************************************************************************

+

+    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 (version 2) as published by the

+    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.

+    ***NOTE*** The exception to the GPL is included to allow you to distribute

+    a combined work that includes FreeRTOS without being obliged to provide the

+    source code for proprietary components outside of the FreeRTOS kernel.

+    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 and the FreeRTOS license exception along with FreeRTOS; if not it

+    can be viewed here: http://www.freertos.org/a00114.html and also obtained

+    by writing to Richard Barry, contact details for whom are available on the

+    FreeRTOS WEB site.

+

+    1 tab == 4 spaces!

+

+    http://www.FreeRTOS.org - Documentation, latest information, license and

+    contact details.

+

+    http://www.SafeRTOS.com - A version that is certified for use in safety

+    critical systems.

+

+    http://www.OpenRTOS.com - Commercial support, development, porting,

+    licensing and training services.

+*/

+

+	PUBLIC _prvStartFirstTask

+	PUBLIC _vSoftwareInterruptISR

+	

+	EXTERN _pxCurrentTCB

+	EXTERN _vTaskSwitchContext

+

+	RSEG CODE:CODE(4)

+	

+_prvStartFirstTask:

+

+		/* When starting the scheduler there is nothing that needs moving to the

+		interrupt stack because the function is not called from an interrupt.

+		Just ensure the current stack is the user stack. */

+		SETPSW	U						

+

+		/* Obtain the location of the stack associated with which ever task

+		pxCurrentTCB is currently pointing to. */

+		MOV.L	#_pxCurrentTCB, R15		

+		MOV.L	[R15], R15				

+		MOV.L	[R15], R0				

+

+		/* Restore the registers from the stack of the task pointed to by

+		pxCurrentTCB. */

+	    POP		R15					

+		

+		/* Accumulator low 32 bits. */

+	    MVTACLO	R15 				

+	    POP		R15					

+		

+		/* Accumulator high 32 bits. */

+	    MVTACHI	R15 				

+	    POP		R15					

+		

+		/* Floating point status word. */

+	    MVTC		R15, FPSW 			

+		

+		/* R1 to R15 - R0 is not included as it is the SP. */

+	    POPM		R1-R15 				

+		

+		/* This pops the remaining registers. */

+	    RTE							

+	    NOP							

+	    NOP							

+

+/*-----------------------------------------------------------*/

+

+_vSoftwareInterruptISR:

+

+		/* Re-enable interrupts. */

+		SETPSW		I

+

+		/* Move the data that was automatically pushed onto the interrupt stack when

+		the interrupt occurred from the interrupt stack to the user stack.

+	

+		R15 is saved before it is clobbered. */

+		PUSH.L		R15							

+	

+		/* Read the user stack pointer. */

+		MVFC		USP, R15					

+	

+		/* Move the address down to the data being moved. */

+		SUB		#12, R15					

+		MVTC		R15, USP					

+	

+		/* Copy the data across, R15, then PC, then PSW. */

+		MOV.L		[ R0 ], [ R15 ]				

+		MOV.L 		4[ R0 ], 4[ R15 ]			

+		MOV.L		8[ R0 ], 8[ R15 ]			

+

+		/* Move the interrupt stack pointer to its new correct position. */

+		ADD		#12, R0						

+	

+		/* All the rest of the registers are saved directly to the user stack. */

+		SETPSW		U							

+

+		/* Save the rest of the general registers (R15 has been saved already). */

+		PUSHM		R1-R14						

+	

+		/* Save the FPSW and accumulator. */

+		MVFC		FPSW, R15					

+		PUSH.L		R15							

+		MVFACHI 	R15							

+		PUSH.L		R15							

+		

+		/* Middle word. */

+		MVFACMI	R15							

+		

+		/* Shifted left as it is restored to the low order word. */

+		SHLL		#16, R15					

+		PUSH.L		R15							

+

+		/* Save the stack pointer to the TCB. */

+		MOV.L		#_pxCurrentTCB, R15			

+		MOV.L		[ R15 ], R15				

+		MOV.L		R0, [ R15 ]					

+			

+		/* Ensure the interrupt mask is set to the syscall priority while the kernel

+		structures are being accessed. */

+		MVTIPL		#4 							

+

+		/* Select the next task to run. */

+		BSR.A		_vTaskSwitchContext			

+

+		/* Reset the interrupt mask as no more data structure access is required. */

+		MVTIPL		#1							

+

+		/* Load the stack pointer of the task that is now selected as the Running

+		state task from its TCB. */

+		MOV.L		#_pxCurrentTCB,R15			

+		MOV.L		[ R15 ], R15				

+		MOV.L		[ R15 ], R0					

+

+		/* Restore the context of the new task.  The PSW (Program Status Word) and

+		PC will be popped by the RTE instruction. */

+		POP			R15							

+		MVTACLO 	R15							

+		POP			R15							

+		MVTACHI 	R15							

+		POP			R15							

+		MVTC		R15, FPSW					

+		POPM		R1-R15						

+		RTE									

+		NOP									

+		NOP									

+		

+		/*:: i(configMAX_SYSCALL_INTERRUPT_PRIORITY), i(configKERNEL_INTERRUPT_PRIORITY)*/

+/*-----------------------------------------------------------*/

+

+

+

+		END

+		

diff --git a/Source/portable/IAR/RX600/portmacro.h b/Source/portable/IAR/RX600/portmacro.h
new file mode 100644
index 0000000..a8444df
--- /dev/null
+++ b/Source/portable/IAR/RX600/portmacro.h
@@ -0,0 +1,138 @@
+/*

+    FreeRTOS V6.0.5 - Copyright (C) 2010 Real Time Engineers Ltd.

+

+    ***************************************************************************

+    *                                                                         *

+    * If you are:                                                             *

+    *                                                                         *

+    *    + New to FreeRTOS,                                                   *

+    *    + Wanting to learn FreeRTOS or multitasking in general quickly       *

+    *    + Looking for basic training,                                        *

+    *    + Wanting to improve your FreeRTOS skills and productivity           *

+    *                                                                         *

+    * then take a look at the FreeRTOS eBook                                  *

+    *                                                                         *

+    *        "Using the FreeRTOS Real Time Kernel - a Practical Guide"        *

+    *                  http://www.FreeRTOS.org/Documentation                  *

+    *                                                                         *

+    * A pdf reference manual is also available.  Both are usually delivered   *

+    * to your inbox within 20 minutes to two hours when purchased between 8am *

+    * and 8pm GMT (although please allow up to 24 hours in case of            *

+    * exceptional circumstances).  Thank you for your support!                *

+    *                                                                         *

+    ***************************************************************************

+

+    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 (version 2) as published by the

+    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.

+    ***NOTE*** The exception to the GPL is included to allow you to distribute

+    a combined work that includes FreeRTOS without being obliged to provide the

+    source code for proprietary components outside of the FreeRTOS kernel.

+    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 and the FreeRTOS license exception along with FreeRTOS; if not it

+    can be viewed here: http://www.freertos.org/a00114.html and also obtained

+    by writing to Richard Barry, contact details for whom are available on the

+    FreeRTOS WEB site.

+

+    1 tab == 4 spaces!

+

+    http://www.FreeRTOS.org - Documentation, latest information, license and

+    contact details.

+

+    http://www.SafeRTOS.com - A version that is certified for use in safety

+    critical systems.

+

+    http://www.OpenRTOS.com - Commercial support, development, porting,

+    licensing and training services.

+*/

+

+

+#ifndef PORTMACRO_H

+#define PORTMACRO_H

+

+#include <intrinsics.h>

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/*-----------------------------------------------------------

+ * Port specific definitions.

+ *

+ * The settings in this file configure FreeRTOS correctly for the

+ * given hardware and compiler.

+ *

+ * These settings should not be altered.

+ *-----------------------------------------------------------

+ */

+

+/* Type definitions - these are a bit legacy and not really used now, other than

+portSTACK_TYPE and portBASE_TYPE. */

+#define portCHAR		char

+#define portFLOAT		float

+#define portDOUBLE		double

+#define portLONG		long

+#define portSHORT		short

+#define portSTACK_TYPE	unsigned portLONG

+#define portBASE_TYPE	long

+

+#if( configUSE_16_BIT_TICKS == 1 )

+	typedef unsigned portSHORT portTickType;

+	#define portMAX_DELAY ( portTickType ) 0xffff

+#else

+	typedef unsigned portLONG portTickType;

+	#define portMAX_DELAY ( portTickType ) 0xffffffff

+#endif

+/*-----------------------------------------------------------*/

+

+/* Hardware specifics. */

+#define portBYTE_ALIGNMENT			8	/* Could make four, according to manual. */

+#define portSTACK_GROWTH			-1

+#define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )		

+#define portNOP()					__no_operation()

+

+/* The location of the software interrupt register.  Software interrupts use

+vector 27. */

+#define portITU_SWINTR			( ( unsigned char * ) 0x000872E0 )

+#define portYIELD()				*portITU_SWINTR = 0x01; portNOP(); portNOP(); portNOP(); portNOP(); portNOP()

+#define portYIELD_FROM_ISR( x )	if( x != pdFALSE ) portYIELD()

+

+/*

+ * These macros should be called directly, but through the taskENTER_CRITICAL()

+ * and taskEXIT_CRITICAL() macros.

+ */

+#define portENABLE_INTERRUPTS() 	__set_interrupt_level( 0 )

+#define portDISABLE_INTERRUPTS() 	__set_interrupt_level( configMAX_SYSCALL_INTERRUPT_PRIORITY )

+

+/* Critical nesting counts are stored in the TCB. */

+#define portCRITICAL_NESTING_IN_TCB ( 1 )

+

+/* The critical nesting functions defined within tasks.c. */

+extern void vTaskEnterCritical( void );

+extern void vTaskExitCritical( void );

+#define portENTER_CRITICAL()	vTaskEnterCritical();

+#define portEXIT_CRITICAL()		vTaskExitCritical();

+

+/* As this port allows interrupt nesting... */

+unsigned long ulPortGetIPL( void );

+void vPortSetIPL( unsigned long ulNewIPL );

+#define portSET_INTERRUPT_MASK_FROM_ISR() __get_interrupt_level(); portDISABLE_INTERRUPTS()

+#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ) __set_interrupt_level( uxSavedInterruptStatus )

+

+/*-----------------------------------------------------------*/

+

+/* Task function macros as described on the FreeRTOS.org WEB site. */

+#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 */

+