打印
[USB驱动]

Mini2440 USB设备驱动问题

[复制链接]
1064|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
whaidong123|  楼主 | 2014-9-24 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    大家好,最近在学习2440的USB功能,现在主要先从USB的设备开始着手,但是在学习过过程遇到了一个问题,纠结了几天,想请教下大家,有没有遇到过类似的问题,问题如下:
    调试过程中发现,设置断点在USB的中断函数,当设备插入PC的USB口,会跳到断点处,也就是说前面的初始化应该都没问题,中断初始化也没啥问题,进了USB中断后,复位USB总线并重新配置USB相关寄存器(ReconfigUsbd函数),配置完之后下一步是应该要给PC端发送设备的描述符,应该执行Ep0Handler()这个函数,而执行这个函数的条件是epIntpnd=rEP_INT_REG这个标志位的第一位要置1,在2440寄存器说明这个会自动置1,但是调试查看epIntpnd没有置1,想问问大家有没有知道原因的,谢了。

void __irq IsrUsbd(void)
{
    U8 usbdIntpnd,epIntpnd;
    U8 saveIndexReg=rINDEX_REG;
    usbdIntpnd=rUSB_INT_REG;
    epIntpnd=rEP_INT_REG;
    if(usbdIntpnd&SUSPEND_INT)
    {
            rUSB_INT_REG=SUSPEND_INT;
            DbgPrintf( "<SUS]");
    }
    if(usbdIntpnd&RESUME_INT)
    {
            rUSB_INT_REG=RESUME_INT;
            DbgPrintf("<RSM]");
    }
    if(usbdIntpnd&RESET_INT)
    {
            DbgPrintf( "<RST]");  
            ReconfigUsbd();  
            rUSB_INT_REG=RESET_INT;  //RESET_INT should be cleared after ResetUsbd().
                      
      // PrepareEp1Fifo();
      
       TransportStage=COMMAND_STAGE; rev_stat=0; Ep2DataLength=0;
       Uart_Printf("bus Reset \n");
    }

    if(epIntpnd&EP0_INT)
    {
        rEP_INT_REG = EP0_INT;  
            Ep0Handler();
    }
    if(epIntpnd&EP1_INT)
    {
            rEP_INT_REG=EP1_INT;  
            Ep1Handler();
    }

    if(epIntpnd&EP2_INT)
    {
            rEP_INT_REG=EP2_INT;  
            DbgPrintf("<2:TBD]");   //not implemented yet       
            //Ep2Handler();
    }

    if(epIntpnd&EP3_INT)
    {
            rEP_INT_REG=EP3_INT;
            Ep3Handler();
    }

    if(epIntpnd&EP4_INT)
    {
            rEP_INT_REG=EP4_INT;
            DbgPrintf("<4:TBD]");   //not implemented yet       
            //Ep4Handler();
    }

    ClearPending(BIT_USBD);          
    rINDEX_REG=saveIndexReg;
}

相关帖子

沙发
whaidong123|  楼主 | 2014-9-25 08:23 | 只看该作者
解决了,没人回应!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

1

粉丝