阅读:1296回复:6
usb数据传输问题
在测试usb数据传输时发现当主机往下发的数据包大于128字节时便会出现传送上来的数据包少一包的数据,当我再发数据往下时就会把上次少的那包数据顶回来了,但是这次还是少一包数据。为了这个问题已经弄了一个多星期了,请求各位大侠的帮助!请指点迷津!
|
|
沙发#
发布于:2004-07-15 11:20
是不是你的发送数据的时间间隔小于你设备处理数据的时间间隔,使上次的数据还没有完全被收回新的数据又发过来了.我觉得中断控制的BULK传输真的好郁闷!
|
|
|
板凳#
发布于:2004-07-13 12:54
固件用的是周立功给的程序,加了点自己的内容,你要的是固件中的中断程序吗?
usb_isr() interrupt 0 { DISABLE; fn_usb_isr(); ENABLE; } void fn_usb_isr() { unsigned int i_st; bEPPflags.bits.in_isr = 1; i_st = D12_ReadInterruptRegister();//读取中断寄存器 if(i_st != 0) { if(i_st & D12_INT_BUSRESET) { bus_reset();//USB总线服务 bEPPflags.bits.bus_reset = 1; } if(i_st & D12_INT_EOT) dma_eot();//DMA传输结束 if(i_st & D12_INT_SUSPENDCHANGE) bEPPflags.bits.suspend = 1;//挂起改变 if(i_st & D12_INT_ENDP0IN) ep0_txdone();//端点0IN中断 if(i_st & D12_INT_ENDP0OUT) ep0_rxdone();//端点0OUT中断 if(i_st & D12_INT_ENDP1IN) ep1_txdone();//端点1IN中断 if(i_st & D12_INT_ENDP1OUT) ep1_rxdone();//端点1OUT中断 if(i_st & D12_INT_ENDP2IN) main_txdone();//端点2IN中断 if(i_st & D12_INT_ENDP2OUT) main_rxdone();//端点2OUT中断 } bEPPflags.bits.in_isr = 0; } void main_txdone(void) { // unsigned char len,epstatus; D12_ReadLastTransactionStatus(5); //清中断标志位 } //主端点OUT控制 computer-->mine OUT: output from the USB host. void main_rxdone(void) { unsigned char len,epstatus; D12_ReadLastTransactionStatus(4); //清中断标志位 //接收数据 len = D12_ReadEndpoint(4, 64, EpBuf); epstatus=D12_ReadEndpointStatus(4); epstatus &= 0x60; if (epstatus == 0x60) len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据 I_RECEIVED=1; //ADD BY LY 2003.1.07 I_RECEIVED_LEN=len;//ADD BY LY 2003.1.07 } |
|
地板#
发布于:2004-07-13 11:39
看来难度不小啊!兄弟,支持你,继续干! :cool:
|
|
|
地下室#
发布于:2004-07-13 11:23
你把你的BULK IN中断服务例程贴上来
|
|
5楼#
发布于:2004-07-13 11:23
你把你的BULK IN中断服务例程贴上去
|
|
6楼#
发布于:2004-07-13 09:11
我采用的是d12和单片机89e564。
|
|