前段时间向贵公司申请了两片CH375B,想用它做主机来和USB键盘通信,单片机用的是MSP430,
程序是参考的论坛里提供的CH375B操作HID设备的例程,开始程序在执行设置CH375工作模式时中断返
回正常,但在等待设备连接时中断返回的却是错误的,本来按照贵公司提供的头文件CH375INC.H如果
连接正常,则应返回0x15,但我的返回时0x95,硬件应该没问题,因为我仔细检查过了,并且前面的
模式设置时中断返回正常,请问这会是什么原因呢? 附上相关代码: #define CH375_INT_WIRE P1IN&0x80 //P1.7 连接CH375的INT#引脚,用于查询中断状态 /************************************* //函数名称:Wait_Interrupt //函数功能:主机端等待操作完成, 返回操作状态 //入口:无 //出口:Intout--状态返回 //备注: ***************************************/ INT8U Wait_Interrupt(void) { while( CH375_INT_WIRE ); //查询等待CH375操作完成中断(INT#低电平) Ch375_Wr_Cmd_Port( CMD_GET_STATUS ); // 产生操作完成中断, 获取中断状态 //return( Ch375_Rd_Dat_Port() ); Intout = Ch375_Rd_Dat_Port(); //此处仅仅为了测试,否者应打开被屏蔽的语句 return (Intout); }
/************************************* //函数名称:Ch375_Rd_Dat_Port //函数功能:从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 //入口:无 //出口:dout--读得的数据,一个字节 //备注: ***************************************/ INT8U Ch375_Rd_Dat_Port(void) { INT8U dout; CH375_A0_CLR; //A0=1时为写入命令 =0为写入数据 CH375_WR_SET; CH375_RD_CLR; //RD=0时表示读入操作 Delay_X_Us(2);// 因为MSP430单片机较快所以需延时 CH375_DATA_IN; dout= P2IN; Delay_X_Us(1); CH375_RD_SET;//RD=0时表示读入操作 Delay_X_Us(1); return(dout); }
/************************************* //函数名称:Ch375_Wr_Cmd_Port //函数功能:向CH375写命令,周期不小于4uS,如果单片机较快则延时 //入口:cmd--待写命令 //出口:无 //备注: ***************************************/ void Ch375_Wr_Cmd_Port( INT8U cmd ) { CH375_A0_SET;//A0=1时为写入命令 CH375_RD_SET;//RD=0时表示读入操作 CH375_DATA_OUT; P2OUT=cmd; CH375_WR_CLR; Delay_X_Us(2); CH375_WR_SET; Delay_X_Us(2); }
贵公司提供的头文件部分内容如下: /* 以下状态代码1XH用于USB主机方式的操作状态代码, 仅CH375支持 */ #ifndef USB_INT_SUCCESS #define USB_INT_SUCCESS 0x14 /* USB事务或者传输操作成功 */ #define USB_INT_CONNECT 0x15 /* 检测到USB设备连接事件 */ #define USB_INT_DISCONNECT 0x16 /* 检测到USB设备断开事件 */ #define USB_INT_BUF_OVER 0x17 /* USB控制传输的数据太多, 缓冲区
溢出 */ #define USB_INT_USB_READY 0x18 /* USB设备已经被初始化(已分配
USB地址) */ #define USB_INT_DISK_READ 0x1D /* USB存储器读数据块, 请求数据读
出 */ #define USB_INT_DISK_WRITE 0x1E /* USB存储器写数据块, 请求数据写
入 */ #define USB_INT_DISK_ERR 0x1F /* USB存储器操作失败 */ #endif
这个头文件应该没问题吧,它对于键盘设备应该是一样的吧? 谁对这方面比较熟悉请帮我分析一下,先谢谢了!