#include #include #include #include "..\..\..\..\lib\7188xb.h" #define EOITYPE_INT0 0x0c #define EOITYPE_INT1 0x0d #define EOITYPE_INT4 0x10 #define INT_EOI 0xff22 // End-of-interrupt register #define INT_MASK 0xff28 // Interrupt mask register extern read_enc1(unsigned long *); extern read_enc2(unsigned long *); extern read_enc3(unsigned long *); unsigned long EncLatch1,EncLatch2,EncLatch3; //------------------------------------------ unsigned long OldIntVect0=0,OldIntVect1=0,OldIntVect4=0; void interrupt Int0Isr(void) { read_enc1(&EncLatch1); outpw(INT_EOI,EOITYPE_INT0); } void InstallInt0Isr(void) { //Install interrupt service routine for Z1 OldIntVect0=IntVect[0x0C]; // save old ISR IntVect[0x0C]=(unsigned long)Int0Isr; // install new ISR outpw(INT_MASK, inpw(INT_MASK)&0xffef);// enable INT-0 } void RestoreInt0Isr(void) { if(OldIntVect0){ IntVect[0x0C]=OldIntVect0; // restore OLD ISR outpw(INT_MASK,inpw(INT_MASK)|0x0010);// disable INT-0 } } // ----------------------- void interrupt Int1Isr(void) { read_enc2(&EncLatch2); outpw(INT_EOI,EOITYPE_INT1); } void InstallInt1Isr(void) { //Install interrupt service routine for Z2 OldIntVect1=IntVect[0x0D]; // save old ISR IntVect[0x0D]=(unsigned long)Int1Isr; // install new ISR outpw(INT_MASK, inpw(INT_MASK)&0xffdf);// enable INT-1 } void RestoreInt1Isr(void) { if(OldIntVect1){ IntVect[0x0D]=OldIntVect1; // restore OLD ISR outpw(INT_MASK,inpw(INT_MASK)|0x0020);// disable INT-1 } } //---------------------------- void interrupt Int4Isr(void) { read_enc3(&EncLatch3); outpw(INT_EOI,EOITYPE_INT4); } void InstallInt4Isr(void) { //Install interrupt service routine for Z3 OldIntVect0=IntVect[0x10]; // save old ISR IntVect[0x10]=(unsigned long)Int4Isr; // install new ISR outpw(INT_MASK, inpw(INT_MASK)&0xfeff);// enable INT-4 } void RestoreInt4Isr(void) { if(OldIntVect4){ IntVect[0x10]=OldIntVect4; // restore OLD ISR outpw(INT_MASK,inpw(INT_MASK)|0x0100);// disable INT-4 } }