//AXI GPIO driver #include "xgpio.h" #include "xgpio_l.h" #include "xil_printf.h" //information about AXI peripherals #include "xparameters.h" #define GPIO_REG_BASEADDR XPAR_GPIO_0_BASEADDR #define LED 0x01 #define CHANNEL 2 int main() { XGpio gpio; u32 btn, led; //u32 Data; XGpio_Initialize(&gpio, 0); XGpio_SetDataDirection(&gpio, 2, 0x00); // set LED GPIO channel tristates to All Output XGpio_SetDataDirection(&gpio, 1, 0xFFFFFFFF); // set BTN GPIO channel tristates to All Input XGpio_DiscreteWrite(&gpio, 2, 0x00000000); while (1) { btn = XGpio_DiscreteRead(&gpio, 1); /* Data = XGpio_ReadReg(GPIO_REG_BASEADDR, ((CHANNEL - 1) * XGPIO_CHAN_OFFSET) + XGPIO_DATA_OFFSET); if (btn != 0x00){ xil_printf("\rReg state: %08x", Data); } */ if (btn & 2) // turn LED on when button #2 is pressed { xil_printf("\rbutton state: %08x", btn); //led = 0x00000000; //XGpio_DiscreteClear(&gpio, 2, 0x00000002); XGpio_DiscreteSet(&gpio, CHANNEL, 0x02); } if (btn & 4) // turn LED on when button #3 is pressed { xil_printf("\rbutton state: %08x", btn); XGpio_DiscreteSet(&gpio, CHANNEL, 0x04); } if (btn & 8) // turn LED on when button #3 is pressed { xil_printf("\rbutton state: %08x", btn); XGpio_DiscreteSet(&gpio, CHANNEL, 0x08); } if (btn & 1) { xil_printf("\rbutton state: %08x", btn); led = 0x00000000; //XGpio_DiscreteSet(&gpio, 2, 0xFFFFFFFF); XGpio_DiscreteClear(&gpio, CHANNEL, 0x0E); //XGpio_DiscreteWrite(&gpio, CHANNEL, led); } } }