我键盘识别还差最后一步,最后关头出了问题。 初始化过程中的getdescr(),get_report(),set_report(),set_idle()都可以正确执行。 但是我按下键盘时,无法产生中断。 键盘灯亮了一会儿之后就灭了,然后才进入中断,反回值是0x16表示键盘已经断开。 我的中断程序如下所示,大家看一下是不是有问题,导致键盘中断没有执行。 还有,就是在前面的初始化执行完之后,第一次是可以进入键盘中断的, 但是len_temp=rd_usb_data(data_buf);这句执行后len_temp=0;表示没有键盘数据。 我怀疑这句话的端点设置错了,CH375_WR_DAT_PORT(1); /* 如果设备端不是CH37X芯片,那么需要修改端点号 */ 我不清楚键盘的端点号是多少?
/*中断读取键盘数据*msp430*/ if(P1IFG&0X01) { unsigned char len_temp,i; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ status=CH375_RD_DAT_PORT(); if(status!=USB_INT_SUCCESS) { CH375_WR_CMD_PORT( CMD_CLR_STALL ); CH375_WR_DAT_PORT(1); /* 如果设备端不是CH37X芯片,那么需要修改端点号 */ endp6_mode=0x80; endp7_mode=0x80; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 } else { len_temp=rd_usb_data(data_buf); //键盘中断端点数据长度一般为8字节,鼠标为4字节 for(i=0;i!=len_temp;i++) data_in[i]=data_buf[i]; flag_output=1; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 }