在调试串口时发现以下现象,会导致串口接收中断收不到:
第一步,在板卡上电之前就通过串口调试助手连续向板卡发送数据(如SSCOM42工具,每19ms发送29个字节,保证串口链路上绝大部分比例时间都有信号在传输)。
第二步,通过仿真器下载程序进行调试,完成UART与相应中断初始化配置后,此时进入不了串口接收中断,查看串口相关寄存器如下:
下图是异常情况下的串口寄存器数值:
为了进行对比,我们在正常情况下(即程序没有完成串口初始化之前不让外部SSCOM向板子发送数据)截取了串口寄存器如下:
在程序未完成UART初始化配置前,SSCOM42不发送数据与SSCOM42连续发送数据的寄存器差异主要是Line Status Register寄存器(0x 02540014)
SSCOM42连续发送数据时,Line Status Register寄存器的RXFIFOE,FE,OE比特位置1。
咨询解决上述问题时的解决方案,使得UART能重新通过中断正常接收数据。
countryhotel:
K1_STK_v1.1内关于串口异常中断的处理主要在函数KeyStone_UART_Error_ISR与 KeyStone_UART_Error_Handler内,但是这两个函数主要是“check and print UART error status”,并没有给出串口异常发生时,软件应做什么相应处理以恢复正常,在 手册《Universal Asynchronous Receiver_Transmitter (UART) for KeyStone Devices UG》内也未找到类似描述。函数实现如下:
countryhotel:
回复 countryhotel:
按下表处理后即可正常操作。
Table 3-6 Interrupt Identification and Interrupt Clearing Information
Shine:
回复 countryhotel:
感谢分享解决方法。