2.2 EMM8驱动开发
首先是对各串口的初始化和中断配置,初始化包括设置波特率以及数据格式。
在实际的工程应用中,需要8个串口共同使用一个中断(中断资源不足),实现8串口的全双工同时收发。难点在于使用同一个中断且不能丢数据,对于驱动使用同中断问题,关键是接收数据的中断服务程序ISR。经过探索,不论是否使用单中断,读EMM8卡上I/O Register Map表中的一个中断状态寄存器(interrupt status register),可以指出当时是哪一个串口收到数据,读出该串口的数据即可。但是这种实现方法经过测试在接收时丢数据。后经研究发现,中断状态寄存器并不一定在某一个时刻只有一个端口位发生跳转。即CPU收到中断后,有可能是几个串口“同时”收到数据,这是因为中断控制器将同一个CPU中断分给了不同的串口。从CPU端看来只有一个中断,但从各串口来讲,这个中断有可能是几个串口“同时”产生的。因此要对中断状态寄存器进行轮询,由发生跳转的串口位接收该串口的数据。修改后,经过编写用例测试,可以稳定地使用单中断接收数据且不影响数据的发送。
2.3 驱动测试
首先是各串口的功能测试,使用“串口调试助手”软件工具通过PC机与各目标机串口通信,收发数据,然后通过屏幕显示得到的数据,对比规定的预期结果,检测数据收发是否正确。经多次验证,工作稳定,通信正确。
综合测试:使用2台PC104分别安装STV2050CPU模块和EMM8多串口模块各1块,2台PC通过网口(交换机)连接2台PC104,2个EMM8通过8根RS-232双头串口线连接。2台PC通过网口使用tornado的shell工具下载启动程序。2台PC104分别称为1主机和2主机。测试方法是:
1主机同时发送8串口的数据,2主机8串口接收并转发回1主机。1主机接收返回的数据,判断是否通信错误。经检验正确通信300000次无错,多次验证。完成对EMM8多串口通讯模块全双工收发的测试。
经过以上测试,表明本文所述的多串口卡通信实现方法有效,所开发模块稳定可靠。
3、结束语
本文介绍了VxWorks嵌入式系统中的多串口卡通信的实现过程,因篇幅有限,不能列出详尽代码。本文以EMM8为例,采用驱动直接访问硬件的方法,较为
简洁、高效地解决了单中断多串口全双工通信的问题,满足了项目需求,并经过了测试和验收。为日后类似问题的解决提供了一些参考和经验。