/* DEMO11: Load EEPROM from file */ /* step1 : Run DEMO11.EXE */ /* -------------------------------------------------------------- */ #include "PIO.H" #include #define MaxChannel 16 int save_neg_10v_to_eeprom(void); int save_pos_10v_to_eeprom(void); int save_00mA_to_eeprom(void); int save_20mA_to_eeprom(void); WORD wBase,wIrq; WORD wN10V[16],wP10V[16],w00mA[16],w20mA[16],EEP; int main() { int i,j,k; WORD wBoards,wRetVal,t1,t2,t3,t4,t5,t6; WORD wSubVendor,wSubDevice,wSubAux,wSlotBus,wSlotDevice; FILE *fp; char filename[20]; clrscr(); /* step1 : find address-mapping of PIO/PISO cards */ wRetVal=PIO_DriverInit(&wBoards,0x80,0x04,0x00);/*for PIO-DA16/8/4*/ printf("\n(1) Threr are %d PIO-DA16/8/4 Cards in this PC",wBoards); if ( wBoards==0 ) exit(0); printf("\n\n-------------- The Configuration Space --------------"); for(i=0;i "); ShowPioPiso(wSubVendor,wSubDevice,wSubAux); } PIO_GetConfigAddressSpace(0,&wBase,&wIrq,&t1,&t2,&t3,&t4,&t5); /* select card_0 */ /* step2 : enable all D/I/O port */ outportb(wBase,0x11); /* /RESET -> 1 */ outportb(wBase+2,0x1c); /* AUX 4/3/2 are D/O, othes D/I */ outportb(wBase+3,0); /* all D/O are Low */ printf("\n\n(2) Enter source file name : "); scanf("%s",filename); printf("\n\n(3) Load EEPROM data from %s",filename); fp=fopen(filename,"rb"); for (i=0; i<64;i++) { fscanf(fp,"%5x",&j); if (i<16) { wN10V[i]=j; } if ((i>=16)&&(i<32)) { wP10V[i-16]=j; } if ((i>=32)&&(i<48)) { w00mA[i-32]=j; } if (i>=48) { w20mA[i-48]=j; } } save_neg_10v_to_eeprom(); save_pos_10v_to_eeprom(); save_00mA_to_eeprom(); save_20mA_to_eeprom(); fclose(fp); outportb(wBase+5,0); /* disable all interrupt */ outportb(wBase+3,0); /* all D/O are Low */ outportb(wBase+2,0); /* all AUX as D/I */ PIO_DriverClose(); } /* -------------------------------------------------------------- */ /* AUX2= D/O = CS of EEP AUX3= D/O = SK of EEP */ /* AUX4= D/O = DI of EEP AUX5= D/I = DO of EEP */ /* -------------------------------------------------------------- */ COMM() /* send start 2-bit (0,1) */ { EEP=0x04; outportb(wBase+3,EEP); /* CS=H */ EEP=0x0C; outportb(wBase+3,EEP); /* SK=H */ /* DI=0 */ EEP=0x04; outportb(wBase+3,EEP); /* SK=L */ EEP=0x14; outportb(wBase+3,EEP); /* DI=1 */ EEP=0x1c; outportb(wBase+3,EEP); /* SK=H */ } /* -------------------------------------------------------------- */ WR_BYTE(int val) /* send the next 8-bit */ { int i,j; for (i=0; i<8; i++) { EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ j=val&0x80; val=val<<1; if (j==0) /* DI=0 */ { EEP=EEP&0x0C; outportb(wBase+3,EEP); } else /* DI=1 */ { EEP=EEP|0x10; outportb(wBase+3,EEP); } EEP=EEP|0x08; outportb(wBase+3,EEP); /* SK=H */ } } /* -------------------------------------------------------------- */ RD_BYTE() /* read the next 8-bit */ { int i,j,val,k; val=0x80; k=0; for (i=0; i<8; i++) { EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ j=(inportb(wBase+7))&0x20; if (j!=0) k+=val; /* DO=1 */ EEP=EEP|0x08; outportb(wBase+3,EEP); /* SK=H */ val=val>>1; } return(k); } /* -------------------------------------------------------------- */ EEP_WR_EN() /* write Enable */ { COMM(); WR_BYTE(0x30); /* write enable command */ EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ EEP=EEP&0x18; outportb(wBase+3,EEP); /* CS=L */ EEP=EEP&0x0C; outportb(wBase+3,EEP); /* DI=0 */ } /* -------------------------------------------------------------- */ EEP_WR_DIS() /* write Disable */ { COMM(); WR_BYTE(0); /* write disable command */ EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ EEP=EEP&0x18; outportb(wBase+3,EEP); /* CS=L */ EEP=EEP&0x0C; outportb(wBase+3,EEP); /* DI=0 */ } /* -------------------------------------------------------------- */ EEP_WRITE(int ADDR, int HI, int LO) /* write 16-bit data to EEP */ { int i,j,k; COMM(); ADDR=ADDR|0x40; WR_BYTE(ADDR); /* write command & address */ WR_BYTE(HI); /* high 8-bit data */ WR_BYTE(LO); /* low 8-bit data */ EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ EEP=EEP&0x18; outportb(wBase+3,EEP); /* CS=L */ EEP=EEP&0x0C; outportb(wBase+3,EEP); /* DI=0 */ for (i=0; i<10; i++) /* delay>250 ns (for EEP) */ { EEP=EEP|0x08; outportb(wBase+3,EEP); /* SK=H */ EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ } EEP=EEP|0x04; outportb(wBase+3,EEP); /* CS=H */ for (k=0; k<10; k++) /* wait until write finish */ for (i=0; i<30000; i++) { EEP=EEP|0x08; outportb(wBase+3,EEP);/* SK=H */ j=inportb(wBase+7)&0x20; EEP=EEP&0x14; outportb(wBase+3,EEP);/* SK=L */ if (j!=0) return(0); /* write is finished */ } EEP=EEP&0x18; outportb(wBase+3,EEP); /* CS=L */ return(1); /* error --> time out ? */ } /* -------------------------------------------------------------- */ EEP_READ(int ADDR, int *HI, int *LO) /* read 16-bit data from EEP */ { int i,j,k; COMM(); ADDR=ADDR|0x80; WR_BYTE(ADDR); /* read command & address */ EEP=EEP&0x0C; outportb(wBase+3,EEP); /* DI=0 */ EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ EEP=EEP|0x08; outportb(wBase+3,EEP); /* SK=H */ EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ (*HI)=RD_BYTE(); /* read high 8-bit data */ (*LO)=RD_BYTE(); /* read low 8-bit data */ EEP=EEP&0x14; outportb(wBase+3,EEP); /* SK=L */ EEP=EEP&0x18; outportb(wBase+3,EEP); /* CS=L */ } /* -------------------------------------------------------------- */ save_neg_10v_to_eeprom() { WORD k,high,low; EEP_WR_EN(); for (k=0; k>8)&0x0ff; EEP_WRITE(k+0,high,low); } } /* -------------------------------------------------------------- */ save_pos_10v_to_eeprom() { WORD k,high,low; EEP_WR_EN(); for (k=0; k>8)&0x0ff; EEP_WRITE(k+16,high,low); } } /* -------------------------------------------------------------- */ save_00mA_to_eeprom() { WORD k,high,low; EEP_WR_EN(); for (k=0; k>8)&0x0ff; EEP_WRITE(k+32,high,low); } } /* -------------------------------------------------------------- */ save_20mA_to_eeprom() { WORD k,high,low; EEP_WR_EN(); for (k=0; k>8)&0x0ff; EEP_WRITE(k+48,high,low); } }