以下是中斷處理程序中關于端點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機上的測試程序顯示結果見附件,結果是傳輸時的第一次&第二次數(shù)據(jù)長度始終出錯!用 單片機仿真器調(diào)試時,發(fā)現(xiàn)是單片機讀取數(shù)據(jù)長度時就出錯!現(xiàn)在搞不明白的是,為啥前兩次的長度總是讀不對!其中程序中的延時部分delay_us試過多種數(shù)據(jù),結果都差不多,有時第一次傳輸時數(shù)據(jù)階段也會出錯,有時第二次傳輸數(shù)據(jù)階段也會出錯,測試多次,錯誤都在前兩次傳輸!
單片機是atmega64,時鐘是8M,編譯器winavr。請大家?guī)臀铱纯矗恐x謝先!