[求助]375作为主设备如何被动的接收数据

我现在正在做用375驱动打印机的任务,我观察了打印时打印机和电脑之间的数据交换,不是单方向的数据传输,而是两个方向的应答关系,这样如何在375向打印机发送完数据后收到打印机返回的数据哪?我尝试用中断,但是我向打印机发送完数据后,并没有产生外部中断,不知道是不是还有别的什么方式,还是有哪些地方需要设置,375才能被动的接收数据,最好是通过中断的方式,谢谢各位了!

在和打印机通信的时候,我们的CH375芯片是做为主机的功能,那么就需要你在每次传输的时候都需要由主机发起,当你需要从打印机取数据的时候,你直接发送IN的令牌包,同时你要注意下是通过哪个端点上传数据的,你就根据这个端点发送IN的令牌包来取数据就可以。


取数据的时间我不能确定,是375向打印机发送一段数据后,打印机会自动返回一些数据,我需要读出这些数据,能不能通过中断的方式获得状态那?我试验是发送完数据后,等待外部中断,但是一直都没有中断产生,如果可以产生中断那麽我就可以在中断函数里完成你说的过程了,不然的话,你说的这个过程我不知道该如何加到我的程序里 是不是在每次我发送完数据后都要执行一下你说的过程,因为我要发送的数据的长度是不固定的,这样的话还能接着执行指令吗?能不能给提供以下你说的这个过程的代码,谢谢了!


这些数据不是自动返回的,都需要你单片机控制打印机主动的去获取数据,你必须按照我上面的操作来获取到数据,否则你是获取不到数据的


那能不能把单片机主动获取数据那部分代码给我看看,谢了!


这个是一个例子程序,你可以参考下: void token_in()/*上传状态数据*/ { unsigned char i,s,tog_send =0; unsigned int T_1us=0; toggle_recv(tog_recv); CH375_WR_CMD_PORT( CMD_ISSUE_TOKEN ); CH375_WR_DAT_PORT( ( endp_in_addr << 4 ) | DEF_USB_PID_IN ); /* 高4位目的端点号, 低4位令牌PID */ while( CH375_INT_WIRE ){ T_1us++; if(T_1us==400){ /*1ms超时处理,1ms后放弃当前NAK的重试*/ CH375_WR_CMD_PORT(CMD_ABORT_NAK); } } CH375_WR_CMD_PORT( CMD_GET_STATUS ); /*获得当前端口状态*/ s=CH375_RD_DAT_PORT(); if (s==USB_INT_SUCCESS){ /*成功获得状态上传数据*/ CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); load_l=CH375_RD_DAT_PORT(); for ( i=0; i!=load_l; i++ ) load_up[i]=CH375_RD_DAT_PORT(); if(busy==1 ) LoadUpData_U3(); else if(busy==2 ) LoadUpData_U5(); tog_recv = ~ tog_recv; } else if ( s==USB_INT_RET_NAK ) { /* USB打印机无上传数据,等待1MS后放弃重试*/

} else { /* 操作失败,正常情况下不会失败 */ clr_stall( endp_in_addr ); /* 清除打印机的数据接收端点,或者 soft_reset_print() */ /* soft_reset_print(); 打印机出现意外错误,软复位 */ tog_recv = 0; /* 操作失败 */ } }


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