我想用VB做个后台调试程序,将发送出去的数据通过伪中断程序接受回来,想请教高手在CH374芯片中 CH375SetIntRoutine(mIndex, AddressOf mInterruptEvent)这个函数如何实现的?
对于下位机该有哪些动作
谢谢啦
我想用VB做个后台调试程序,将发送出去的数据通过伪中断程序接受回来,想请教高手在CH374芯片中 CH375SetIntRoutine(mIndex, AddressOf mInterruptEvent)这个函数如何实现的?
对于下位机该有哪些动作
谢谢啦
如果是通过端点2下数据的话,那么下位机先产生端点2下传成功,再通过中断端点1回传,等数据被PC取走之后,产生端点1上传成功。
如果上位机调用CH375SetIntRoutine,下位机只要向端点1写一些数据,上位机就可以进入中断服务函数mInterruptEvent中.
好的,我试试
后台发送一个数据块给下位机,下位机用端点2接受,然后下位机通知上位机马上有数据上传,接着讲后台所传送的数据回传给后台,不知道该怎么写呢
case USB_INT_EP2_OUT: { // 批量端点下传成功 UINT8 buf[64]; if ( s & BIT_STAT_TOG_MATCH ) { // 仅同步包 l = Read374Byte( REG_USB_LENGTH ); Read374Block( RAM_ENDP2_RECV, l, buf ); for ( s = 0; s < l; s ++ ) buf[s] ^= 0xFF; // 数据取反由计算机验证 Write374Block( RAM_ENDP2_TRAN, l, buf ); // 演示回传 Write374Byte( REG_USB_LENGTH, l ); // Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_RECV_TOG ); Write374Index( REG_USB_ENDP2 ); // 对于并口连接可以用本行及下面一行代替上一行的程序,减少写一次index的时间,提高效率 Write374Data( M_SET_EP2_TRAN_ACK( Read374Data0( ) ) ^ BIT_EP2_RECV_TOG ); } break;
这部分该怎么改呢
case USB_INT_EP1_IN: { // 中断端点上传成功,未处理 Write374Byte( REG_USB_ENDP1, M_SET_EP1_TRAN_NAK( Read374Byte( REG_USB_ENDP1 ) ) ^ BIT_EP1_TRAN_TOG ); break; }
这是端点1的程序,不知道该改哪些地方
case USB_INT_EP2_OUT: { // 批量端点下传成功 if ( s & BIT_STAT_TOG_MATCH ) { // 仅同步包 l = Read374Byte( REG_USB_LENGTH ); Read374Block( RAM_ENDP2_RECV, l, buf ); for ( s = 0; s < l; s ++ ) buf[s] ^= 0xFF; // 数据取反由计算机验证 Write374Block( RAM_ENDP1_TRAN, l, buf ); // 演示回传 Write374Byte( REG_USB_LENGTH, l ); Write374Byte( REG_USB_ENDP1, M_SET_EP1_TRAN_NAK( Read374Byte( REG_USB_ENDP1 ) ) ^ BIT_EP1_TRAN_TOG ); // Write374Index( REG_USB_ENDP1 ); // 对于并口连接可以用本行及下面一行代替上一行的程序,减少写一次index的时间,提高效率 // Write374Data( M_SET_EP1_TRAN_ACK( Read374Data0( ) ) ^ BIT_EP1_RECV_TOG ); } break;
我将下位机改成这样还是不行
下位机通知上位机马上有数据上传,如果是端点2的话是不可以实现的. 这样你先看懂程序了在去修改,否则的话是不可能成功的. 5楼代码是演示数据回传,把数据取反后上传到PC. 6楼代码是端点1上传完毕后产生中断的处理,切换同步标志位,应答NAK,为下次数据传输做准备 7楼修改有问题: 把数据接收后送给端点1,但是l长度可能大于8个,端点1无法接收.端点1的大小为8个,端点2为64,仔细看程序,几乎没有一句是正确的,全部错误了.
不好意思,我刚刚翻了资料的确是错的,我想实现下位机端点2接收数据,端点1发送数据,不知道怎么进行呢
不好意思,我刚刚翻了资料的确是错的,我想实现下位机端点2接收数据,端点1发送数据,不知道怎么进行呢
回传数据的时候,我先通过端点1随便发个数据给PC,然后仍然用端点2回传数据,这样的话PC能进入中断吗
有没有端点1上传数据的例子,具体该怎么实现
参考下面的例程试试 Write374Block( RAM_ENDP1_TRAN, 8, buf1 ); // 演示端点1上传数据 端点1最多上传8字节 Write374Byte(REG_USB_ENDP1,M_SET_EP1_TRAN_ACK(Read374Byte( REG_USB_ENDP1 ),8)); Write374Block( RAM_ENDP2_TRAN, 64, buf2 ); // 演示端点2上传数据 端点2最多上传64字节 Write374Byte( REG_USB_LENGTH, 64 ); Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) );
我设置了个全局变量signal,端点2接收成功的话,signal置1,然后在主循环中通过端点1发送8个数据给PC,用的是
Write374Block( RAM_ENDP1_TRAN, 8, buf1 ); // 演示端点1上传数据 端点1最多上传8字节 Write374Byte(REG_USB_ENDP1,M_SET_EP1_TRAN_ACK(Read374Byte( REG_USB_ENDP1 ),8));
然后将signal清零,可是后台中发送两次才能接收到一次端点传来的数据,想请教高手们是怎么回事
现在不清楚是你的下位机有问题,还是上位机有问题,建议上位机先使用DEBUG372调试.