DSP芯片是TMS320F28335,参考的SCI文档编号SPRUFZ5A
SCI应用在485通讯上,除了TXD和RXD还有一个CTL信号来由软件控制收发。实际中发现,DSP发送完数据以后,马上把CTL设置为接收状态,会丢失最后的字节,分析以后认为,数据写入SCITXBUF以后,实际数据还没有从TXD管脚发送出去,如果将CTL置为接收,必然会丢失数据。
看了下文档SPRUFZ5A,SCICTL2寄存器中的TXRDY来判断SCITXBUF是否hi空的,TXEMPTY来判断TXBUF和TXSFT是否是空的。
使用TXEMPTY判断到TXBUF和TXSHF都是空的以后,再将CTL设置为接收状态,经过测试,低波特率(9600左右)工作正常,高一点的波特率(115200)仍然不正常,最后解决方法只能在设置CTL方向控制的时候加入软件延时,由于要适配2400-115200波特率,软件延时只能按照2400来设置,浪费非常多CPU时间。
如何才能判断到SCI数据彻底发送出去然后设置485方向控制为接收状态呢?TXBUF和TXSHF都空了以后,还有数据在DSP内部吗?
mangui zhang:
可以用中断试试