Difference Analysis Generated by HtmlDiff on 10/26/2004 1:34 PM  

Base file: C:\CY4632_RDK_1_21\Firmware\Source Code\RDK Keyboard\isr.h

Modified file: C:\CY4632_RDK_1_3\Firmware\Source Code\RDK Keyboard\isr.h

//--------------------------------------------------------------------------
//
// Interrupt service routines header file
//
//--------------------------------------------------------------------------
// $Archive: /WirelessUSB/WUSB Kits/CY4632 LS KBM RDK/DocSrc/CD_Root/Firmware/Source Code/RDK Keyboard/isr.h $
// $Modtime: 3/24/04 5:27p9/29/04 2:19p $
// $Revision: 67 $
//--------------------------------------------------------------------------
//
// Copyright 2003-2004, Cypress Semiconductor Corporation.
//
// This software is owned by Cypress Semiconductor Corporation (Cypress)
// and is protected by and subject to worldwide patent protection (United
// States and foreign), United States copyright laws and international 
// treaty provisions. Cypress hereby grants to licensee a personal, 
// non-exclusive, non-transferable license to copy, use, modify, create 
// derivative works of, and compile the Cypress Source Code and derivative 
// works for the sole purpose of creating custom software in support of 
// licensee product to be used only in conjunction with a Cypress integrated 
// circuit as specified in the applicable agreement. Any reproduction, 
// modification, translation, compilation, or representation of this 
// software except as specified above is prohibited without the express 
// written permission of Cypress.
//
// Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, 
// WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
// Cypress reserves the right to make changes without further notice to the
// materials described herein. Cypress does not assume any liability arising
// out of the application or use of any product or circuit described herein.
// Cypress does not authorize its products for use as critical components in
// life-support systems where a malfunction or failure may reasonably be
// expected to result in significant injury to the user. The inclusion of
// Cypress’ product in a life-support systems application implies that the
// manufacturer assumes all risk of such use and in doing so indemnifies
// Cypress against all charges.
//
// Use may be limited by and subject to the applicable Cypress software
// license agreement.
//
//--------------------------------------------------------------------------

#ifndef _ISR_H
#define _ISR_H

//--------------------------------------
// Included files
//--------------------------------------



//--------------------------------------
// API Definitions and Types
//--------------------------------------

typedef enum
typedef void (*GPIO_ISR_HANDLER)(void);
{
    INT_KEYS    = 0x1,
    INT_RADIO   = 0x2,
    INT_BIND    = 0x4,
} KEYBOARD_ISR;

//--------------------------------------
// API Function Declarations
//--------------------------------------

#pragma interrupt_handler isr_gpio

extern void isr_gpio(void);
extern void isr_init(void);
extern void isr_enable(KEYBOARD_ISR);
extern void isr_disable(KEYBOARD_ISR);
extern BOOL isr_is_enabled(KEYBOARD_ISR);
#define ISR_ENABLE(port, mask) { port |= mask; }
#define ISR_DISABLE(port, mask) { port &= ~mask; }

// The compiler is ineffecient when making function calls from a function
// that has been declared as in interrupt handler by using
// #pragma interrupt_handler.  It was desired to maintain at least one
// level of indirection for modularity on the interrupt handler routines.
// As a result, all ISR handlers were flattened in each module and declared
// as an interrupt handler by using #pragma interrupt_handler.  Now each
// ISR only saves the required registers to the stack instead of the full
// virtual register file.  The issue with declaring a function as an 
// interrupt handler is that the compiler uses the RETI instruction.  This 
// required the development of gpio_isr_redirector().  This function adjusts
// the stack for an RETI so that it looks like a regular function call.
// This allows multiple functions to be called from the global ISR handler,
// isr_gpio(), which is just a regular function.  Any registers used by
// the isr_gpio() function are saved in the PSoCGPIOINT vector.

// Defined in PSoCGPIOINT.asm
#pragma fastcall gpio_isr_redirector
extern void gpio_isr_redirector(GPIO_ISR_HANDLER);

#endif   // _ISR_H