用单片机STC89C52和CH375做了个数据采集器,把串口传来的数据(大概120K/s bit) 转换成USB数据发给ARM(S3C2440)板的USB device口,或通过它发送指令给下位机, 现在对USB和CH375不太了解,望高手帮忙! 单片机程序采用查询INT#处理收发数据:
/*采用查询方式*/ unsigned char wait_interrupt(void) { CH375_INT_WIRE = 1; while( CH375_INT_WIRE ) /* INT#位高电平,等待 */ { if( RI==1 ) /* 如果串口收到数据,退出等待*/ { CH375_WR_CMD_PORT( CMD_ABORT_NAK );/*放弃当前操作*/ return( 0xFF ); //0xFF代表放弃 } } CH375_WR_CMD_PORT( CMD_GET_STATUS ); return( CH375_RD_DAT_PORT() ); }
现在发现当串口数据量大时,程序就会死,对于CMD_ABORT_NAK 这条命令不太了解。 1. 当单片机正在发数据给USB device时(等待发送状态时),如果串口接收到数据,那这条发送的数据会(因为执行CMD_ABORT_NAK而)被取消吗?
2. 单片机主程序不停的发送"IN令牌"来查询是否有来自USB device数据,那发送了很都条IN事物令牌后,只要执行一条CMD_ABORT_NAK 就可以放弃之前所有发送的IN事物吗?
3. CH375处理U盘时有USB_INT_DISK_READ,USB_INT_DISK_WRITE中断状态可以查询,但与其他USB device通讯时就不能用这两个状态来判断, 请问有其他的可以用吗,不知道CH374有没有这方面的优势?
4. 我把中断程序从查询方式改为中断方式时,只单向把数据传给usb device时可以传大量数据,但收发数据时,如果中断状态是USB_INT_SUCCESS,程序不好控制是有数据IN, 还是发送数据成功?
搞的有点郁闷,只能请教高手了!