[ZLG-ARM] LPC2148,USB API函数WriteData214x 问题! 急.

[复制链接]
3824|3
 楼主| helfen 发表于 2007-12-27 16:50 | 显示全部楼层 |阅读模式
周立功的工程师:<br />&nbsp;&nbsp;你好.我公司是贵公司的客户,我们现在有一个问题想赐教!<br />我用的是LPC2148,DMA传输模式,上位机用逻辑端点1,&nbsp;发送2字节数据到下位机.<br />上位机程序.<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;WriteData214x(1,&nbsp;sendbuf,&nbsp;2,&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ret&nbsp;!=&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&quot;逻辑端点&nbsp;1&nbsp;发送数据错误!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;//这里定义了sendbuf[512];<br />ret&nbsp;=&nbsp;ReadData214x(0,&nbsp;&ack,&nbsp;1,&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ret&nbsp;!=&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&quot;逻辑端点&nbsp;1&nbsp;接收数据错误!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ack&nbsp;!=&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&quot;逻辑端点&nbsp;1&nbsp;应答错误&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />下位机程序.<br />if&nbsp;(bEPPflags.bits.ep1_rxdma&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;USB_DMASetTransLength(2,&nbsp;2);&nbsp;&nbsp;&nbsp;&nbsp;//配置逻辑端点2的DMA接收数据长度<br />&nbsp;&nbsp;&nbsp;&nbsp;DISABLE();<br />&nbsp;&nbsp;&nbsp;&nbsp;bEPPflags.bits.ep1_rxdma&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;pSrc&nbsp;=&nbsp;USB_DMAGetBuffer(2);<br />&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;(pSrc[0]&nbsp;&lt&lt&nbsp;8)&nbsp;+&nbsp;pSrc[1];&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;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pDst&nbsp;=&nbsp;USB_DMAGetBuffer(3);<br />&nbsp;&nbsp;&nbsp;&nbsp;a[0]=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(pDst,a,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=USB_DMASetTransLength(3,&nbsp;1);//&nbsp;配置物理端点3&nbsp;DMA发送缓冲区大小<br />&nbsp;&nbsp;&nbsp;&nbsp;USB_DMAStart_IN(3);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ENABLE();<br />     }<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />问题:: <br />   编译后,运行上位机程序出现"逻辑端点&nbsp;1&nbsp;接收数据错误!"<br />   而当我把上面的程序改成<br />   ret&nbsp;=&nbsp;WriteData214x(1,&nbsp;sendbuf,&nbsp;512,&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ret&nbsp;!=&nbsp;512)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&quot;逻辑端点&nbsp;1&nbsp;发送数据错误!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;//这里定义了sendbuf[512];<br />  后程序运行完全正常! 如果把WriteData214x&nbsp;&nbsp;&nbsp;&nbsp;里的函数发送字节个数改成小于512时就会出现错误!<br />  (1) 请问,是不是下位机端点缓冲区设置了512,上位机就只能发送512个字节的包吗?我这里只想发送2个字节的数据.或小于512的包,请问是不是每次都得发送512的包?<br />  (2) 请问WriteData214x是不是有问题?<br />谢谢!! <br /> &nbsp;&nbsp;&nbsp;&nbsp;
zlgarm 发表于 2007-12-27 17:31 | 显示全部楼层

to helfen

helfen;您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;关于USB方面的问题,请您明天上班时间致电&nbsp;(020)&nbsp;28872412!<br /><br /><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;zlgarm_wzj
wlsui 发表于 2007-12-27 22:28 | 显示全部楼层

一位机程序和下位机程序要对应:

上位机程序:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下位机程序:<br />---------------------------------------<br />WriteData214x&nbsp;----&gt&nbsp;USB_DMAGetBuffer<br />发送两字节<br />---------------------------------------<br />ReadData214x&nbsp;&lt-----&nbsp;USB_DMAStart_IN<br />读一字节应答<br /><br />显然,下位机有一个USB_DMAGetBuffer是多余的<br />
 楼主| helfen 发表于 2007-12-29 10:36 | 显示全部楼层

回复

pSrc&nbsp;=&nbsp;USB_DMAGetBuffer(2);&nbsp;<br />这个是得到DAM模式下用于USB&nbsp;RAM与EP&nbsp;RAM之间传递数据的,上面的语句是最端点在USB&nbsp;RAM中的地址,如果不得到他的地址,怎么才能取数据呢?&nbsp;<br />wlsui&nbsp;赐教!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

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