请教一个让我抓狂的串口通信问题

[复制链接]
 楼主| tianying1 发表于 2007-4-13 01:06 | 显示全部楼层 |阅读模式
S3x44b0x的串口在fifo模式下采用中断方式发送字符串&quot;123456789abcdf&quot;<br /><br />发送函数为<br />void&nbsp;__irq&nbsp;Uart0_TxFifoInt(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;while(&nbsp;!(rUFSTAT0&nbsp;&&nbsp;0x200)&nbsp;&&&nbsp;(*uart0TxStr&nbsp;!=&nbsp;'\0')&nbsp;)&nbsp;&nbsp;&nbsp;//until&nbsp;tx&nbsp;fifo&nbsp;full&nbsp;or&nbsp;end&nbsp;of&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rUTXH0=*uart0TxStr++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_UTXD0;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(*uart0TxStr&nbsp;==&nbsp;'\0')<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rUCON0&nbsp;&=&nbsp;0x3f3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_UTXD0;<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMSK|=BIT_UTXD0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />结果超级终端没有任何显示&nbsp;<br /><br />如果增加一个延时函数Delay(),如下所示<br />void&nbsp;__irq&nbsp;Uart0_TxFifoInt(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;while(&nbsp;!(rUFSTAT0&nbsp;&&nbsp;0x200)&nbsp;&&&nbsp;(*uart0TxStr&nbsp;!=&nbsp;'\0')&nbsp;)&nbsp;&nbsp;&nbsp;//until&nbsp;tx&nbsp;fifo&nbsp;full&nbsp;or&nbsp;end&nbsp;of&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rUTXH0=*uart0TxStr++;<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay(70);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_UTXD0;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(*uart0TxStr&nbsp;==&nbsp;'\0')<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rUCON0&nbsp;&=&nbsp;0x3f3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_UTXD0;<br />&nbsp;&nbsp;&nbsp;&nbsp;rINTMSK|=BIT_UTXD0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />超级终端显示正常<br /><br />问题:<br />为什么没有延时的时候,超级终端没有显示?按理说,每次写入数据前,都要检查fifo是否已满,按理说是不会冲掉以前写的数据啊?
sjnh 发表于 2007-4-13 12:59 | 显示全部楼层

rUCON0 &= 0x3f3

rUCON0&nbsp;&=&nbsp;0x3f3,禁止写数据了,当然停止了
 楼主| tianying1 发表于 2007-4-13 23:32 | 显示全部楼层

非常感谢

&nbsp;&nbsp;&nbsp;&nbsp;真是一言惊醒梦中人。这个问题困扰了我好几天,我甚至看了fifo的具体设计方法,都没有发现什么问题。一开始我一直猜想是不是PC取数据太慢,先前的数据被后来的数据冲掉了,但是这样的话,好歹也应该显示最后一个传输的数据。<br />&nbsp;&nbsp;&nbsp;&nbsp;太谢谢你了!终于可以跳过这个程序了。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部