| zynq板,想用串口接收中断,但是完全没反应,发送的字符可以接收,但就是没有触发中断,用过串口中断的帮忙看看,是uart初始化有问题,还是gic初始化有问题啊,急 
 
 #include "../inc/UartInit.h"
 
 static void UartInterruptHandler(void);
 static int GIC_Init(void);
 
 XUartPs UartPs;
 XScuGic ScuGic;
 
 char rec;
 int Uart_Init(void)
 {
 int Status;
 u32 u32RegBaseAddress;
 XUartPs_Config *ConfigPtr;
 
 ConfigPtr = XUartPs_LookupConfig(XPAR_PS7_UART_1_DEVICE_ID);
 if (ConfigPtr == (XUartPs_Config *)NULL)
 {
 return XST_DEVICE_NOT_FOUND;
 }
 u32RegBaseAddress = ConfigPtr->BaseAddress;//
 XUartPs_CfgInitialize(&UartPs, ConfigPtr, ConfigPtr->BaseAddress);  //初始化
 //        XUartPs_SetHandler(&UartPs, (XUartPs_Handler)UartInterruptHandler, (void *)0);
 Status = GIC_Init();   //配置GIC
 if (Status != XST_SUCCESS)
 {
 return XST_FAILURE;
 }
 XUartPs_WriteReg(u32RegBaseAddress, XUARTPS_RXWM_OFFSET, 1);
 
 XUartPs_WriteReg(u32RegBaseAddress, XUARTPS_IER_OFFSET, XUARTPS_IXR_RXFULL|XUARTPS_IXR_RXOVR);     //允许接收中断
 XUartPs_WriteReg(u32RegBaseAddress, XUARTPS_IDR_OFFSET, ~(XUARTPS_IXR_RXFULL|XUARTPS_IXR_RXOVR));  //允许接收中断
 
 XUartPs_SetBaudRate(&UartPs, UART_BAUDRATE);                              //设置波特率
 XUartPs_WriteReg(u32RegBaseAddress, XUARTPS_MR_OFFSET, 0x20);
 XUartPs_WriteReg(u32RegBaseAddress, XUARTPS_CR_OFFSET, 0x17);
 
 
 printf("0x%x\n",XUartPs_ReadReg(u32RegBaseAddress, XUARTPS_IMR_OFFSET));
 
 return XST_SUCCESS;
 }
 
 static int GIC_Init(void)
 {
 int Status;
 
 XScuGic_Config * ConfigPtr;
 
 ConfigPtr = XScuGic_LookupConfig(XPAR_SCUGIC_0_DEVICE_ID);
 
 Status = XScuGic_CfgInitialize(&ScuGic, ConfigPtr, ConfigPtr->CpuBaseAddress);
 if (Status != XST_SUCCESS)
 {
 return XST_FAILURE;
 }
 XScuGic_Disable(&ScuGic, UART1_IRQ_ID);
 
 XScuGic_SetPriorityTriggerType(&ScuGic, UART1_IRQ_ID, 0x2, 0x1);  //设置优先级和触发类型
 XScuGic_Connect (&ScuGic, UART1_IRQ_ID, (Xil_InterruptHandler)UartInterruptHandler, (void *)0);
 if (Status != XST_SUCCESS)
 {
 return XST_FAILURE;
 }
 
 XScuGic_Enable(&ScuGic, UART1_IRQ_ID);                //允许串口中断
 
 Xil_ExceptionInit();
 
 Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XScuGic_InterruptHandler, &ScuGic);
 
 Xil_ExceptionEnable();
 
 return XST_SUCCESS;
 }
 
 static void UartInterruptHandler(void)
 {
 volatile u8 StatusRegister;
 
 u32 u32RegBaseAddress;
 
 u32RegBaseAddress = UartPs.Config.BaseAddress;
 
 XUartPs_WriteReg(u32RegBaseAddress, XUARTPS_ISR_OFFSET, 0xffffffff);
 
 StatusRegister = XUartPs_ReadReg(u32RegBaseAddress, XUARTPS_ISR_OFFSET);
 /* enable Tx/Rx and reset Tx/Rx data path */
 
 
 while(StatusRegister & (XUARTPS_SR_RXFULL | XUARTPS_SR_RXOVR))//接收
 {
 if(StatusRegister & (XUARTPS_SR_RXFULL | XUARTPS_SR_RXOVR))
 {
 rec = XUartPs_ReadReg(u32RegBaseAddress, XUARTPS_FIFO_OFFSET);
 }
 }
 
 }
 
 
 
 |