Hello everyone,
I have a design in which I use UART in a special condition. The interrupt outputs are connected to an AXI interrupt block with are then relayed to the GIC in the PS sytem. I do this because of the interrupt number allowed in the GIC. It is not enough. Here is a part of my design to help you understand :

I now have a problem with the SDK configuring the driver in the interrupt mode. My interrupts are not correctly handled, I get stuck in the while loop waiting for the interrupts to happen. I sometimes get receiving, other times sending but never both. Here is my configuration:
Initialize the UART driver so that it's ready to use.
Status = AltUartNs550_Initialize(UartInstancePtr, UartDeviceId);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Initialize the interrupt controller driver so that it is ready
Status = XIntc_Initialize(IntcInstancePtr, INTC_DEVICE_ID);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Connect a device driver handler
Status = XIntc_Connect(IntcInstancePtr, UartIntrId,
(XInterruptHandler)AltUartNs550_InterruptHandler,
(void *)UartInstancePtr);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Start the interrupt controller
Status = XIntc_Start(IntcInstancePtr, XIN_REAL_MODE);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
Enable the interrupt for the UartNs550.
XIntc_Enable(IntcInstancePtr, UartIntrId);
XScuGic_Config *IntcConfig;
Initialize the interrupt controller driver
IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID_G);
if (NULL == IntcConfig) {
return XST_FAILURE;
}
Status = XScuGic_CfgInitialize(&IntcInstanceG, IntcConfig,
IntcConfig->CpuBaseAddress);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
XScuGic_SetPriorityTriggerType(&IntcInstanceG, IntcIntrId, 0xA0, 0x3);
Connect the interrupt handler
Status = XScuGic_Connect(&IntcInstanceG, IntcIntrId,
(Xil_ExceptionHandler) AltUartNs550_InterruptHandler,
UartInstancePtr);
if (Status != XST_SUCCESS) {
return Status;
}
Enable the interrupt for the Timer device.
XScuGic_Enable(&IntcInstanceG, IntcIntrId);
...