打印
[ZLG-ARM]

LPC2148,USB API函数WriteData214x 问题! 急.

[复制链接]
3180|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
helfen|  楼主 | 2007-12-27 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
周立功的工程师:
  你好.我公司是贵公司的客户,我们现在有一个问题想赐教!
我用的是LPC2148,DMA传输模式,上位机用逻辑端点1, 发送2字节数据到下位机.
上位机程序.
    ret = WriteData214x(1, sendbuf, 2, 1000);
    if (ret != 2)
    {
        MessageBox("逻辑端点 1 发送数据错误!");
        return;
    }    //这里定义了sendbuf[512];
ret = ReadData214x(0, &ack, 1, 1000);
    if (ret != 1)
    {
        MessageBox("逻辑端点 1 接收数据错误!");
        return;
    }
    if (ack != 1)
    {
        MessageBox("逻辑端点 1 应答错误");
        return;
    }
下位机程序.
if (bEPPflags.bits.ep1_rxdma == 1)
    {    
     len = USB_DMASetTransLength(2, 2);    //配置逻辑端点2的DMA接收数据长度
    DISABLE();
    bEPPflags.bits.ep1_rxdma = 0;
    pSrc = USB_DMAGetBuffer(2);
    len = (pSrc[0] << 8) + pSrc[1];     /* 取得需要接收的数据的字节长度 */
                     
    pDst = USB_DMAGetBuffer(3);
    a[0]=0x01;
    memcpy(pDst,a,1);
    len =USB_DMASetTransLength(3, 1);// 配置物理端点3 DMA发送缓冲区大小
    USB_DMAStart_IN(3);
            
    ENABLE();
     }
    

问题:: 
   编译后,运行上位机程序出现"逻辑端点 1 接收数据错误!"
   而当我把上面的程序改成
   ret = WriteData214x(1, sendbuf, 512, 1000);
    if (ret != 512)
    {
        MessageBox("逻辑端点 1 发送数据错误!");
        return;
    }    //这里定义了sendbuf[512];
  后程序运行完全正常! 如果把WriteData214x    里的函数发送字节个数改成小于512时就会出现错误!
  (1) 请问,是不是下位机端点缓冲区设置了512,上位机就只能发送512个字节的包吗?我这里只想发送2个字节的数据.或小于512的包,请问是不是每次都得发送512的包?
  (2) 请问WriteData214x是不是有问题?
谢谢!! 
     

相关帖子

沙发
zlgarm| | 2007-12-27 17:31 | 只看该作者

to helfen

helfen;您好!
    关于USB方面的问题,请您明天上班时间致电 (020) 28872412!


                                                By zlgarm_wzj

使用特权

评论回复
板凳
wlsui| | 2007-12-27 22:28 | 只看该作者

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

上位机程序:         下位机程序:
---------------------------------------
WriteData214x ----> USB_DMAGetBuffer
发送两字节
---------------------------------------
ReadData214x <----- USB_DMAStart_IN
读一字节应答

显然,下位机有一个USB_DMAGetBuffer是多余的

使用特权

评论回复
地板
helfen|  楼主 | 2007-12-29 10:36 | 只看该作者

回复

pSrc = USB_DMAGetBuffer(2); 
这个是得到DAM模式下用于USB RAM与EP RAM之间传递数据的,上面的语句是最端点在USB RAM中的地址,如果不得到他的地址,怎么才能取数据呢? 
wlsui 赐教!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

粉丝