中斷服務(wù)程序如下所示,使用外部中斷1,選用內(nèi)置固件模式。程序接收PC發(fā)來(lái)的數(shù)據(jù),然后將數(shù)據(jù)長(zhǎng)度返回給PC。其中usbLength和usbBuffer[]為全局變量,已定義。 中斷服務(wù)程序如下: void mCH375Interrupt( void ) interrupt 2 using 1 //INT1對(duì)應(yīng)中斷號(hào)2 { unsigned char i; unsigned char IntStatus; CH372_WR_CMD_PORT( CMD_GET_STATUS ); //獲取中斷狀態(tài)并取消中斷請(qǐng)求 IntStatus = CH372_RD_DAT_PORT( ); //獲取中斷狀態(tài) IE1 = 0; //清INT1中斷標(biāo)志 if ( IntStatus == USB_INT_EP2_OUT ) //批量端點(diǎn)下傳成功,接收到命令包 { CH372_WR_CMD_PORT( CMD_RD_USB_DATA ); //從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) usbLength = CH372_RD_DAT_PORT( ); //首先讀取后續(xù)數(shù)據(jù)流的長(zhǎng)度 for(i=0;i usbBuffer[i] = CH372_RD_DAT_PORT( ); //接收命令包的數(shù)據(jù) CH372_WR_CMD_PORT( CMD_WR_USB_DATA7 ); //向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 CH372_WR_DAT_PORT( 1 ); CH372_WR_DAT_PORT(usbLength);//返回usbBuffer的數(shù)據(jù)長(zhǎng)度 } else if ( IntStatus == USB_INT_EP2_IN ) //批量數(shù)據(jù)發(fā)送成功,狀態(tài)包已發(fā)送 { CH372_WR_CMD_PORT( CMD_UNLOCK_USB ); } else return; //內(nèi)置固件的USB方式下不應(yīng)該出現(xiàn)其它中斷狀態(tài) } 當(dāng)下傳的數(shù)據(jù)的長(zhǎng)度大于等于64時(shí),顯示的數(shù)據(jù)長(zhǎng)度正確;當(dāng)下傳的數(shù)據(jù)長(zhǎng)度大于64時(shí),返回的數(shù)據(jù)長(zhǎng)度不正確,比如長(zhǎng)度為65到73時(shí),返回長(zhǎng)度是1;再往上時(shí),是除以64所得到余數(shù)
這點(diǎn)令我很是奇怪,是固件程序除了問(wèn)題,,還是別的什么問(wèn)題 上位機(jī)程序是組內(nèi)另一個(gè)同事編寫(xiě)的,參照提供的例子程序,各位大俠麻煩幫忙看看是什么問(wèn)題引起的?