ch375奇怪问题

1:pc软件中的CH375ReadData函数,在你们的调试程序中(vb或vc)的形参说明是可以任意类型,但是真读取的时候还是按照字节型数据进行指针累加的。 2:在c#中引用CH375ReadData函数不能形参不能声明为ref形式,否则函数执行完成后原来缓冲区被破坏。必须强行用指针才可以。(按道理来说两者应该是一样的) 3:mcu方面,采用stc51系列单片机总线方式扩展ch375b芯片,ch375b的中断引脚没用,采用向375发送中断查询命令读取中断结果的查询方式判断中断,以及处理中断,在mcu向pc发数据时没有问题。每发一包数据查询中断都为0x0A,即使速度再快也正常,但是当mcu接收pc数据的时候中断判断则不准确。例如:pc发了10个数据,mcu第一次查询时发现有10个数据到来,然后进行读取,读取完成后释放375b的缓存,延时后,在一次判断pc是否发来数据结果是有时候判断没有发来数据(这是正确的没因为此时pc确实没有发),而有时候则判断是pc发来了数据,读取这些数据发现这些数据是上次请缓冲前的数据,有时候是没有数据,但是得到的中断确是0x02。有时候是对的有时候是错的。请问这是怎么回事。 注:硬件连接绝对没有问题,也没有干扰。因为硬件在操作同样挂在总线上的ram的时候无论读写都没有错误,更重要的是只要不是操作pc下行数据,其他操作375的所有操作,包括读取上行中断状态,操作作态等都是对的。 4、你们的pdf上说读取中断状态的时候是A0为高电平的时候读取的,而你们的样例程序都是在A0为低电平的时候读取的。我都试了一下在A0为高的时候读出了中断状态最高位都是1,其他位正确,在A0为低电平的时候读出的中断状态和最高位为0。 请不吝赐教。。。

问题3补充:代码 if(usb_ptr()==1)//认为pc下行数据 { 。。。 //读取数据 清375b缓冲区发送命令0x23 延时1ms while(1) { 延时1ms if(usb_ptr()==1)//无限次的检查在pc没有发数据时,中断情况 { //居然有时能读出有下行的中断,有时候有上次的数据 break; } }

}


3,关于读取数据的时候,你读取数据的时候是哪条命令来读取数据的?还有就是你读取数据之后你可以再来中断的话,那么读取到中断状态之后你在读取数据长度,读取到的数据长度是计算机发给你的数据长度吗? 4,是在A0=1的时候读取是否有中断,而读取中断状态则是A0=0的时候。


可能是中断处理有问题,在不使用CH375中断引脚的时候,可以通过读CH375命令端口,判断位7是否为0,如果为0则说明有中断产生,这时候进入中断处理程序。读CH375的命令端口的时候,A0为高电平。


1.CH375ReadData第2个参数是接受一个void*的类型,实际上是要接受一快连续的缓冲区。 2.看下面上传的文档,有个CSHARP说明文档 UploadImages/20105318482250.rar


1、读取数据的命令是RD_USB_DATA命令,读取后就执行了UNLOCK_USB命令,之后再判断是否有下行数据到来,读到的中断仍是0x02,读取的数据长度有时候是0有时候是上次执行UNLOCK_USB命令前的数据。后来我在两次中断查询中加了1ms的延时(够长了)结果好多了。 2、void*是无类型指针,可以指向任何类型。既然有这样的形参我个人认为应该按照实际传入的类型进行指针变化,如果只能按照字节操作,那不如形参改为char或byte的准确。 3、第二个问题我已经解决的方法和你们提供的差不多。


1,如果按照你说的估计是你下位机中断处理软件有问题,建议你仔细查下你的程序,建议你参考我们提供的例子程序去修改程序,还有在发送RD_USB_DATA命令之后不需要在发送UNLOCK_USB命令。


中断处理没有问题,我觉得是外部总线速度太快了。我看了你的提供的例子程序跟我写的没有什么区别。毕竟下位机的程序非常简单啊。我觉得UNLOCK_USB更加保险。 还有一个问题请教: 就是pc的伪中断设计,应该是在单片机通过中断断点1上传数据后,pc软件激活那个函数啊?????? 请指教...


首先,UNLOCK_USB这个命令不是说你加了更保险的问题,这条命令是不能多也不能少的命令。还有你使用的是什么单片机,速度多快?


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