zdyhit
驱动牛犊
驱动牛犊
  • 注册日期2004-08-31
  • 最后登录2005-09-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1131回复:0

关于用D12+89C52 BULK传输的问题?

楼主#
更多 发布于:2004-09-02 08:45
各位大虾!

我现在刚好在用d12+89c52,想用它来做数据的采集,用的是BULK传输方式,可是我的BULK IN 速度老是只有60-70k左右,不知道是不是我的固件问题,麻烦大家能不能帮忙看一下.

这是用BULK传输 的函数
void bulk_transmit (unsigned char * pBulkData, unsigned int length)
{
  BulkData.wCount=0;
  BulkData.wLength=length;
  BulkData.pData=pBulkData;

  if (length >128) {
      D12_WriteEndpoint(5, 64, BulkData.pData);// send 64
      D12_WriteEndpoint(5, 64, BulkData.pData+64);//send
      BulkData.wCount += 128;
      bulk_state = USB_TRANSMIT;
      }
   else if (length > 64) {
       D12_WriteEndpoint(5, 64, BulkData.pData);
       D12_WriteEndpoint(5, length-64, BulkData.pData+64);
       BulkData.wCount += length;
       bulk_state = USB_IDLE;
       }
   else if (length >=0){
          D12_WriteEndpoint(5, length, pBulkData);
          BulkData.wCount += length;
          bulk_state = USB_IDLE;
        }
}
//-----------------
  BulkData结构的定义如下:
typedef struct _bulk_xfer
{
    unsigned int wLength;
    unsigned int wCount;
    unsigned char * pData;
} BULK_XFER;
//――----――――――――――
这是在中断程序里的响应
void main_txdone(void)
{
   unsigned int len;//,epstatus,ep_last;
   D12_ReadLastTransactionStatus(5); //清中断标志位/
   len = BulkData.wLength - BulkData.wCount;
   if(bulk_state!=USB_TRANSMIT) return ;
   if (len > 128) {
       D12_WriteEndpoint(5, 64, BulkData.pData+
                                 BulkData.wCount);
       D12_WriteEndpoint(5, 64, BulkData.pData+
                                 BulkData.wCount+64);  
       BulkData.wCount += 128;
       bulk_state = USB_TRANSMIT;
    }
    else if (len > 64) {
            D12_WriteEndpoint(5, 64, BulkData.pData+
                                      BulkData.wCount);
            D12_WriteEndpoint(5, len-64, BulkData.pData+
                                     BulkData.wCount+64);
            BulkData.wCount += len;
            bulk_state = USB_IDLE;
     }
     else if (len >0){
         D12_WriteEndpoint(5, len, BulkData.pData+        
                                   BulkData.wCount);
         BulkData.wCount += len;
         bulk_state = USB_IDLE;
      }
}
其中D12_XXXXXXXXX 用的是周立功提供的程序中的d12.c中的函数!

如能指教一二,小弟不胜感激!先谢过了!
游客

返回顶部