at89c51snd1中断问题

[复制链接]
 楼主| 小小电子 发表于 2007-4-26 13:34 | 显示全部楼层 |阅读模式
请教各位,当at89c51snd1完成端点中断时   要如何清除中断标志啊

DATASHEET里面是写this bit is cleared by hardware when all the endpoint sources are cleared.
不明白  这个ENDPOINT SOURCES要如何清楚   
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)
    {
        //......
    }
}
 楼主| 小小电子 发表于 2007-4-27 15:25 | 显示全部楼层

自己顶一下

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

那位好心的给看看这句正确吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

181

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

29

主题

181

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部