BIOS三个任务,串口外部还回模式,硬件上通过FPGA还回
任务一:产生命令字符串,发送第一个字符;
等待收到信号量1,打印收缓冲区的字符
任务二:收到信号量2,发送一个字符;
断点()
发送完成,关闭发送中断;
任务三:收到信号量3,接收一个字符;
收到字符判断命令,接收完成释放信号量1
串口ISR:通过IIR_INTID判断收发状态,
INTID=1释放信号量2
INTID=2释放信号量3
如此循环测试,断点在发送一个字符处,能够正常还回,发什么能正常收到什么;不加断点,测试发现发送完一条命令后,接收完全不对,字符数目也不够
怀疑收发中断并发有问题,因此在断点处添加时延,Task_sleep(1);然后就正常了
请教各位专家,此处怎么处理,难道发的过程就不能收吗?为什么TI的中断信号不能够分开用bit表示,有中断就都可以处理,只有一个INTID
user3757070:
TI的专家们都去哪了?
Allen35065:
任务二关中断的时候是不是把接收中断也关了,导致接收收不到,加上延时,接收才能完成;
发送接收可以并行,主要还是要把流程理清楚,中断信号在IFR里是bit位表示的,事件号在EVENT表里也是bit位表示的,建议查看C66x CPU and instruction文档
user3757070:
回复 Allen35065:
感谢Allen Yin回答!
首先UART外部是环回的,可以认为就是TRX硬件连线;软件使用中断进行收发,中断接收,中断发送(帧开始打开发送完成中断,帧发送完成关闭发送完成中断);
软件做法:
发送一个帧(10个字节),使用中断进行发送(没有使能fifo,帧开始发送打开中断,发完一个字节产生发送完成中断,然后再发送下一个直到10个字节发送完成关闭发送完成中断);
接收中断常开,按理说在发送完一个字节后的短时间内就会收到发送的字节(产生接收中断),但是我发现现在是发完一个字节要加延时,等到接收这个字节完成,再发送下一个字节,才能正常实现发一帧的同时收一帧,否则发完成中断能正常产生,接收中断不正常,接收的数据也是错误的
Allen35065:
回复 user3757070:
在你的代码里收发中断会很频繁,可能会出现进接收中断和发送中断的时候互相屏蔽或者互相干扰。
建议不要这么实现,使用FIFO模式或者通过EDMA来进行发送接收,减少中断的次数。
user3757070:
回复 Allen35065:
感谢Allen Yin,看起来UART只能开FIFO,用DMA了,另外我还有个问题在另一个帖子里,希望得到您的帮助
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/107883.aspx