#include #include #include #define RLD 0x80 #define XRLD 0x00 #define YRLD XRLD #define Rst_BP 0x01 #define Rst_CTR 0x02 #define Rst_FLAGS 0x04 #define Rst_E 0x06 #define Trf_PR_CTR 0x08 #define Trf_CTR_OL 0x10 #define Trf_PS0_PSC 0x18 #define CMR 0xA0 #define XCMR 0x20 #define YCMR XCMR #define BINCnt 0x00 #define BCDCnt 0x01 #define NrmCnt 0x00 #define RngLmt 0x02 #define NRcyc 0x04 #define ModN 0x06 #define NQDX 0x00 #define QDX1 0x08 #define QDX2 0x10 #define QDX4 0x18 #define IOR 0xC0 #define XIOR 0x40 #define YIOR 0x00 #define DisAB 0x00 #define EnAB 0x01 #define LCTR 0x00 #define LOL 0x02 #define RCTR 0x00 #define ABGate 0x04 #define CYBW 0x00 #define CPBW 0x08 #define CB_UPDN 0x10 #define IDX_ERR 0x18 #define IDR 0xE0 #define XIDR 0x60 #define YIDR XIDR #define DisIDX 0x00 #define EnIDX 0x01 #define NIDX 0x00 #define PIDX 0x02 #define LIDX 0x00 #define RIDX 0x04 void Init_7266(unsigned short Addr) { //Setup IOR reg outportb(Addr + 1, IOR + DisAB + LOL + ABGate + CYBW); //Setup RLD reg outportb(Addr + 1, RLD + Rst_BP + Rst_FLAGS); outportb(Addr + 0, 0x06); outportb(Addr + 2, 0x06); outportb(Addr + 1, RLD + Rst_E + Trf_PS0_PSC); outportb(Addr + 1, RLD + Rst_BP + Rst_CTR); //Setup IDR reg outportb(Addr + 1, IDR + EnIDX + NIDX + LIDX); //Setup CMR reg outportb(Addr + 1, CMR + BINCnt + ModN + QDX4); //Setup PR reg for modulo N counter to 0x123456 outportb(Addr + 0, 0x56); outportb(Addr + 0, 0x34); outportb(Addr + 0, 0x12); //Setup PR reg for modulo N counter to 0x123456 outportb(Addr + 2, 0x56); outportb(Addr + 2, 0x34); outportb(Addr + 2, 0x12); //Enable counters outportb(Addr + 1, IOR + EnAB); } void Write_7266_PR(unsigned short Addr, unsigned long Data) { outportb(Addr + 1, RLD + Rst_BP); outportb(Addr + 0, Data); Data >>= 8; outportb(Addr + 0, Data); Data >>= 8; outportb(Addr + 0, Data); } unsigned long Read_7266_OL(unsigned short Addr) { unsigned long Data = 0; unsigned char pData = &Data; outportb(Addr + 1, RLD + Rst_BP + Trf_CTR_OL); *pData = inportb(Addr + 0); ++pData; *pData = inportb(Addr + 0); ++pData; *pData = inportb(Addr + 0); return Data; } unsigned char Get_7266_Flags(unsigned short Addr) { return inportb(Addr + 1); }