打印

圈巨侠,救命啊!

[复制链接]
1471|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzs0126|  楼主 | 2009-5-15 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
computer00| | 2009-5-16 22:36 | 只看该作者

没道理啊...可能跟你电脑的驱动有关?你换台电脑试试?

使用特权

评论回复
板凳
yzs0126|  楼主 | 2009-5-18 10:17 | 只看该作者

回复圈圈

看来是我电脑的问题了,换了台就好使了,会不会PID,VID或者出厂编号什么的和之前已有的设备冲突,导致死机的呢!

使用特权

评论回复
地板
computer00| | 2009-5-18 10:19 | 只看该作者

如果有冲突,那么应该不会出现新硬件的对话筐。

据说有些笔记本(好象是戴尔,记不清楚了)、装了bus hound后会有这个问题....

使用特权

评论回复
5
topone| | 2009-5-19 23:16 | 只看该作者

考虑下供电合接地

建议考虑下USB电缆的接地,ESD以及+5V电源

使用特权

评论回复
6
Terry_lin| | 2009-5-22 17:15 | 只看该作者

b ushound..经常导致死机

使用特权

评论回复
7
yzs0126|  楼主 | 2009-5-25 18:44 | 只看该作者

呵呵 谢谢!请问圈圈书中代码一个问题

  最近学习了键盘例程,为什么用的都是结构体和联合体,这有什么好处吗?还有,鼠标例程枚举是在控制输出中断中进行的,而键盘例程里枚举是在控制输入中断里进行的,有点困惑!
  拿键盘实例来说,每次控制操作先有一个建立包,这个是在控制输出中断中处理的,没什么疑义,可是接下来设备怎么进入控制输入中断里进行相应的枚举操作呢?中断输入标志是怎么置位的呢?这之前主机做了些什么,使得产生了输入中断!望圈老师赐教,学生不才哈!

使用特权

评论回复
8
computer00| | 2009-5-25 19:47 | 只看该作者

书中的代码好象用的是数组啊,没用结构体

使用特权

评论回复
9
yzs0126|  楼主 | 2009-5-26 09:27 | 只看该作者

回复圈圈!

光盘里键盘例程的代码,很多变量都是结构体和联合体!可是我的困惑还是没有解答啊,圈老师赐教!

使用特权

评论回复
10
computer00| | 2009-5-26 10:05 | 只看该作者

我晕,这个没有道理的啊...别人拿到的光盘都没结构体和联

你贴点代码上来看看?哪来的结构体啊?晕...

使用特权

评论回复
11
yzs0126|  楼主 | 2009-5-26 14:41 | 只看该作者

部分的,不过我又发现了另外一个没带结构体的代码版本!

/定义配置,接口,端点等描述符结构体,因为它们是随配置描述符一起返回的
typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
{
 CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
 INTERFACE_DESCRIPTOR_STRUCT  interface_descriptor;
 HID_DESCRIPTOR_STRUCT hid_descriptor;
 ENDPOINT_DESCRIPTOR_STRUCT  endpoint_descriptor[ENDPOINT_NUMBER];
}CON_INT_ENDP_DESCRIPTOR_STRUCT;

code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=
{
//configuration_descriptor                                          //配置描述符
{
 sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),                           //配置描述符的字节数大小
 CONFIGURATION_DESCRIPTOR,                                          //配置描述符类型编号
 SWAP16(sizeof(CON_INT_ENDP_DESCRIPTOR_STRUCT)),
 0x01,                                                            //只包含一个接口
 0x01,                                                            //该配置的编号
 0x00,                                                            //iConfiguration字段
 0xA0,                                                            //采用总线供电,支持远程唤醒
 0xC8                                                            //从总线获取最大电流400mA
},
//interface_descritor                                             //接口描述符
{
 sizeof(INTERFACE_DESCRIPTOR_STRUCT),                             //接口描述符的字节数大小
 INTERFACE_DESCRIPTOR,                                            //接口描述符类型编号
 0x00,                                                            //接口编号为0
 0x00,                                                            //该接口描述符的编号
 ENDPOINT_NUMBER,                                                 //非0端点数量为2,只使用端点主端点输入和输出
 0x03,                                                            //人机接口设备(HID)类
 0x01,                                                            //使用的子类:支持BIOS根启动Boot的子类
 0x01,                                                            //使用的协议:键盘
 0x00                                                             //接口描述符字符串索引
},




code uint8 HeadTable[][74]={
"******************************************************************** ",
"******                 EDN USB学习板键盘程序                  ****** ",
"******                      AT89S52 CPU                       ****** ",
"******                  建立日期:",__DATE__,"                 ****** ",
"******                   建立时间:",__TIME__,"                   ****** ",
"******                    作者:电脑圈圈                      ****** ",
"******                    欢迎访问作者的                      ****** ",
"******           USB专区:http://group.**/93/       ****** ",
"******      BLOG1:http://www.**/blog/computer00    ****** ",
"******                BLOG2:http://computer00.21ic.org       ****** ",
"******                  请按K1-K8分别进行测试                 ****** ",
"******       K1:左Ctrl键  K2:左Shift键  K3:左Alt键  K4:0键    ****** ",
"******       K5:1键  K6:2键  K7:Caps Lock键 K8:Num Lock键     ****** ",
"******************************************************************** ",
};



/***************************主函数**********************************************/
void main(void)
{
 uint8 i;
 InitUART();  //串口初始化
 Printc(0x0c);  //清屏
 Printc(0x0c);
 Prints("系统启动. ");
 for(i=0;i<18;i++)      //显示信息
 {
  Prints(HeadTable);
 } 
 disconnect_usb();        //断开USB连接
 delay(1000);           //延迟
 init_usb();           //初始化USB芯片
 connect_usb();           //连接USB
 InitKeyboard();       //

 while(1)
  { 
   if(!USB_INT)        //中断产生
    {
       read_interrupt_register();
     if(Interrupt_Register.Interrupt.bus_reset){usb_bus_reset();continue;}
     if(Interrupt_Register.Interrupt.suspend_change){usb_bus_suspend();continue;}
     if(Interrupt_Register.Interrupt.control_out_port){endp0_out();continue;}
     if(Interrupt_Register.Interrupt.control_in_port&&usb_flags.flags.usb_endp0_in){endp0_in();continue;}
//     if(Interrupt_Register.Interrupt.port_out_1)endp1_out();
//     if(Interrupt_Register.Interrupt.port_in_1)endp1_in();
     if(Interrupt_Register.Interrupt.main_out_port){endp2_out();}
     if(Interrupt_Register.Interrupt.main_in_port){endp2_in();}
    }
  }
}
/******************************************************************************/

使用特权

评论回复
12
computer00| | 2009-5-31 15:51 | 只看该作者

你贴的是网上老版本的代码,根本不是随书光盘的,

不知道你怎么复制的,光盘里没有都能复制得到。

使用特权

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

本版积分规则

14

主题

59

帖子

0

粉丝