From: vrokas Date: Sat, 2 Apr 2005 13:35:31 +0000 (+0000) Subject: * new missed to commit in SDCC v2.4.8 #1.988 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=6a508b24fe99470727ccbe9b11b45d5a1013db8e;p=fw%2Fsdcc * new missed to commit in SDCC v2.4.8 #1.988 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3715 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/device/include/pic16/signal.h b/device/include/pic16/signal.h new file mode 100644 index 00000000..5f080d2e --- /dev/null +++ b/device/include/pic16/signal.h @@ -0,0 +1,107 @@ + +/* + * Signal handler header + * + * written by Vangelis Rokas, 2005 + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This library 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * + * $Id$ + */ + +#ifndef __SIGNAL_H__ +#define __SIGNAL_H__ + +#define RBIF 0x0 +#define INT0IF 0x1 +#define TMR0IF 0x2 + +#define INT1IF 0x0 +#define INT2IF 0x1 + +#define TMR1IF 0x0 +#define TMR2IF 0x1 +#define CCP1IF 0x2 +#define SSPIF 0x3 +#define TXIF 0x4 +#define RCIF 0x5 +#define ADIF 0x6 +#define PSPIF 0x7 + +#define CCP2IF 0x0 +#define TMR3IF 0x1 +#define LVDIF 0x2 +#define BCLIF 0x3 +#define EEIF 0x4 + +/* interrupt testing arguments */ +#define SIG_RB _INTCON, RBIF +#define SIG_INT0 _INTCON, INT0IF +#define SIG_INT1 _INTCON3, INT1IF +#define SIG_INT2 _INTCON3, INT2IF +#define SIG_CCP1 _PIR1, CCP1IF +#define SIG_CCP2 _PIR2, CCP2IF +#define SIG_TMR0 _INTCON, TMR0IF +#define SIG_TMR1 _PIR1, TMR1IF +#define SIG_TMR2 _PIR1, TMR2IF +#define SIG_TMR3 _PIR2, TMR3IF +#define SIG_EE _PIR2, EEIF +#define SIG_BCOL _PIR2, BCLIF +#define SIG_LVD _PIR2, LVDIF +#define SIG_PSP _PIR1, PSPIF +#define SIG_AD _PIR1, ADIF +#define SIG_RC _PIR1, RCIF +#define SIG_TX _PIR1, TXIF +#define SIG_MSSP _PIR1, SSPIF + + +#define DEF_ABSVECTOR(vecno, name) \ +void __ivt_ ## name(void) __interrupt vecno __naked \ +{\ + __asm \n\ + goto _ ## name \n\ + __endasm; \ +} + +#define DEF_INTHIGH(name) \ +DEF_ABSVECTOR(1, name) \ +void name(void) __naked __interrupt \ +{\ + __asm \n + + +#define DEF_INTLOW(name) \ +DEF_ABSVECTOR(2, name) \ +void name(void) __naked __interrupt \ +{\ + __asm \n + + +#define END_DEF \ + retfie \n\ + __endasm;\ +} + + +#define DEF_HANDLER(sig, handler) \ + btfsc sig \n\ + goto _ ## handler + + +#define SIGHANDLER(handler) void handler (void) __interrupt +#define SIGHANDLERNAKED(handler) void handler (void) __naked __interrupt + +#endif /* __SIGNAL_H__ */