[ZLG-ARM] 两片LPC2148实现并口通信的问题

[复制链接]
 楼主| channyv 发表于 2007-8-11 23:10 | 显示全部楼层 |阅读模式
用两片2148的IO口来作并口通信,其中一片采集数据,利用IO口将数据传导另一片上去,接收数据的2148再将收到的数据用USB传到PC上,主要过程是:接收端先写入电路参数到发送端,发送端再发送数据,发送端的主要代码如下:<br />while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((FIO0PIN3&0x10)==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当采集卡被片选时<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;FIO0SET2=0x04;//置高发送端给接收端的握手信号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((FIO0PIN1&0xa0)==0x80)&nbsp;//接收端写入参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{。。。。。。//发送端接收写入的参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((FIO0PIN1&0xa0)==0x20)//接收端要求接收数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{。。。。。。//采集数据并发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />接收端主要是用的那个USB&nbsp;DMA程序,大体都差不多,只做了一些修改:<br />while(1)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;usbserve();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bEPPflags.bits.configuration&nbsp;==&nbsp;1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;USB已配置完成&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bEPPflags.bits.ep2_rxdma&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;.......//片选采集卡<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写入参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />现在我的问题在于两个程序同时运行时,只有第一次可以在PC上得到采集的数据,而第二次程序就会一直停在一个地方运行,我通过单步调试发现,在第二次准备进行数据传输的过程中,发送端的程序始终进不了if((FIO0PIN1&0xa0)==0x80)和&nbsp;&nbsp;&nbsp;&nbsp;if((FIO0PIN1&0xa0)==0x20)下面的部分,而测得相对应的管脚值符合if((FIO0PIN1&0xa0)==0x80)条件,奇怪的是我在第一次数据传输过程中也单步执行程序,当测得相应管脚上的值符合if((FIO0PIN1&0xa0)==0x80)和&nbsp;&nbsp;&nbsp;&nbsp;if((FIO0PIN1&0xa0)==0x20)两个条件时,程序都可以进行到相应的条件语句下面的部分执行,即程序执行顺序完全正常。由于我在两边程序里都作了同步处理,即当一边的程序不往下执行时,另一边也不能向下执行,这主要是为了保证数据传输的正确性,恳请各位帮忙分析一下原因,谢谢<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

12

帖子

0

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

8

主题

12

帖子

0

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