get95031128
驱动牛犊
驱动牛犊
  • 注册日期2006-10-17
  • 最后登录2008-07-20
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
阅读:1696回复:1

请教CY7C68013 Bulk传输的问题(非常感谢大家)

楼主#
更多 发布于:2007-09-22 23:13
非常感谢大家!!!
今有一个采用请教CY7C68013的采集板,
上层应用程序单独启动了一个监视读USB数据的线程,但是发现在每一次读数据之后,再读取下一次数据之间总是会丢掉一大串的数据
另外有个问题,比如在操作RS232口的时候,可知设置发送和接收缓冲区,不知道自带的驱动有没有这个功能。
读函数如下:
 m_InPipeNum = 2;
调用是在一个线程中不停的调用该函数。
UINT CUsbDevice::ReadUsbDevice(HANDLE hInDevice,UINT ReadLen, LPVOID pReadBuffer)
{
    BULK_TRANSFER_CONTROL   inBulkControl;
    THREAD_CONTROL inThreadControl;

    memset(pReadBuffer,0,ReadLen);
    // initialize data structures for the read thread
    inBulkControl.pipeNum = m_InPipeNum;

    inThreadControl.hDevice = hInDevice;
    inThreadControl.Ioctl = IOCTL_EZUSB_BULK_READ;
    inThreadControl.InBuffer = (PVOID)&inBulkControl;
    inThreadControl.InBufferSize = sizeof(BULK_TRANSFER_CONTROL);
    inThreadControl.OutBuffer = pReadBuffer;
    inThreadControl.OutBufferSize = ReadLen;
    inThreadControl.completionEvent = m_hReadCompleteEvent;
    inThreadControl.status = FALSE;
    inThreadControl.BytesReturned = 0;
    
    //启动读写线程
    CWinThread * rd = AfxBeginThread(TransferThread,&inThreadControl);
    inThreadControl.hThread = rd->m_hThread;
    
    //等待读写操作完成        
    WaitForSingleObject(m_hReadCompleteEvent,INFINITE);      

    // if either the read or write failed, we want to stop the test
    if (!inThreadControl.status)
    {
        TRACE0("Read UsbDevice Error!\r\n");

        return 0;
    }
    return inThreadControl.BytesReturned;
}
I/O操作线程定义如下:
UINT  CUsbDevice::TransferThread(LPVOID pParam)
{
    PTHREAD_CONTROL threadControl = (PTHREAD_CONTROL)pParam;
  
    // perform the ISO transfer
    threadControl->status = DeviceIoControl (
        threadControl->hDevice,
        threadControl->Ioctl,
        threadControl->InBuffer,
        threadControl->InBufferSize,
        threadControl->OutBuffer,
        threadControl->OutBufferSize,
        &threadControl->BytesReturned,
        NULL);
        // if an event exists, set it
    if (threadControl->completionEvent)
    {
        SetEvent(threadControl->completionEvent);
    }
    return 0;
}
wind
驱动牛犊
驱动牛犊
  • 注册日期2001-09-02
  • 最后登录2009-07-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-24 10:50
你要分辨是软件还是硬件问题,cy7c68013开发包里有标准程序,建议你先试试硬件、firmware,再动驱动。
游客

返回顶部