在UART通信的一个例程中,使用UART向外部发送若干字节数据。对其中判断UART发射端是否准备好的函数:
EVMDM6437_UART_xmtReady()这个函数,直接使用没有问题。但是我跟踪找到源代码后,自己包装一个函数后就一直不能返回正确的值:
Int16 UART_xmtReady( UART_Handle uart_handle )
{
Uint8 iir_status = ( uart_handle->regs->IIR >> 1 ) & 0x0E;
if ( iir_status == 0 ) // Check for No Interrupts
return 0;
else if ( iir_status == 1 ) // Check for Current TX emptying
return 1;
else // Everything else
return 2;
}
这是为什么呢?是不是程序运行时实际跑的并不是这个源代码呢?
Shine:
程序跑到哪里了?死循环还是跑飞了。
Weiliang Cheng:
回复 Shine:
谢谢回复,没有跑飞,也不是死循环。
通过对照data sheet,发现这个函数代码确实是错误的,自己选择相应的寄存器来实现就可以啦(应该读取LSR寄存器而不是IIR寄存器)