ch375的接受问题,求助

/* CH375中断服务程序,假定CH375的INT#引脚连接到单片机的INT0,使用寄存器组1 */ void mCH375Interrupt( void ) interrupt 0 using 1 { UINT8 cnt; UINT8 dat; EX0 = 0; #define IntStatus dat /* 节约一个变量存储单元 */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 获取中断状态并取消中断请求 */ IntStatus = CH375_RD_DAT_PORT( ); /* 获取中断状态 */ IE0 = 0; EX0 = 1;// 清中断标志,与单片机硬件有关,对应于INT0中断 */ if ( IntStatus == USB_INT_EP2_OUT ) { /* 批量端点下传成功,接收到命令包 */

CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */ cnt = CH375_RD_DAT_PORT( ); /* 首先读取后续数据长度 */ Print("EP2_OUT."); if( cnt ==1 ) { dat = CH375_RD_DAT_PORT( ); P1 = dat ; if( dat ==0x22 ) { P1 = dat ; CH375_WR_CMD_PORT(CMD_SET_ENDP5); CH375_WR_DAT_PORT(0x0E); Print("ML."); ClrScreen(); } else { P1 = dat ; CH375_WR_CMD_PORT(CMD_WR_USB_DATA5); CH375_WR_DAT_PORT(0x01); CH375_WR_DAT_PORT(dat); Print("SJ."); }

}

} else if ( IntStatus == USB_INT_EP2_IN ) { /* 批量数据发送成功,状态包已发送 */ /* 释放当前USB缓冲区,收到上传成功中断后,必须解锁USB缓冲区,以便继续收发 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); GotoXY(0,0); Print("EP2_IN."); } else if ( IntStatus == USB_INT_EP1_IN ) { /* 中断数据发送成功,本程序未用到 */ //GotoXY(0,1); Print("EP1_IN."); CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 释放当前USB缓冲区 */ CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); CH375_WR_DAT_PORT(0x01); CH375_WR_DAT_PORT(0x55); ClrScreen(); }

/* 内置固件的USB方式下不应该出现其它中断状态 */ } 大家帮忙看一下,这是CH375的中断,主机先发送个数据,然后向端口1发送数据,在端口1的发送完中断中向端口2发数据,本来主机发一次,端口1,2分别上传一次,但在主机端如果不读端口2,端口1就发两次,为什么?

看了一下你的程序,没有大问题,你所说的主机不读端口2.是指进入批量端点下传成功后不去读数据吗?


主机能读,我的意思是如果主机不读批量端点,中断端点可以读两次


应该是批量端点下载几个,中断端点和批量端点上传几个吧,但是上传的比下传的多,不知为什么?


CH375_WR_CMD_PORT(CMD_SET_ENDP5); CH375_WR_DAT_PORT(0x0E); 这个不对.数据呢?你要写入0X0E个数据,但是后续数据怎么没写?再说端点1怎么可以写这么多数据?一次最多0X08个


我没执行这段程序,我看例子程序有这样的语句,是设置,不是要输出数据


只有登录才能回复,可以选择微信账号登录