/** * * This function is the interrupt handler for the driver. * It must be connected to an interrupt system by the application such that it * can be called when an interrupt occurs. * * @param InstancePtr contains a pointer to the driver instance * * @return None. * * @note None. * ******************************************************************************/ void XUartPs_InterruptHandler(XUartPs *InstancePtr) { u32 IsrStatus; Xil_AssertVoid(InstancePtr != NULL); Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); /* * Read the interrupt ID register to determine which * interrupt is active */ IsrStatus = XUartPs_ReadReg(InstancePtr->Config.BaseAddress, XUARTPS_IMR_OFFSET); IsrStatus &= XUartPs_ReadReg(InstancePtr->Config.BaseAddress, XUARTPS_ISR_OFFSET); /* * Dispatch an appropriate handler. */ if((IsrStatus & ((u32)XUARTPS_IXR_RXOVR | (u32)XUARTPS_IXR_RXEMPTY | (u32)XUARTPS_IXR_RXFULL)) != (u32)0) { /* Received data interrupt */ ReceiveDataHandler(InstancePtr); } if((IsrStatus & ((u32)XUARTPS_IXR_TXEMPTY | (u32)XUARTPS_IXR_TXFULL)) != (u32)0) { /* Transmit data interrupt */ SendDataHandler(InstancePtr, IsrStatus); } if((IsrStatus & ((u32)XUARTPS_IXR_OVER | (u32)XUARTPS_IXR_FRAMING | (u32)XUARTPS_IXR_PARITY)) != (u32)0) { /* Received Error Status interrupt */ ReceiveErrorHandler(InstancePtr); } if((IsrStatus & ((u32)XUARTPS_IXR_TOUT)) != (u32)0) { /* Received Timeout interrupt */ ReceiveTimeoutHandler(InstancePtr); } if((IsrStatus & ((u32)XUARTPS_IXR_DMS)) != (u32)0) { /* Modem status interrupt */ ModemHandler(InstancePtr); } /* * Clear the interrupt status. */ XUartPs_WriteReg(InstancePtr->Config.BaseAddress, XUARTPS_ISR_OFFSET, IsrStatus); }
/** * * This function is the interrupt handler for the PS/2 driver. * It must be connected to an interrupt system by the user such that it is * called when an interrupt for any PS/2 port occurs. This function does * not save or restore the processor context such that the user must * ensure this occurs. * * @param InstancePtr contains a pointer to the instance of the PS/2 port * that the interrupt is for. * * @return * * None. * * @note * * None. * ******************************************************************************/ void XPs2_InterruptHandler(XPs2 *InstancePtr) { Xuint8 IntrStatus; XASSERT_VOID(InstancePtr != XNULL); /* * Read the interrupt status register to determine which * interrupt is active */ IntrStatus = XPs2_mGetIntrStatus(InstancePtr->BaseAddress); if (IntrStatus & XPS2_INT_WDT_TOUT) { TimeoutHandler(InstancePtr); } if (IntrStatus & XPS2_INT_RX_ERR) { ReceiveErrorHandler(InstancePtr); } if (IntrStatus & XPS2_INT_RX_OVF) { ReceiveOverflowHandler(InstancePtr); } if (IntrStatus & XPS2_INT_TX_NOACK) { SendErrorHandler(InstancePtr); } if (IntrStatus & XPS2_INT_RX_FULL) { ReceiveDataHandler(InstancePtr); } if (IntrStatus & XPS2_INT_TX_ACK) { SendDataHandler(InstancePtr); } }