中断服务程序如下所示,使用外部中断1,选用内置固件模式。程序接收PC发来的数据,然后将数据长度返回给PC。其中usbLength和usbBuffer[]为全局变量,已定义。 中断服务程序如下: void mCH375Interrupt( void ) interrupt 2 using 1 //INT1对应中断号2 { unsigned char i; unsigned char IntStatus; CH372_WR_CMD_PORT( CMD_GET_STATUS ); //获取中断状态并取消中断请求 IntStatus = CH372_RD_DAT_PORT( ); //获取中断状态 IE1 = 0; //清INT1中断标志 if ( IntStatus == USB_INT_EP2_OUT ) //批量端点下传成功,接收到命令包 { CH372_WR_CMD_PORT( CMD_RD_USB_DATA ); //从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 usbLength = CH372_RD_DAT_PORT( ); //首先读取后续数据流的长度 for(i=0;i usbBuffer[i] = CH372_RD_DAT_PORT( ); //接收命令包的数据 CH372_WR_CMD_PORT( CMD_WR_USB_DATA7 ); //向USB端点2的发送缓冲区写入数据块 CH372_WR_DAT_PORT( 1 ); CH372_WR_DAT_PORT(usbLength);//返回usbBuffer的数据长度 } else if ( IntStatus == USB_INT_EP2_IN ) //批量数据发送成功,状态包已发送 { CH372_WR_CMD_PORT( CMD_UNLOCK_USB ); } else return; //内置固件的USB方式下不应该出现其它中断状态 } 当下传的数据的长度大于等于64时,显示的数据长度正确;当下传的数据长度大于64时,返回的数据长度不正确,比如长度为65到73时,返回长度是1;再往上时,是除以64所得到余数
这点令我很是奇怪,是固件程序除了问题,,还是别的什么问题 上位机程序是组内另一个同事编写的,参照提供的例子程序,各位大侠麻烦帮忙看看是什么问题引起的?