;/*
; * FreeRTOS Kernel V10.0.0
; * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
; *
; * Permission is hereby granted, free of charge, to any person obtaining a copy of
; * this software and associated documentation files (the "Software"), to deal in
; * the Software without restriction, including without limitation the rights to
; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; * the Software, and to permit persons to whom the Software is furnished to do so,
; * subject to the following conditions:
; *
; * The above copyright notice and this permission notice shall be included in all
; * copies or substantial portions of the Software. If you wish to use our Amazon
; * FreeRTOS name, please do so in a fair use way that does not cause confusion.
; *
; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; *
; * http://www.FreeRTOS.org
; * http://aws.amazon.com/freertos
; *
; * 1 tab == 4 spaces!
; */

;
; 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
