關于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機上的測試程序顯示結果見附件,結果是傳輸時的第一次&第二次數(shù)據(jù)長度始終出錯!用 單片機仿真器調(diào)試時,發(fā)現(xiàn)是單片機讀取數(shù)據(jù)長度時就出錯!現(xiàn)在搞不明白的是,為啥前兩次的長度總是讀不對!其中程序中的延時部分delay_us試過多種數(shù)據(jù),結果都差不多,有時第一次傳輸時數(shù)據(jù)階段也會出錯,有時第二次傳輸數(shù)據(jù)階段也會出錯,測試多次,錯誤都在前兩次傳輸!

單片機是atmega64,時鐘是8M,編譯器winavr。請大家?guī)臀铱纯矗恐x謝先!imagewxg200672821935.jpg

這段程序沒有什么問題,可以不可以將你的程序全發(fā)過來看下


問題找到了!是PC機端的程序step-0寫了一次數(shù)據(jù),而沒有對應的讀數(shù)據(jù)!而step-1中是寫一次,讀一次,正好與中斷處理程序?qū)? 因此中斷處理程序多寫了一次ep2的in端點!

雖然應該是這個問題!但有點奇怪的是,在錯誤修改前,有時一個錯誤都沒有!


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频