Here's the relevant code. No this isn't how it looks, just putting the relevant information.
Define the data pins
| #define PIN_D0 | (GPIO_PORT_D | GPIO_PIN6) |
| #define PIN_D1 | (GPIO_PORT_D | GPIO_PIN5) |
| #define PIN_D2 | (GPIO_PORT_D | GPIO_PIN4) |
| #define PIN_D3 | (GPIO_PORT_D | GPIO_PIN3) |
| #define PIN_D4 | (GPIO_PORT_D | GPIO_PIN2) |
| #define PIN_D5 | (GPIO_PORT_C | GPIO_PIN17) |
| #define PIN_D6 | (GPIO_PORT_C | GPIO_PIN13) |
| #define PIN_D7 | (GPIO_PORT_C | GPIO_PIN9) |
#define MUX_GPIO (1)
| #define LOW | LWGPIO_VALUE_LOW |
| #define HIGH | LWGPIO_VALUE_HIGH |
Setup the pin structure
LWGPIO_STRUCT* dataPins[8];
LWGPIO_STRUCT D0;
LWGPIO_STRUCT D1;
LWGPIO_STRUCT D2;
LWGPIO_STRUCT D3;
LWGPIO_STRUCT D4;
LWGPIO_STRUCT D5;
LWGPIO_STRUCT D6;
LWGPIO_STRUCT D7;
Initialize the data pins as output for writing to the bus, all low
if (!lwgpio_init(&D0, PIN_D0, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
if (!lwgpio_init(&D1, PIN_D1, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
if (!lwgpio_init(&D2, PIN_D2, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
if (!lwgpio_init(&D3, PIN_D3, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
if (!lwgpio_init(&D4, PIN_D4, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
if (!lwgpio_init(&D5, PIN_D5, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
if (!lwgpio_init(&D6, PIN_D6, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
if (!lwgpio_init(&D7, PIN_D7, LWGPIO_DIR_OUTPUT, LOW))
success = 0;
set gpio functionality
lwgpio_set_functionality(&D0, MUX_GPIO);
lwgpio_set_functionality(&D1, MUX_GPIO);
lwgpio_set_functionality(&D2, MUX_GPIO);
lwgpio_set_functionality(&D3, MUX_GPIO);
lwgpio_set_functionality(&D4, MUX_GPIO);
lwgpio_set_functionality(&D5, MUX_GPIO);
lwgpio_set_functionality(&D6, MUX_GPIO);
lwgpio_set_functionality(&D7, MUX_GPIO);
put pins in an array for easy usage
dataPins [1] = &D1;
dataPins [2] = &D2;
dataPins [3] = &D3;
dataPins [4] = &D4;
dataPins [5] = &D5;
dataPins [6] = &D6;
dataPins [7] = &D7;
Then, if I want to read from the bus I change the direction with the following code
if (dataMode != READ) // make sure data pins are in input mode
{
dataMode = READ;
for (int i = 0; i < 8; i++)
{
lwgpio_set_direction(dataPins[i],LWGPIO_DIR_INPUT);
}
}
Hopefully this makes the situation a little clearer?