/* * File: gpiops_intr.c * Author: Theo Tsang * Date: 2023-03-15 22:41 * Description: omit * * Ver Who Date Changes * ----- ---- ---------- ------------- * 1.00 Theo 03/15/2024 First release */ #include "xparameters.h" #include "xgpiops.h" #include "xil_printf.h" #include "sleep.h" #include "gpiops_intr.h" #define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID /* PS GPIO device ID */ #define MIO_LED0 38 #define MIO_LED1 39 #define MIO_KEY0 40 #define MIO_KEY1 41 #define EMIO_LED0 80 #define EMIO_LED1 81 #define EMIO_KEY0 78 #define EMIO_KEY1 79 void GpioInit(XGpioPs *gpio_inst); int main() { int status; #ifdef GpioPolledTest xil_printf("This is EMIO TEST!\r\n"); #else xil_printf("This is INTERRUPT TEST!\r\n"); #endif XGpioPs gpio_inst; /* The driver instance for GPIO device */ XGpioPs_Config *ConfigPtr; /* Initialize the GPIO driver */ ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID); status = XGpioPs_CfgInitialize(&gpio_inst, ConfigPtr, ConfigPtr->BaseAddr); if (status != XST_SUCCESS) { return XST_FAILURE; } GpioInit(&gpio_inst); #ifdef GpioPolledTest for(;;) { XGpioPs_WritePin(&gpio_inst, MIO_LED0, XGpioPs_ReadPin(&gpio_inst, MIO_KEY0)); XGpioPs_WritePin(&gpio_inst, MIO_LED1, XGpioPs_ReadPin(&gpio_inst, MIO_KEY1)); XGpioPs_WritePin(&gpio_inst, EMIO_LED0, XGpioPs_ReadPin(&gpio_inst, EMIO_KEY0)); XGpioPs_WritePin(&gpio_inst, EMIO_LED1, XGpioPs_ReadPin(&gpio_inst, EMIO_KEY1)); } #else GpioPs_Intr_Init(&gpio_inst); for(;;) { XGpioPs_WritePin(&gpio_inst, MIO_LED0, 0x1); sleep(1); XGpioPs_WritePin(&gpio_inst, MIO_LED0, 0x0); sleep(1); } #endif return XST_SUCCESS; } void GpioInit(XGpioPs *gpio_inst) { #ifndef GpioPolledTests u8 Bank; u8 PinNumber; #endif // !GpioPolledTests /* Set the Direction of the pin, * 0 is Input 1 is Output. */ XGpioPs_SetDirectionPin(gpio_inst, MIO_LED0, 1); XGpioPs_SetDirectionPin(gpio_inst, MIO_LED1, 1); XGpioPs_SetDirectionPin(gpio_inst, EMIO_LED0, 1); XGpioPs_SetDirectionPin(gpio_inst, EMIO_LED1, 1); XGpioPs_SetDirectionPin(gpio_inst, MIO_KEY0, 0); XGpioPs_SetDirectionPin(gpio_inst, MIO_KEY1, 0); XGpioPs_SetDirectionPin(gpio_inst, EMIO_KEY0, 0); XGpioPs_SetDirectionPin(gpio_inst, EMIO_KEY1, 0); XGpioPs_SetOutputEnablePin(gpio_inst, MIO_LED0, 1); XGpioPs_SetOutputEnablePin(gpio_inst, MIO_LED1, 1); XGpioPs_SetOutputEnablePin(gpio_inst, EMIO_LED0, 1); XGpioPs_SetOutputEnablePin(gpio_inst, EMIO_LED1, 1); XGpioPs_WritePin(gpio_inst, MIO_LED0, 0x1); XGpioPs_WritePin(gpio_inst, MIO_LED1, 0x1); XGpioPs_WritePin(gpio_inst, EMIO_LED0, 0x1); XGpioPs_WritePin(gpio_inst, EMIO_LED1, 0x1); #ifndef GpioPolledTests XGpioPs_GetBankPin(MIO_KEY0, &Bank, &PinNumber); XGpioPs_SetIntrType(gpio_inst, Bank, 0xFFFFFFFF, 0x0, 0x00); XGpioPs_IntrEnable(gpio_inst, Bank, 1 << PinNumber); #endif // !GpioPolledTests }