00001 /****************************************************************************/ 00002 /* */ 00003 /* Function/Macro: BoardIO_write() */ 00004 /* */ 00005 /* ======================================================================== */ 00006 /* */ 00007 /* Synopsis: Output a byte to a digital I/O port */ 00008 /* */ 00009 /****************************************************************************/ 00010 void BoardIO_write( int baseaddr, int port, int val ) 00011 { 00012 outp( baseaddr + port, val ); 00013 } 00014 00015 /****************************************************************************/ 00016 /* */ 00017 /* Function/Macro: BoardIO_read() */ 00018 /* */ 00019 /* ======================================================================== */ 00020 /* */ 00021 /* Synopsis: Input a byte from a digital I/O port */ 00022 /* */ 00023 /****************************************************************************/ 00024 int BoardIO_read( int baseaddr, int port ) 00025 { 00026 return ( inp( baseaddr + port ) ); 00027 } 00028 00029 /****************************************************************************/ 00030 /* */ 00031 /* Function/Macro: BoardIO_write_bit() */ 00032 /* */ 00033 /* ======================================================================== */ 00034 /* */ 00035 /* Synopsis: Output a single bit value to a digital I/O port */ 00036 /* */ 00037 /* bit - Digital bit number to be written, from */ 00038 /* 0 to maximum number of valid bits - 1 */ 00039 /* val - Value of that bit, 0 for a low value */ 00040 /* and 1 for a high value. */ 00041 /* */ 00042 /****************************************************************************/ 00043 void BoardIO_write_bit( int baseaddr, int bit, int val) 00044 { 00045 int port; 00046 int oldval, realbit; 00047 00048 // Make sure that the value is in range 00049 if ( val != 0 ) { 00050 val = 1; 00051 } 00052 00053 // From bit 0 -> 39, calculate the port and bit 00054 port = (bit >> 3); 00055 00056 printf( "Port is [%d] \t", port ); 00057 00058 realbit = (bit & 0x07); 00059 00060 printf( "RealBit is [%d] \t", realbit ); 00061 00062 // Check for incorrect port number 00063 if ( port >= 2 ) { port = 1; } 00064 00065 // Perform read from board 00066 oldval = inp( baseaddr + port ); 00067 00068 printf( "Value is [%d] \t", oldval ); 00069 00070 // Set or reset the required 00071 oldval = (val) ? (oldval | realbit) : (oldval & (~realbit)); 00072 00073 printf( "New Value is [%d] \n", oldval ); 00074 00075 // Perform write to board 00076 outp( baseaddr + port, oldval ); 00077 } 00078 00079 /****************************************************************************/ 00080 /* */ 00081 /* Function/Macro: BoardIO_read_bit */ 00082 /* */ 00083 /* ======================================================================== */ 00084 /* */ 00085 /* Synopsis: Input a single bit value from a digital I/O port */ 00086 /* */ 00087 /* bit - bit number to read, starting at 0 */ 00088 /* */ 00089 /****************************************************************************/ 00090 int BoardIO_read_bit(int baseaddr, int bit) 00091 { 00092 int port; 00093 int val, realbit; 00094 00095 // From bit 0 -> 39, calculate the port and bit 00096 port = ( bit >> 3 ); 00097 realbit = ( bit & 0x07 ); 00098 00099 // Perform read from board 00100 val = inp( baseaddr + port ); 00101 00102 // Return 1 if bit is set, or 0 if not set 00103 return ((val & realbit) ? 1 : 0); 00104 } 00105 00106 /****************************************************************************/ 00107 /* */ 00108 /* Function/Macro: BoardIO_enable */ 00109 /* */ 00110 /* ======================================================================== */ 00111 /* */ 00112 /* Synopsis: Enable a digital I/O group */ 00113 /* */ 00114 /****************************************************************************/ 00115 void BoardIO_enable(int baseaddr, int enable_offset, int enable_value) 00116 { 00117 // Write enable value to group enable register 00118 outp( baseaddr + enable_offset, enable_value ); 00119 } 00120 00121 /****************************************************************************/ 00122 /* */ 00123 /* Function/Macro: BoardIO_disable */ 00124 /* */ 00125 /* ======================================================================== */ 00126 /* */ 00127 /* Synopsis: Disable a digital I/O group */ 00128 /* */ 00129 /****************************************************************************/ 00130 void BoardIO_disable(int baseaddr, int enable_offset) 00131 { 00132 // Write 0 to group enable register 00133 outp( baseaddr + enable_offset, 0x00); 00134 } 00135 00136 #include <stdio.h> 00137 #include <stdlib.h> 00138 #include <conio.h> 00139 #include <i86.h> 00140 00141 #include "board.h" 00142 00143 /****************************************************************************/ 00144 /* */ 00145 /* Function/Macro: BoardIO_write() */ 00146 /* */ 00147 /* ======================================================================== */ 00148 /* */ 00149 /* Synopsis: Output a byte to a digital I/O port */ 00150 /* */ 00151 /****************************************************************************/ 00152 void BoardIO_write( int baseaddr, int port, int val ) 00153 { 00154 outp( baseaddr + port, val ); 00155 } 00156 00157 /****************************************************************************/ 00158 /* */ 00159 /* Function/Macro: BoardIO_read() */ 00160 /* */ 00161 /* ======================================================================== */ 00162 /* */ 00163 /* Synopsis: Input a byte from a digital I/O port */ 00164 /* */ 00165 /****************************************************************************/ 00166 int BoardIO_read( int baseaddr, int port ) 00167 { 00168 return ( inp( baseaddr + port ) ); 00169 } 00170 00171 /****************************************************************************/ 00172 /* */ 00173 /* Function/Macro: BoardIO_write_bit() */ 00174 /* */ 00175 /* ======================================================================== */ 00176 /* */ 00177 /* Synopsis: Output a single bit value to a digital I/O port */ 00178 /* */ 00179 /* bit - Digital bit number to be written, from */ 00180 /* 0 to maximum number of valid bits - 1 */ 00181 /* val - Value of that bit, 0 for a low value */ 00182 /* and 1 for a high value. */ 00183 /* */ 00184 /****************************************************************************/ 00185 void BoardIO_write_bit( int baseaddr, int bit, int val) 00186 { 00187 int port; 00188 int oldval, realbit; 00189 00190 // Make sure that the value is in range 00191 if ( val != 0 ) { 00192 val = 1; 00193 } 00194 00195 // From bit 0 -> 39, calculate the port and bit 00196 port = (bit >> 3); 00197 00198 printf( "Port is [%d] \t", port ); 00199 00200 realbit = (bit & 0x07); 00201 00202 printf( "RealBit is [%d] \t", realbit ); 00203 00204 // Check for incorrect port number 00205 if ( port >= 2 ) { port = 1; } 00206 00207 // Perform read from board 00208 oldval = inp( baseaddr + port ); 00209 00210 printf( "Value is [%d] \t", oldval ); 00211 00212 // Set or reset the required 00213 oldval = (val) ? (oldval | realbit) : (oldval & (~realbit)); 00214 00215 printf( "New Value is [%d] \n", oldval ); 00216 00217 // Perform write to board 00218 outp( baseaddr + port, oldval ); 00219 } 00220 00221 /****************************************************************************/ 00222 /* */ 00223 /* Function/Macro: BoardIO_read_bit */ 00224 /* */ 00225 /* ======================================================================== */ 00226 /* */ 00227 /* Synopsis: Input a single bit value from a digital I/O port */ 00228 /* */ 00229 /* bit - bit number to read, starting at 0 */ 00230 /* */ 00231 /****************************************************************************/ 00232 int BoardIO_read_bit(int baseaddr, int bit) 00233 { 00234 int port; 00235 int val, realbit; 00236 00237 // From bit 0 -> 39, calculate the port and bit 00238 port = ( bit >> 3 ); 00239 realbit = ( bit & 0x07 ); 00240 00241 // Perform read from board 00242 val = inp( baseaddr + port ); 00243 00244 // Return 1 if bit is set, or 0 if not set 00245 return ((val & realbit) ? 1 : 0); 00246 } 00247 00248 /****************************************************************************/ 00249 /* */ 00250 /* Function/Macro: BoardIO_enable */ 00251 /* */ 00252 /* ======================================================================== */ 00253 /* */ 00254 /* Synopsis: Enable a digital I/O group */ 00255 /* */ 00256 /****************************************************************************/ 00257 void BoardIO_enable(int baseaddr, int enable_offset, int enable_value) 00258 { 00259 // Write enable value to group enable register 00260 outp( baseaddr + enable_offset, enable_value ); 00261 } 00262 00263 /****************************************************************************/ 00264 /* */ 00265 /* Function/Macro: BoardIO_disable */ 00266 /* */ 00267 /* ======================================================================== */ 00268 /* */ 00269 /* Synopsis: Disable a digital I/O group */ 00270 /* */ 00271 /****************************************************************************/ 00272 void BoardIO_disable(int baseaddr, int enable_offset) 00273 { 00274 // Write 0 to group enable register 00275 outp( baseaddr + enable_offset, 0x00); 00276 }