对不起,我的描述有错<br />以上的函数我觉得应该为<br /><br />void USB_DataInStage (void) {<br /> DWORD cnt;<br /> do{<br /> if (EP0Data.Count > USB_MAX_PACKET0) {<br /> cnt = USB_MAX_PACKET0;<br /> } else {<br /> cnt = EP0Data.Count;<br /> }<br /> cnt = USB_WriteEP(0x80, EP0Data.pData, cnt);<br /> EP0Data.pData += cnt;<br /> EP0Data.Count -= cnt;}while(EP0Data.Count > USB_MAX_PACKET0);<br /> pUDP->UDP_CSR[EPNum] |= AT91C_UDP_TXPKTRDY;<br /><br />}<br /><br />DWORD USB_WriteEP (DWORD EPNum, BYTE *pData, DWORD cnt) {<br /> DWORD n;<br /><br /> EPNum &= 0x0F;<br /> if (pUDP->UDP_CSR[EPNum] & AT91C_UDP_TXPKTRDY) {<br /> if ((DualBankEP & (1 << EPNum)) && (TxDataBank[EPNum] == 0)) {<br /> TxDataBank[EPNum] = 1;<br /> } else {<br /> return (0);<br /> }<br /> }<br /> for (n = 0; n < cnt; n++) {<br /> pUDP->UDP_FDR[EPNum] = *pData++;<br /> }<br /> //pUDP->UDP_CSR[EPNum] |= AT91C_UDP_TXPKTRDY;<br /><br /> return (cnt);<br />}<br />不然有点担心:只发了USB_MAX_PACKET0个字节,后面没有到这个地方来,EP0Data内容乱了,岂不是丢了,由于初涉USB目前还没去书店买书看,不到之处,望大侠们见谅
|