//-------------------------------------------------------------------------- // // 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