阅读:1131回复:0
关于用D12+89C52 BULK传输的问题?
各位大虾!
我现在刚好在用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中的函数! 如能指教一二,小弟不胜感激!先谢过了! |
|