大约在4月份学COMPUTER 大侠也做了一个USB键盘,但结果却很令人失望,在别人的电脑上可以使用(主板配置都可以),偏偏在我的电脑(很多电脑也有该问题,我想肯定是配置不行吧)上不可以使用,我原以为是主板有问题,就放了一段时间,但一想如果主板有问题,那为什么一般的产品都可以用呢? 于是,新的学期我又拿起了D12,也问了电脑00该问题,但还是没解决,不得以,自己用串口一步一步的跟踪,看看到底有什么,但一切并不如你所愿,比如,当你第一次读D12控制端点输入产生的中断,再读上次处理状态,返回值却是92,但这明显是错误的,这个方法也有很大的难度。 最后通过串口看出是设置地址的那一步有问题,然后把设置地址(试了一下没多大把握,瞎猜的)改为如下: void set_usb_address(void) { usb_flags.flags.set_addr=1; while(select_endpoint(1)&0x01); set_usb_addr(Control_Data.DeviceRequest.wValue); while(select_endpoint(1)&0x01); write_endpoint_buff(1,0,0);
usb_flags.flags.usb_endp0_in=0; usb_flags.flags.setup_packet_out=0; } 就成功了,也许上帝看我太累,一遍又一遍的烧程序! 不过整个程序是学习COMPUTER 00,没办法,咱们没天赋,只能偶尔站在巨人的肩膀上看一看风景了, 看似没什么,但对我意义重大,有终于有续集了。
|