|
我上位机用DEBUG372.EXE(下载的调试工具),端点1我上传了几个数,端点2我也上传了几个具体的数是正常的。下传端点2是DEBUG372.EXE显示的发出的“数据个数”也是正常的。这说明上传数据是正常的。
但是我想让端点2下传的数取反再上传,DEBUG372.EXE显示的个数和数据很多时候是不对的。您说这是不是端点2下传时出现问题? 问:我这个程序怎么端点2下传就不对呢?
/* CH375中断服务程序INT3,使用寄存器组1 */
void mCh375Interrupt( ) interrupt 3using 1
{
unsigned char i;
unsigned char InterruptStatus;
unsigned char length;
unsigned char xdata buffer[ 64 ];
Delay2us( );
CH375_CMD_PORT = CMD_GET_STATUS; /* 获取中断状态并取消中断请求 */
Delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */
InterruptStatus = CH375_DAT_PORT; /* 获取中断状态 */
switch ( InterruptStatus ){
case USB_INT_EP2_OUT: { /* 批量端点下传成功 */
Delay2us( );
CH375_CMD_PORT = CMD_RD_USB_DATA; /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */
Delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */
length = CH375_DAT_PORT; /* 首先读取后续数据长度 */
Delay2us( );
// Delay2us( );
for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_DAT_PORT;
EX3 = 0; /* 测试数据正确性,将接收到的命令包数据取反后返回给PC机 */
CH375_CMD_PORT= CMD_WR_USB_DATA7 /* 向USB端点2的发送缓冲区写入数据块 */
Delay2us( );
CH375_DAT_PORT =length; /* 首先写入后续数据长度,回传刚接收到的数据长度 */
// Delay2us( );
for ( i = 0; i < length; i ++ )
{ CH375_DAT_PORT= ~ buffer[ i ] } /* 数据取反后返回,由计算机应用程序测试数据是否正确 */
//CH375_DAT_PORT = 3; /* 发送中断数据1 */
// CH375_DAT_PORT = 1; /* 发送中断数据2 */
EX3 = 1; /* 允许中断*/
EX3 = 0;
CH375_CMD_PORT = CMD_WR_USB_DATA5; /* 向USB端点1的发送缓冲区写入数据块 */
Delay2us( );
CH375_DAT_PORT =3 /* 后续数据长度 */
CH375_DAT_PORT = 3;
CH375_DAT_PORT = 3; /* 发送中断数据1 */
CH375_DAT_PORT = 1; /* 发送中断数据2 */
EX3 = 1; /* 允许中断*/
break;
}
case USB_INT_EP2_IN: { /* 批量数据发送成功 */
CH375_CMD_PORT= CMD_UNLOCK_USB /* 释放当前USB缓冲区 */
break;
}
case USB_INT_EP1_IN: { /* 批量数据发送成功 */
CH375_CMD_PORT= CMD_UNLOCK_USB /* 释放当前USB缓冲区 */
break;
}
default: { /* 其它中断,未用到,解锁后退出即可 */
CH375_CMD_PORT= CMD_UNLOCK_USB /* 释放当前USB缓冲区 */
break;
}
}
}
我想想让端点2下传的数取反再上传,结果数据个数一下子老多,数也好多时候不对。
|
|