请问:单片机CH372工作初始正常,并已于PC联通,驱动安装也正常。但写WR_USB_DATA5/7,等待中断,PC上传数据,但单片机始终不能等到PIN1的INT低电平中断,这是为什么?谢谢
PC采用DEBUG372.EXE调试,谢谢了
(1)上位机找到设备没有?有没有打开? (2)把数据写入端点的上传缓冲区后,上位机必须启动上传(即点击上传按钮),下位才能产生中断
非常感谢! 又有一个问题请教: 单片机通过CH372接收数据时,中断后输入SET_STATUS后,读出的第一个数据是数据长度,而不是OUT成功的中断01H OR 0AH?是我理解有问题?
(1)中断后,应发送GET_STATUS获取CH372的中断状态,没有SET_STATUS这个命令 (2)通过GET_STATUS获取的是中断状态,如果中断状态是OUT成功,则再用RD_USB_DATA读取数据,第一字节表示后续数据的长度,不为0,则应循环读取全部数据。
呵呵!刚才写错成SET_STATUS,实际GET_STATUS。 程序先进入中断,通过GET_STATUS获取状态,如果是OUT成功,但怎么判断是成功了呢?是否是读取中断状态01H或0AH(RD_USB_DATA/DATA0),之后才能去读取长度以及数据?谢谢
如果中断状态是0x01,就表示端点1OUT成功(即端点1下传成功)。之后才去读长度以及数据 建议你看看CH372DS1的GET_STATUS命令,以及CH372上下传数据的流程。
关键是没有读到01H,而是读到了数据长度?这是哪里有问题?是说明不成功吗?
这是因为DEBUG372.EXE没有做端点1下传的功能,CH372自然不能产生0x01中断。
刚有新按子,这事隔了一段时间。 谢谢楼上解释。 有两个问题请教: 1、如果DEBUG372.EXE中端点1/2上传,第一次分别上传8/64,接收正常,但接着想再次接收8/64,怎么操作? 2、端点2下传中,能够将数据长度以及第一数据正常读,但后面错误,这可能是什么问题? 谢谢
(1)再次发送就可以接收了,在上传成功中断里,继续上传你要上传的数据,先把数据写入,释放缓冲区就好了 (2)能不能详细的说以下数据错误的现象?
2、端点2下传中错误现象:假设8个数据分别11,22,33,44,55,66,77,88。中断正常02H,读回数据长度正确,但后面数据:11,02,20,33,04,40,55,06。这是什么原因?
从你的现象来说可能你传送的格式不对
1122334455667788 这样不加逗号不加空格才对!
可以了。 不知是否有简单点可以调使用的VB程序? CH372EVT里面的总是出现“CH375数据测试返回的长度错误”,而且VB总是出现‘内存不能读’而导致终止。
这个可能和你的下位机的程序有关系,我们下位机的例子和上位机的例子是相配合才能正常工作的。
'iBuffer 指向一个缓冲区,提供当前的中断特征数据 '******建议此程序不要设置断点****** Public Sub mInterruptEvent(ByRef mBuffer As INT_PARA) '中断服务程序 Dim bool As Boolean ' CH371产生中断后,产生一个消息通知主程序 If mBuffer.buf(0) = 1 Then ' 检查中断特征数据 mKeyCode = mBuffer.buf(1) And &H3F bool = PostMessage(frmMain.hwnd, WM_KEYDOWN, 1, 0) ' 中断特征数据1则键被按下 Else If mBuffer.buf(0) = 2 Then bool = PostMessage(frmMain.hwnd, WM_KEYUP, 1, 0) ' 中断特征数据2则键被释放 End If End If End Sub
Public Sub iNotifyRoutine(ByVal iEventStatus As Long) ' 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 PostMessage frmMain.pnpproce.hwnd, WM_KEYUP, iEventStatus, 0 End Sub
上面是摘自‘CH372EVT\VB\DEMO’中的Module1.BAS,能否解释下。谢谢了