00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _vxSIS3610InterruptService_hxx
00018 #define _vxSIS3610InterruptService_hxx
00019
00020
00021 #include <vxWorks.h>
00022 #include <semLib.h>
00023 #include <taskLib.h>
00024
00025
00026 #include <InterruptibleObject.hxx>
00027 #include <sis3610.h>
00028
00029
00030
00031 extern "C" {
00032 int s3610Init(uint32_t addr, uint32_t addr_inc, int nmod);
00033 int s3610IntConnect (int id, VOIDFUNCPTR routine, int arg, UINT16 level, UINT16 vector);
00034 void s3610IntAck(int intMask);
00035 void s3610IntEnable(int intMask);
00036 void s3610IntDisable(int intMask);
00037 }
00038
00039
00040 namespace codaObject {
00041
00042
00043
00044 #define SIS_DISPATCH_PRIORITY 100
00045 #define SIS_INTERRUPT_LEVEL 5
00046 #define SIS_INTERRUPT_VECTOR 0xe1
00047
00048
00049
00050
00051
00052
00056 class vxSIS3610InterruptService : public InterruptService {
00057
00058 private:
00059 static void ISR(int sem);
00060
00061
00062 public:
00063 vxSIS3610InterruptService(uint32_t base_addr, uint32_t intMask, int dispatchPriority = SIS_DISPATCH_PRIORITY,
00064 uint16_t interruptLevel = SIS_INTERRUPT_LEVEL, uint16_t interruptVector = SIS_INTERRUPT_VECTOR);
00065 virtual bool setupInterrupt(void);
00066 virtual bool enableInterrupt(void);
00067 virtual bool pauseInterrupt(void) {return(true);}
00068 virtual bool resumeInterrupt(void) {return(true);}
00069 virtual bool deleteInterrupt(void);
00070
00071 virtual int dispatchInterrupt(void);
00072
00073
00074 protected:
00075 int myInterruptTaskId;
00076 SEM_ID mySemId;
00077 uint32_t myBaseAddr;
00078 uint32_t myIntMask;
00079 int myDispatchPriority;
00080 uint16_t myInterruptLevel;
00081 uint16_t myInterruptVector;
00082 };
00083
00084
00085
00086
00087
00088
00089 }
00090
00091
00092 #endif