请各位帮忙看看,运用DMA在批量传输方式中能够正常接收,无法正常发送,是什么原因?<br />void USB_EndPoint2 (DWORD event) {<br /><br /> USB_DMA_DESCRIPTOR DD;<br /><br />//从PC接收数据,能正常接收数据<br /> if (event & (USB_EVT_OUT_DMA_EOT) | (USB_EVT_OUT_DMA_NDR)) {<br /> /* End of Transfer or New Descriptor Request */<br /> DD.BufAdr = (DWORD)DataBuf + 2*DataIn; /* DMA Buffer Address */<br /> DD.BufLen = B_S; /* DMA Packet Count*/<br /> DD.MaxSize = 64; /* Must be 0 for Iso Transfer */<br /> DD.InfoAdr = (DWORD)InfoBuf; /* Packet Info Buffer Address */<br /> DD.Cfg.Val = 0; /* Initial DMA Configuration */<br /> DD.Cfg.Type.IsoEP = 0; /* Iso Endpoint */<br /> USB_DMA_Setup (0x02, &DD); /* Setup DMA */<br /> USB_DMA_Enable(0x02); /* Enable DMA */<br /> }<br /> if (event & USB_EVT_OUT_DMA_EOT) {<br /> /* End of Transfer */<br /> if (USB_DMA_BufAdr(0x02) != ((DWORD)DataBuf + 2*DataIn)) {<br /> /* Data Available */<br /> DataIn += 64; /* Update Data In Index*/<br /> DataIn &= B_S - 1; /* Adjust Data In Index */<br /> if (DataIn & (B_S - 1)) == B_S/2) {<br /> DataRun = 1; /* Data Stream running */<br /> }<br /> }<br /> }<br /> ////////////////////////////////////发送数据到PC,不能发送数据<br /> if (DataRun == 1)<br /> {<br /> if (event & (USB_EVT_IN_DMA_EOT) | (USB_EVT_IN_DMA_NDR)) {<br /> DD.BufAdr = (DWORD)DataBuf + 2*DataOut; /* DMA Buffer Address */<br /> DD.BufLen = B_S; /* DMA Packet Count */<br /> DD.MaxSize = 64; /* Must be 0 for Iso Transfer */<br /> DD.InfoAdr = (DWORD)InfoBuf; /* Packet Info Buffer Address */<br /> DD.Cfg.Val = 1; /* Initial DMA Configuration */<br /> DD.Cfg.Type.IsoEP = 0; /* Iso Endpoint */<br /> USB_DMA_Setup (0x82, &DD); /* Setup DMA */<br /> USB_DMA_Enable(0x82); /* Enable DMA */<br /> }<br /> if (event & USB_EVT_IN_DMA_EOT) {<br /> DataOut += 64; /* Update Data In Index */<br /> DataOut &= B_S - 1; /* Adjust Data In Index */<br /> if (DataIn == DataOut) {<br /> DataRun = 0; /* Data Stream running */<br /> DataOut = DataIn; /* Initialize Data Indexes */<br /> }<br /> }<br /> }<br />}<br /><br />程序是使用keil自带的usbaudio程序代码改过来的,现在接收应该正常了,但发送PC接收不到任何数据,我把接收部分单独提出来也没有用,象这样也收不到数据:<br />void USB_EndPoint1 (DWORD event) {<br /> USB_DMA_DESCRIPTOR DD;<br /> DWORD DataLen;<br /> BYTE DBuf[0x10];<br /> switch (event) {<br /> case USB_EVT_IN: //控制传输来自PC的输入 发送传输字节的总长度<br /> break;<br /> case USB_EVT_OUT: //控制传输来自PC的输出 接收所有命令<br />// USB_ClrStallEP(USB_ENDPOINT_OUT(1));<br /> DataLen = 0;<br /> DataLen = USB_ReadEP(USB_ENDPOINT_OUT(1), DBuf);<br /> DD.BufAdr = (DWORD)DataBuf; /* DMA Buffer Address */<br /> DD.BufLen = B_S; /* DMA Packet Count */<br /> DD.MaxSize = 64; /* Must be 0 for Iso Transfer */<br /> DD.InfoAdr = (DWORD)InfoBuf; /* Packet Info Buffer Address */<br /> DD.Cfg.Val = 1; /* Initial DMA Configuration */<br /> DD.Cfg.Type.IsoEP = 0; /* Iso Endpoint */<br /> USB_DMA_Setup (0x82, &DD); /* Setup DMA */<br /> USB_DMA_Enable(0x82); /* Enable DMA */<br /> break;<br /> }<br />}<br /> |
|