以下是中断处理程序中关于端点2out的处理程序! case USB_INT_EP2_OUT: pBuf=mBuf; delay_us(2); CH372_WR_CMD_PORT(CMD_RD_USB_DATA); delay_us(100); length = 0; length=CH372_RD_DAT_PORT(); delay_us(1); for(len=0;len!=length;len++,pBuf++) { *pBuf=CH372_RD_DAT_PORT(); // delay_us(2); } //length=ch372_rd_data(request.buffer); pBuf=mBuf; CH372_WR_CMD_PORT(CMD_WR_USB_DATA7); //delay_us(2); CH372_WR_DAT_PORT(length); //delay_us(2); for(len=0;len!=length;len++,pBuf++) { CH372_WR_DAT_PORT(~(*pBuf)); // delay_us(2); } break;
但是PC机上的测试程序显示结果见附件,结果是传输时的第一次&第二次数据长度始终出错!用 单片机仿真器调试时,发现是单片机读取数据长度时就出错!现在搞不明白的是,为啥前两次的长度总是读不对!其中程序中的延时部分delay_us试过多种数据,结果都差不多,有时第一次传输时数据阶段也会出错,有时第二次传输数据阶段也会出错,测试多次,错误都在前两次传输!
单片机是atmega64,时钟是8M,编译器winavr。请大家帮我看看?谢谢先!