在调试 CH375 和 PC 通信中,用 CH372DBG.ZIP 中的DBG372.EXE测试上位机时,下传数据成功,上传数据出现问题,我是这样做的: 1、运行CH372DBG,打开设备 2、端点2下传,数据长度:1,数据:11,点击下传后下传按钮下传成功
问题是:数据上传我需要先点击上传按钮等到按钮变灰后,在点击下传按钮,然后才能收到的数据是:EE,有时是一个EE,有时是十几个EE(下传时是一个一个的传)
我按照论坛上说的下位机参考的是CH372EVT\PUB\TEST\MCU\TEST.C ,其中我的中断部分程序是这样的: void mCh375Interrupt( ) interrupt 3 using 1
{
unsigned char i; unsigned char InterruptStatus; unsigned char length; unsigned char data buffer[ 64 ];
CH375_CMD_PORT = CMD_GET_STATUS; /* 获取中断状态并取消中断请求 */ Delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */ InterruptStatus = CH375_DAT_PORT; /* 获取中断状态 */
switch ( InterruptStatus ){ case USB_INT_EP2_OUT: { /* 批量端点下传成功 */
CH375_CMD_PORT = CMD_RD_USB_DATA; /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */ Delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */ length = CH375_DAT_PORT; /* 首先读取后续数据长度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_DAT_PORT;
/* 测试数据正确性,将接收到的命令包数据取反后返回给PC机 */ CH375_CMD_PORT= CMD_WR_USB_DATA7 /* 向USB端点2的发送缓冲区写入数据块 */ CH375_CMD_PORT=length /* 首先写入后续数据长度,回传刚接收到的数据长度 */ for ( i = 0; i < length; i ++ ) CH375_CMD_PORT= ~ buffer[ i ] /* 数据取反后返回,由计算机应用程序测试数据是否正确 */ break; }
case USB_INT_EP2_IN: { /* 批量数据发送成功 */ CH375_CMD_PORT= CMD_UNLOCK_USB /* 释放当前USB缓冲区 */ break; } default: { /* 其它中断,未用到,解锁后退出即可 */ CH375_CMD_PORT= CMD_UNLOCK_USB /* 释放当前USB缓冲区 */ break; }
} }