[求助]CH375发送数据给ARM主板的USB device口

用单片机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, 还是发送数据成功?

搞的有点郁闷,只能请教高手了!

NAK是放弃NAK重试。否则CH375收到NAK后会一直自己重试。 发送一条IN,USB DEVICE一般会收到两种类型的包,NAK或者是数据。如果收到NAK,一般来说表示设备没有准备好数据。如果收到数据,则CH375把数据收到缓冲区中,然后退出发送IN。


感谢红桃六, 现在觉得我所有发送和接受都用这个中断查询函数,好像有点乱,想重新写一个,哪位有类似代码可以介绍下,哪怕是思路也行,不胜感激!


你现在不用着急重新写代码,先把这个代码调通后,在根据自己的需要来去修改。否则问题出在什么地方不好查


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