Digital I/O Wildcard User Guide
<< Previous | Next>>
Controlling the I/O Lines
Once you have set the direction of the I/O lines, you can read and set the I/O lines like the other digital I/O ports on the Mosaic controller.
C Code to control the Digital I/O Wildcard
#define OUTPUT_HIGH
| 1 |
#define OUTPUT_LOW
| 0 |
|
#define NIBBLE_0_ADDR
| 0xC000 // Lines 0-3. |
#define NIBBLE_1_ADDR
| 0xC001 // Lines 4-7. |
#define NIBBLE_2_ADDR
| 0xC002 // Lines 8-11. |
#define NIBBLE_3_ADDR
| 0xC003 // Lines 12-15. |
#define NIBBLE_4_ADDR
| 0xC004 // Lines 16-19. Inputs only |
|
#define LINE_0
| 1 |
#define LINE_1
| 2 |
#define LINE_2
| 4 |
#define LINE_3
| 8 |
#define LINE_4
| 1 |
#define LINE_5
| 2 |
#define LINE_6
| 4 |
#define LINE_7
| 8 |
#define LINE_8
| 1 |
#define LINE_9
| 2 |
#define LINE_10
| 4 |
#define LINE_11
| 8 |
#define LINE_12
| 1 |
#define LINE_13
| 2 |
#define LINE_14
| 4 |
#define LINE_15
| 8 |
|
void Control_DIO ( uchar mod_num, uint nibble_addr, uchar line, uchar state ) |
// Sets I/O line of specified nibble to the appropriate state (high or low). |
// Valid module (ie Wildcard) numbers are 0-7. |
// Valid nibble addresses are NIBBLE_0_ADDR to NIBBLE_3_ADDR. |
// Valid lines are LINE_0 to LINE_15 |
// Valid states are OUTPUT_HIGH or OUTPUT_LOW |
{ |
EXTENDED_ADDR module_addr; |
|
module_addr.sixteen_bit.page16 = mod_num; |
module_addr.sixteen_bit.addr16 = nibble_addr; |
|
if(state) // set line high |
{ |
SetBits( line, module_addr.addr32 );
} |
else // set line low |
{ |
ClearBits ( line, module_addr.addr32 ); |
} |
} |
|
uchar Read_Nibble ( uchar module_number, uint nibble_addr ) |
// Reads the current state of the Digital I/O nibble. |
// Valid module numbers are 0-7. |
// Valid nibble addresses are NIBBLE_0_ADDR to NIBBLE_4_ADDR. |
// Returns an unsigned character whose least significant nibble represents |
// the four I/O lines. For example, if nibble 1 is read and a 1 is returned |
// (0001 in binary), then line 4 is high and lines 5-7 are low. If 12 is |
// returned (1100 in binary) after reading nibble 3, then lines 12 and 13 are |
// low and lines 14 and 15 are high. The four most significant bits of the |
// returned byte do not matter. |
{ |
EXTENDED_ADDR module_addr; |
uchar nibble_status; |
|
module_addr.sixteen_bit.page16 = module_number; |
module_addr.sixteen_bit.addr16 = nibble_addr; |
|
nibble_status = FetchChar( module_addr.addr32 ); |
|
return( nibble_status ); |
} |
|
<< Previous | Next>>
|