我用的是Delphi语言写的上位机程序,下位机是另一个工程师做的,ch375选用的模式为2,但是在上位机调用ch375readdata()时读出的数据全是0是怎么回事?是不是相应的批量上传缓冲区没有对应上?另外,批量上传缓冲区是怎样定义的?
(1)为确定是问题出现在哪一方,下载CH372DBG.ZIP,用这个软件调试下位机 (2)内置固件模式下,批量端点号是:端点2,批量上传缓冲区在芯片内部,使用WR_USB_DATA7即可向端点2上传缓冲区写入数据,注:CH375做设备,资料完全参考CH372 (3)建议技术贴到技术版面发表
好的,我再研究研究,谢谢!!
我还想问一下,如果我的下位机是用汇编写的,能不能用CH372DBG.ZIP这个软件调试下位机
当然可以,与下位机用什么语言没任何关系 下载CH372EVT.ZIP,\CH372EVT\PUB\XFIRM下有外置固件汇编例程,对于端点2的处理,内/外置固件是一样的
内置固件模式下,批量端点号是:端点2,上位机的ch375readdata()是不是只从端点2的上传缓冲区读取数据?还是说ch375readdata()根据产生中断的端点而去相应的端点上传缓冲区读取数据?
只从端点2的上传缓冲区读取数据
上传数据流以伪中断方式发起的系统中,计算机应用层初始化时设置一个伪中断服务程序,然后 应用层就不需要再涉及到上传数据流。当单片机需要上传数据时,首先将数据写入批量端点的上传缓 冲区中,然后将中断特征数据写入中断端点的上传缓冲区中。在1 毫秒之内(理论值),与中断特征 数据对应的伪中断服务程序被激活,伪中断服务程序通知主程序调用数据上传API获得上传数据块。 在此期间,单片机将会收到CH372 芯片通知的两次中断,首先是中断端点上传成功中断,然后是批量 端点上传成功中断。
首先,CH372 芯片通知的两次中断,是CH372向指单片机产生的两次中断,一个是中断端点(端点1)上传成功,一个是批量端点(端点2)上传成功;上位机的伪中断其实并不是中断,只是下位机向上位机通报有数据到来的一种机制,其实现原理是,CH375SetIntRoutine在动态库中创建了一个优先级比较高的线程在不停的读端点1的数据,如果这个线程读到端点1数据的的话,那么他将调用CH375SetIntRoutine设置的中断服务回调函数,CH372向端点1中写数据,其实就是向pc通知有数据到了,向端点2写的数据一般就是所要上传的数据,所以上位机读到端点1的数据就会调用设置的回调函数.回调函数其实是在CH375SetIntRoutine创建的线程中执行的,而线程的优先级比较高不易做费时的操作,一般就是发送消息或是激活系统的事件,这样在消息的处理中做一些读端点2的操作和对数据的处理,第8楼中的例子中有上位机和下位机的代码,可以参考一下. 如果我只是在CH375SetIntRoutine设置的中断服务回调函数中调用readdata()来读取端点2上传缓冲区的数据,这里说到的“CH372向端点1中写数据”,也就是中断端点1,是不是中断数据可以随便写一个?还有就是先向中断端点1写数据还是先向端点2上传缓冲区写数据?