/* This file contains the fuctions necessary to configure the PNP * * for the AT-DIO-32HS board. The PNP configuration is made up of * * six functions: Write_PNP_Initiation_Key, Reset_PNP_Registers, * * Set_PNP_Isolation_State, Assign_PNP_Base_Address, * * Set_PNP_Configuration_State and Activate_PNP_Board. * * Two extra functions, Assign_PNP_Data_Port_Address, * * and Verify_PNP_Base Address, are added to confirm that the * * board was properly configured. The low level functions Write_ * * PNP_Address_Port_Byte, and Write_PNP_Command_Port_Byte write * * data to the address and command registers, respectively. */ /* this file has been modified for use with borlandc by Bernd Mielke */ /*for use with Microsoft C use the original file from NI atpnp.c*/ #include #include /*prototypes*/ void Write_PNP_Address_Port_Byte(unsigned); void Write_PNP_Command_Port_Byte(unsigned); unsigned Read_PNP_Data_Port_Byte(void); void Reset_PNP_Registers(void); void Set_PNP_Isolation_State(void); void Set_PNP_Configuration_State(void); void Write_PNP_Initiation_Key(void); void Assign_PNP_Base_Address(void); void Assign_PNP_Data_Port_Address(void); int Verify_PNP_Base_Address(void); void Activate_PNP_Board(void); extern unsigned Board_Base_Address, Read_Port_Address; /* Write data to the PNP address port. Data is one byte. */ void Write_PNP_Address_Port_Byte(unsigned iData) { outp(0x279, iData); } /* Write to the PNP command port. Data is one byte. */ void Write_PNP_Command_Port_Byte(unsigned iData) { outp(0xA79, iData); } unsigned Read_PNP_Data_Port_Byte() { unsigned iData; iData = inp(Read_Port_Address); return(iData); } void Write_PNP_Initiation_Key() { Write_PNP_Address_Port_Byte(0x00); Write_PNP_Address_Port_Byte(0x00); Write_PNP_Address_Port_Byte(0x6A); Write_PNP_Address_Port_Byte(0xB5); Write_PNP_Address_Port_Byte(0xDA); Write_PNP_Address_Port_Byte(0xED); Write_PNP_Address_Port_Byte(0xF6); Write_PNP_Address_Port_Byte(0xFB); Write_PNP_Address_Port_Byte(0x7D); Write_PNP_Address_Port_Byte(0xBE); Write_PNP_Address_Port_Byte(0xDF); Write_PNP_Address_Port_Byte(0x6F); Write_PNP_Address_Port_Byte(0x37); Write_PNP_Address_Port_Byte(0x1B); Write_PNP_Address_Port_Byte(0x0D); Write_PNP_Address_Port_Byte(0x86); Write_PNP_Address_Port_Byte(0xC3); Write_PNP_Address_Port_Byte(0x61); Write_PNP_Address_Port_Byte(0xB0); Write_PNP_Address_Port_Byte(0x58); Write_PNP_Address_Port_Byte(0x2C); Write_PNP_Address_Port_Byte(0x16); Write_PNP_Address_Port_Byte(0x8B); Write_PNP_Address_Port_Byte(0x45); Write_PNP_Address_Port_Byte(0xA2); Write_PNP_Address_Port_Byte(0xD1); Write_PNP_Address_Port_Byte(0xE8); Write_PNP_Address_Port_Byte(0x74); Write_PNP_Address_Port_Byte(0x3A); Write_PNP_Address_Port_Byte(0x9D); Write_PNP_Address_Port_Byte(0xCE); Write_PNP_Address_Port_Byte(0xE7); Write_PNP_Address_Port_Byte(0x73); Write_PNP_Address_Port_Byte(0x39); return; } void Reset_PNP_Registers() { Write_PNP_Address_Port_Byte(0x02); Write_PNP_Command_Port_Byte(0x07); return; } void Set_PNP_Isolation_State() { Write_PNP_Address_Port_Byte(0x03); Write_PNP_Command_Port_Byte(0x00); return; } void Set_PNP_Configuration_State() { Write_PNP_Address_Port_Byte(0x06); Write_PNP_Command_Port_Byte(0x01); return; } void Assign_PNP_Base_Address() { unsigned iHi_Base_Address, iLo_Base_Address; iLo_Base_Address = Board_Base_Address & 0xff; iHi_Base_Address = (Board_Base_Address >> 8) & 0xff; Write_PNP_Address_Port_Byte(0x60);/* Set the upper byte of the base address */ Write_PNP_Command_Port_Byte(iHi_Base_Address); printf("Hi_Base_address :0x%x \n",Read_PNP_Data_Port_Byte()); Write_PNP_Address_Port_Byte(0x61);/* Set the lower byte of the base address */ Write_PNP_Command_Port_Byte(iLo_Base_Address); printf("Lo_Base_address :0x%x \n",Read_PNP_Data_Port_Byte()); return; } void Assign_PNP_Data_Port_Address() { Write_PNP_Address_Port_Byte(0x00); Write_PNP_Command_Port_Byte(Read_Port_Address>>2); return; } int Verify_PNP_Base_Address() { unsigned iHi_Base_Address, iLo_Base_Address, iHi_Read, iLo_Read; iLo_Base_Address = Board_Base_Address & 0xff; iHi_Base_Address = (Board_Base_Address >> 8) & 0xff; Write_PNP_Address_Port_Byte(0x60); /* Read the upper byte of the base address */ iHi_Read = Read_PNP_Data_Port_Byte(); Write_PNP_Address_Port_Byte(0x61); /* Read the lower byte of the base address */ iLo_Read = Read_PNP_Data_Port_Byte(); if (iLo_Read == iLo_Base_Address && iHi_Read == iHi_Base_Address) return(0); return(1); } void Activate_PNP_Board() { Write_PNP_Address_Port_Byte(0x03); Write_PNP_Command_Port_Byte(1); Write_PNP_Address_Port_Byte(0x07); Write_PNP_Command_Port_Byte(0x00); Write_PNP_Address_Port_Byte(0x30); Write_PNP_Command_Port_Byte(0x01); Write_PNP_Address_Port_Byte(0x07); Write_PNP_Command_Port_Byte(0x01); Write_PNP_Address_Port_Byte(0x30); Write_PNP_Command_Port_Byte(0x01); Write_PNP_Address_Port_Byte(0x02); Write_PNP_Command_Port_Byte(0x02); return; } int Setup_PNP_Board() { int iError; Write_PNP_Initiation_Key(); Reset_PNP_Registers(); Write_PNP_Initiation_Key(); Set_PNP_Isolation_State(); Assign_PNP_Data_Port_Address(); Set_PNP_Configuration_State(); Assign_PNP_Base_Address(); iError = Verify_PNP_Base_Address(); if (iError) return(1); Activate_PNP_Board(); return(0); }