Agilent Technologies E1442-90003 Switch User Manual


 
Register-Based Programming 97Appendix B
Close and Open
Channels
/********** close and open channels **********/
/* set all bits in register for channels 0-15 (offset 10) to 1 */
iwpoke((unsigned short *)(base_addr + 0x10), 0xffff);
/* read the E1442A relay control registers and print their value*/
/* relay control registers always return FFFF (hex) */
chan_0_15_reg = iwpeek((unsigned short *)(base_addr + 0x10));
chan_16_31_reg = iwpeek((unsigned short *)(base_addr + 0x12));
chan_32_47_reg = iwpeek((unsigned short *)(base_addr + 0x14));
chan_48_63_reg = iwpeek((unsigned short *)(base_addr + 0x16));
printf("Channels 00-15 register = 0x%4X\n", chan_0_15_reg);
printf("Channels 16-31 register = 0x%4X\n", chan_16_31_reg);
printf("Channels 32-47 register = 0x%4X\n", chan_32_47_reg);
printf("Channels 48-63 register = 0x%4X\n", chan_48_63_reg);
delay (100); /* wait 100 milliseconds before resetting module */
/* reset the E1442A to open all closed channels */
/* writing a 0 to the channels registers will also open channels */
reset_sw(base_addr);
Scan Channels /********** scanning channels **********/
/* scan channels 0-15 (register offset 10) */
for (k=0; k15; k++)
{
iwpoke ((unsigned short *)(base_addr + 0x10), ldexp(1,k));
delay (50); /* delay to allow mechanical relays to close*/
}
/* sets all bits to 0 to open last closed channel */
iwpoke ((unsigned short *)(base_addr + 0x10), 0);
/* scan channels 16-31 (register offset 12) */
for (k=0; k15; k++)
{
iwpoke ((unsigned short *)(base_addr + 0x12), ldexp(1,k));
delay (50);
}
/* sets all bits to 0 to open last closed channel */
iwpoke ((unsigned short *)(base_addr + 0x12), 0);
/* scan channels 32-47 (register offset 14) */
for (k=0; k15; k++)
{
iwpoke ((unsigned short *)(base_addr + 0x14), ldexp(1,k));
delay (50);
}
/* set all bits to 0 to open last closed channel */
iwpoke ((unsigned short *)(base_addr + 0x14), 0);