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 }
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001