打印

at89c51snd1中断问题

[复制链接]
1713|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小小电子|  楼主 | 2007-4-26 13:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lbx_00| | 2007-4-26 19:14 | 只看该作者

我用过msc1211的秒中断

失能其他扩展中断,读秒中断的设置寄存器

使用特权

评论回复
板凳
小小电子|  楼主 | 2007-4-26 19:41 | 只看该作者

郁闷啊

问一下    USB枚举时 SND1收到第一个SETUP灵牌包后进入中断,这时候端点0的FIFO有数据吗?    如果没有的话  是不是要在第二次进入端点0中断时才有数据??  也就是当RXOUTB0为1时才有??   望高手赐教   谢谢了

使用特权

评论回复
地板
小小电子|  楼主 | 2007-4-26 20:13 | 只看该作者

看看程序问题

为什么这个程序跑不到 输出3里头呢??
void usb_interrupt(void)  interrupt 13 
{
        printf(0x90,"0",1);
    if(UEPINT&EP0INT)
    {
        UEPNUM=0;
        printf(0x91,"1",1);
        if ((UEPSTAX&RXSETUP) && (!Setup_packet))
        {
            printf(0x92,"2",1);
            Setup_packet=1;
            UEPSTAX= UEPSTAX & (~0x04);
            return;
        }
        if ((UEPSTAX&RXOUTB0) && Setup_packet)
        {
            printf(0x93,"3",1);
            Setup_packet=0;
            UEPSTAX= UEPSTAX & (~0x42);
            read_endpoint_buf(ENDPOINT0,32,control_data_buff.pData);   //读端点0的FIFO
            requestcmd.bmRequestType=control_data_buff.pData[0];
            requestcmd.bRequest=control_data_buff.pData[1];
            requestcmd.wValue=(control_data_buff.pData[3]<<8)+control_data_buff.pData[2];
            requestcmd.wIndex=(control_data_buff.pData[5]<<8)+control_data_buff.pData[4];
            requestcmd.wLength=(control_data_buff.pData[7]<<8)+control_data_buff.pData[6];
            if (requestcmd.bmRequestType & 0x60==0)     //是USB标准请求吗?
            {
                printf(0x94,"4",1);
                switch(requestcmd.bRequest)
                {
                    case get_status       :printf(0x80,"1",1);Get_Status(requestcmd.bmRequestType&0x03);              break;
                    case clear_ferture    :printf(0x81,"2",1);break;//Clear_Ferture();    break;
                    case set_feature      :printf(0x82,"3",1);break;//Set_Feature();      break;
                    case set_address      :printf(0x83,"4",1);break;//Set_Address();      break;
                    case get_descriptor   :printf(0x84,"5",1);Get_Descriptor(requestcmd.wValue,requestcmd.wLength);   break;
                    case get_configuration:printf(0x85,"6",1);break;//Get_Configuration();break;
                    case set_configuration:printf(0x86,"7",1);break;//Set_Configuration();break;
                    case get_interface    :printf(0x87,"8",1);Get_Interface();                                        break;
                    case set_interface    :printf(0x88,"9",1);break;//Set_Interface();    break;
                    default               :printf(0x89,"a",1);break;
                }
                return;
            }
            else if (requestcmd.bmRequestType==0xa1)   //设备类请求,
            {
                //....
            }
        }
    }
    if(UEPINT&EP1INT)
    {
        //......
    }
    if(UEPINT&EP2INT)
    {
        //......
    }
}

使用特权

评论回复
5
小小电子|  楼主 | 2007-4-27 15:25 | 只看该作者

自己顶一下

if (requestcmd.bmRequestType & 0x60==0)     //是USB标准请求吗?

那位好心的给看看这句正确吗?

使用特权

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

本版积分规则

29

主题

181

帖子

1

粉丝