关于AVR单片机与ch372通信

以下是中断处理程序中关于端点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。请大家帮我看看?谢谢先!imagewxg200672821935.jpg

这段程序没有什么问题,可以不可以将你的程序全发过来看下


问题找到了!是PC机端的程序step-0写了一次数据,而没有对应的读数据!而step-1中是写一次,读一次,正好与中断处理程序对应! 因此中断处理程序多写了一次ep2的in端点!

虽然应该是这个问题!但有点奇怪的是,在错误修改前,有时一个错误都没有!


只有登录才能回复,可以选择微信账号登录