;/*
;    FreeRTOS V6.0.0 - Copyright (C) 2009 Real Time Engineers Ltd.
;
;    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.
;    Alternative commercial license and support terms are also available upon
;    request.  See the licensing section of http://www.FreeRTOS.org for full
;    license details.
;
;    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.
;
;
;    ***************************************************************************
;    *                                                                         *
;    * The FreeRTOS eBook and reference manual are available to purchase for a *
;    * small fee. Help yourself get started quickly while also helping the     *
;    * FreeRTOS project! See http://www.FreeRTOS.org/Documentation for details *
;    *                                                                         *
;    ***************************************************************************
;
;    1 tab == 4 spaces!
;
;    Please ensure to read the configuration and relevant port sections of the
;    online documentation.
;
;    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.
;*/

;
; This file defines a wrapper for the interrupt generated each time the button
; on the target board is pushed.  The asm wrapper is used to save and restore
; the task context as a context switch may occur within the ISR itself.
; The C portion of the ISR is defined within ButtonTask.c.
;

; Include the portSAVE_CONTEXT and portRESTORE_CONTEXT macros.
#include "ISR_Support.h"

	PUBLIC    vButtonISRWrapper
	EXTERN    vButtonISRHandler

    RSEG CODE:CODE
	
vButtonISRWrapper:
	; Save the current task context.	
	portSAVE_CONTEXT

	; Call the C portion of the ISR.
	call vButtonISRHandler

	; Restore the context of whichever task is to run next - which might be
	; different from the task that was originally interrupted.
	portRESTORE_CONTEXT
	reti



	; Place the ISR into the vector table.
	COMMON INTVEC:CODE:ROOT(1)
	ORG 8
`??vButtonISRWrapper??INTVEC 8`:
	DW vButtonISRWrapper


	END
