llqm1202
驱动牛犊
驱动牛犊
  • 注册日期2003-07-29
  • 最后登录2006-10-16
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1296回复:6

usb数据传输问题

楼主#
更多 发布于:2004-07-13 08:43
在测试usb数据传输时发现当主机往下发的数据包大于128字节时便会出现传送上来的数据包少一包的数据,当我再发数据往下时就会把上次少的那包数据顶回来了,但是这次还是少一包数据。为了这个问题已经弄了一个多星期了,请求各位大侠的帮助!请指点迷津!
Jane_11
驱动牛犊
驱动牛犊
  • 注册日期2002-06-07
  • 最后登录2006-03-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-15 11:20
是不是你的发送数据的时间间隔小于你设备处理数据的时间间隔,使上次的数据还没有完全被收回新的数据又发过来了.我觉得中断控制的BULK传输真的好郁闷!
bab
llqm1202
驱动牛犊
驱动牛犊
  • 注册日期2003-07-29
  • 最后登录2006-10-16
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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          
}

FutureNow
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2007-07-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-13 11:39
看来难度不小啊!兄弟,支持你,继续干! :cool:
有梦才有未来!梦是做出来的!继续做梦,努力工作,享受生活!
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-13 11:23
你把你的BULK IN中断服务例程贴上来
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-13 11:23
你把你的BULK IN中断服务例程贴上去
llqm1202
驱动牛犊
驱动牛犊
  • 注册日期2003-07-29
  • 最后登录2006-10-16
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-13 09:11
我采用的是d12和单片机89e564。
游客

返回顶部