阅读:2330回复:2
驱动中如何判断FIFO中串口数据全部发送完毕
平台:s3c2440 + wince5.0
在串口驱动文件pdds3c2440_ser.cpp中 void CPdd2440Uart::XmitInterruptHandler(PUCHAR pTxBuffer, ULONG *pBuffLen) { ...... for (DWORD dwByteWrite=0; dwByteWrite<dwWriteSize && dwDataAvaiable!=0;dwByteWrite++) { m_pReg2440Uart->Write_UTXH(*pTxBuffer); //数据写到串口发送寄存器 pTxBuffer ++; dwDataAvaiable--; } ...... } 上面的for ()循环是把dwWriteSize个数据从串口发送出去,是不是for循环结束后,数据就完全从串口发送出去了呢?在测试中发现,如果在for循环后立即把TxD功能引脚改变为输入,会出现串口只发送部分数据出去,增加了一点延时就好了,for循环后数据不是都发送完了吗,为什么还会对数据造成影响呢?要怎么处理才能准确地判断数据已经正确的发送完呢?用UTRSTAT寄存器吗? 发送过程是否是 m_pReg2440Uart->Write_UTXH(*pTxBuffer) ----> FIFO ----> 移位寄存器 ---> TXD管脚 如果是这样,出现这种情况,就是说,for 循环后,数据还在寄存器中,还没完全从TXD管脚发送出去 |
|
沙发#
发布于:2009-09-29 21:32
怎么没人来帮帮忙呀
|
|
板凳#
发布于:2009-09-30 16:11
for循环结束,只是代表数据送入缓冲区了,等待底层发送。如果此时直接改变txd的功能引脚,是会影响数据发送的。最保险的方法就是检查寄存器。
|
|