/** * * This function demonstrates the usage AXI FIFO * It does the following: * - Set up the output terminal if UART16550 is in the hardware build * - Initialize the Axi FIFO Device. * - Transmit the data * - Receive the data from fifo * - Compare the data * - Return the result * * @param InstancePtr is a pointer to the instance of the * XLlFifo component. * @param DeviceId is Device ID of the Axi Fifo Deive instance, * typically XPAR_<AXI_FIFO_instance>_DEVICE_ID value from * xparameters.h. * * @return -XST_SUCCESS to indicate success * -XST_FAILURE to indicate failure * ******************************************************************************/ int XLlFifoPollingExample(XLlFifo *InstancePtr, u16 DeviceId) { XLlFifo_Config *Config; int Status; int i; int Error; Status = XST_SUCCESS; /* Initial setup for Uart16550 */ #ifdef XPAR_UARTNS550_0_BASEADDR Uart550_Setup(); #endif /* Initialize the Device Configuration Interface driver */ Config = XLlFfio_LookupConfig(DeviceId); if (!Config) { xil_printf("No config found for %d\r\n", DeviceId); return XST_FAILURE; } /* * This is where the virtual address would be used, this example * uses physical address. */ Status = XLlFifo_CfgInitialize(InstancePtr, Config, Config->BaseAddress); if (Status != XST_SUCCESS) { xil_printf("Initialization failed\n\r"); return Status; } /* Check for the Reset value */ Status = XLlFifo_Status(InstancePtr); XLlFifo_IntClear(InstancePtr,0xffffffff); Status = XLlFifo_Status(InstancePtr); if(Status != 0x0) { xil_printf("\n ERROR : Reset value of ISR0 : 0x%x\t" "Expected : 0x0\n\r", XLlFifo_Status(InstancePtr)); return XST_FAILURE; } /* Transmit the Data Stream */ Status = TxSend(InstancePtr, SourceBuffer); if (Status != XST_SUCCESS){ xil_printf("Transmisson of Data failed\n\r"); return XST_FAILURE; } /* Revceive the Data Stream */ Status = RxReceive(InstancePtr, DestinationBuffer); if (Status != XST_SUCCESS){ xil_printf("Receiving data failed"); return XST_FAILURE; } Error = 0; /* Compare the data send with the data received */ xil_printf(" Comparing data ...\n\r"); for( i=0 ; i<MAX_DATA_BUFFER_SIZE ; i++ ){ if ( *(SourceBuffer + i) != *(DestinationBuffer + i) ){ Error = 1; break; } } if (Error != 0){ return XST_FAILURE; } return Status; }
/** * * This function demonstrates the usage of AXI FIFO * It does the following: * - Set up the output terminal if UART16550 is in the hardware build * - Initialize the Axi FIFO Device. * - Set up the interrupt handler for fifo * - Transmit the data * - Compare the data * - Return the result * * @param InstancePtr is a pointer to the instance of the * XLlFifo instance. * @param DeviceId is Device ID of the Axi Fifo Deive instance, * typically XPAR_<AXI_FIFO_instance>_DEVICE_ID value from * xparameters.h. * * @return -XST_SUCCESS to indicate success * -XST_FAILURE to indicate failure * ******************************************************************************/ int XLlFifoInterruptExample(XLlFifo *InstancePtr, u16 DeviceId) { XLlFifo_Config *Config; int Status; int i; int err; Status = XST_SUCCESS; /* Initial setup for Uart16550 */ #ifdef XPAR_UARTNS550_0_BASEADDR Uart550_Setup(); #endif /* Initialize the Device Configuration Interface driver */ Config = XLlFfio_LookupConfig(DeviceId); if (!Config) { xil_printf("No config found for %d\r\n", DeviceId); return XST_FAILURE; } /* * This is where the virtual address would be used, this example * uses physical address. */ Status = XLlFifo_CfgInitialize(InstancePtr, Config, Config->BaseAddress); if (Status != XST_SUCCESS) { xil_printf("Initialization failed\n\r"); return Status; } /* Check for the Reset value */ Status = XLlFifo_Status(InstancePtr); XLlFifo_IntClear(InstancePtr,0xffffffff); Status = XLlFifo_Status(InstancePtr); if(Status != 0x0) { xil_printf("\n ERROR : Reset value of ISR0 : 0x%x\t" "Expected : 0x0\n\r", XLlFifo_Status(InstancePtr)); return XST_FAILURE; } /* * Connect the Axi Streaming FIFO to the interrupt subsystem such * that interrupts can occur. This function is application specific. */ Status = SetupInterruptSystem(&Intc, InstancePtr, FIFO_INTR_ID); if (Status != XST_SUCCESS) { xil_printf("Failed intr setup\r\n"); return XST_FAILURE; } XLlFifo_IntEnable(InstancePtr, XLLF_INT_ALL_MASK); Done = 0; /* Transmit the Data Stream */ Status = TxSend(InstancePtr, SourceBuffer); if (Status != XST_SUCCESS){ xil_printf("Transmission of Data failed\n\r"); return XST_FAILURE; } while(!Done); /* Check for errors */ if(Error) { xil_printf("Errors in the FIFO\n\r"); return XST_FAILURE; } err = 0; /* Compare the data sent with the data received */ xil_printf("Comparing data...\n\r"); for( i=0 ; i<MAX_DATA_BUFFER_SIZE ; i++ ){ if ( *(SourceBuffer + i) != *(DestinationBuffer + i) ){ err = 1; break; } } if (err != 0){ return XST_FAILURE; } DisableIntrSystem(&Intc, FIFO_INTR_ID); return Status; }