问题描述:
中断函数中
UartSrValue = XUartPs_ReadReg(UartInstancePtr->Config.BaseAddress, XUARTPS_SR_OFFSET);
UartSrValue=0x0A,不停进入串口中断,导致死机
#define XUARTPS_IXR_TXEMPTY 0x00000008U /**< TX FIFO empty interrupt. */
#define XUARTPS_IXR_RXEMPTY 0x00000002U /**< RX FIFO empty interrupt. */
TX/RX FIFO空 中断发生,
但是初始化程序中并未使能这2个中断
XUartPs_SetInterruptMask(&Uart_PS1,XUARTPS_IXR_RXOVR); //enable Rx interrupt
解决方法:
配置串口前,先对该串口复位,调用函数:XUartPs_ResetHw(Config->BaseAddress);
参考文章:
在"xuartps_hw.c"中的XUartPs_ResetHw函数,XUartPs_ResetHw函数会将整个UART配置复位;二是使用软件复位,软件复位能很好的解决这个问题,函数如下。