CH375A中斷問(wèn)題

請(qǐng)問(wèn)以下,如果我接到CH375A發(fā)送的中斷,沒(méi)有及時(shí)處理,最多可以允許多長(zhǎng)的時(shí)間,在測(cè)試中,發(fā)現(xiàn)沒(méi)有及時(shí)處理該中斷,會(huì)出現(xiàn)出錯(cuò)!請(qǐng)貴公司技術(shù)人員幫忙解答以下!非常感謝!

你如果不處理的話,那么,中斷腳一直為低,中斷狀態(tài)一直保存啊,不存在有沒(méi)有時(shí)間問(wèn)題


讀數(shù)據(jù)的時(shí)候,應(yīng)該會(huì)有影響的吧!


現(xiàn)在讀和寫(xiě)有時(shí)候有時(shí)候不穩(wěn)定,會(huì)死掉! 今天查出來(lái)是因?yàn)樵谔幚砭W(wǎng)絡(luò)中斷信號(hào),而且時(shí)間比較長(zhǎng),所以不能及時(shí)處理USB發(fā)出的中斷引起的! 我的理解是: 因?yàn)闀r(shí)序要求如下: 命令與數(shù)據(jù)之間的間隔時(shí)間: 最小?。瞮s, 最大100us; 數(shù)據(jù)與數(shù)據(jù)之間的間隔時(shí)間: 最小 1us, 最大100us;

而在讀數(shù)據(jù)的時(shí)候,每閣64個(gè)數(shù)據(jù),都需要發(fā)送一次中斷,告訴CH375A繼續(xù)讀數(shù)據(jù),這個(gè)時(shí)候如果我沒(méi)有及時(shí)響應(yīng)中斷的話,應(yīng)該可能就會(huì)超過(guò)100us!  我初步認(rèn)為是這個(gè)問(wèn)題!不知道我的理解是否正確?


那不是375芯片的問(wèn)題,而是你在長(zhǎng)時(shí)間不操作U盤(pán)的話,U盤(pán)自己掛起了,是U盤(pán)本身的特性造成的,所以我們?cè)趯?xiě)三個(gè)讀寫(xiě)子程序的時(shí)候,就非常的強(qiáng)調(diào)延時(shí)函數(shù),擔(dān)心時(shí)間太短操作不了375,時(shí)間太長(zhǎng)的話,U盤(pán)可能掛起


那如果想改變這樣的現(xiàn)狀,只能通過(guò)修改延時(shí)函數(shù)! 但是我的延時(shí)函數(shù)已經(jīng)設(shè)置的時(shí)間是最短的了.再設(shè)置小一點(diǎn),就讀不出文件! 現(xiàn)在也出現(xiàn)死掉的現(xiàn)象頻率不是很高,只是碰到剛好處理網(wǎng)絡(luò)中斷函數(shù),這個(gè)時(shí)候來(lái)了USB中斷,而系統(tǒng)忙于處理網(wǎng)絡(luò)中斷,沒(méi)來(lái)得及處理USB,造成了超過(guò)一定的時(shí)間,也可能就是你所說(shuō)的掛起想象!

 現(xiàn)在決定利用下下策了,只能USB中斷的時(shí)候關(guān)閉網(wǎng)絡(luò)中斷,等處理完畢以后再開(kāi)啟網(wǎng)絡(luò)中斷,系統(tǒng)也只有網(wǎng)絡(luò)中斷會(huì)引起超時(shí)的可能性.


你的網(wǎng)絡(luò)中斷的時(shí)間大概需要多長(zhǎng)的時(shí)間??


并一定的,有的包長(zhǎng),有些包短,所以很難控制時(shí)間,如果時(shí)間太長(zhǎng)的話,應(yīng)該可能就會(huì)出現(xiàn)你所說(shuō)的掛起現(xiàn)象,短的話應(yīng)該不會(huì)受影響!  所以現(xiàn)在在測(cè)試中,發(fā)現(xiàn)有時(shí)間會(huì)讀會(huì)死掉了,寫(xiě)死掉的頻率高于讀,是不是寫(xiě)要求的時(shí)間更嚴(yán)格?


那你為你的中斷設(shè)置一下中斷優(yōu)先級(jí)不行嗎,即使在處理網(wǎng)絡(luò)中斷的時(shí)候,若有BUS中段則轉(zhuǎn)入處理BUS中斷。


硬件做死了,網(wǎng)絡(luò)中斷USB采用的都是INT4/5/6/7中斷,只是USB采用的是INT6,網(wǎng)絡(luò)中斷采用的是INT7,但是因44B0INT4/5/6/7中斷的掛起中斷和中斷勢(shì)能采用的都是同一位.   所以現(xiàn)在只能是USB中斷的時(shí)候不執(zhí)行網(wǎng)絡(luò)中斷處理函數(shù),只能這個(gè)方法了,這個(gè)也是我能想到的下下策了!你們有更好的想法嗎?


是不是可以這樣處理: 為防止在處理網(wǎng)絡(luò)中斷處理時(shí)導(dǎo)致U盤(pán)掛起,在你網(wǎng)絡(luò)中斷處理函數(shù)中隔段時(shí)間就發(fā)個(gè)操作U盤(pán)的命令,如DISK_READY。


這樣處理好象不太合理! 我想問(wèn)問(wèn),一般的U盤(pán),相隔多長(zhǎng)時(shí)間不訪問(wèn)會(huì)自動(dòng)掛起? 我想可能還大因素還是因?yàn)椋龋茫握f(shuō)的U盤(pán)被掛起了,因?yàn)槲乙郧安捎玫亩际菞l件CH375DiskConnect() == ERR_SUCCESS是否成立來(lái)決定是否U盤(pán)是否連接設(shè)備,但是后來(lái)因?yàn)榘l(fā)現(xiàn)在處理網(wǎng)絡(luò)中斷函數(shù)里面,操作U盤(pán),會(huì)死掉了,所以不在網(wǎng)絡(luò)中斷處理函數(shù)里面操作U盤(pán),都是采用了另外設(shè)置了一個(gè)全局變量記錄當(dāng)前U盤(pán)的狀態(tài),只有程序退出了網(wǎng)絡(luò)中斷處理函數(shù)再開(kāi)始USB中斷,但是發(fā)現(xiàn)有時(shí)候還是會(huì)死掉!   我在貴公司的技術(shù)文件里面也看到過(guò),不能頻繁調(diào)用CH375DiskConnect,但是一直不知道為什么不能頻繁調(diào)用這個(gè)函數(shù)! 期待貴公司技術(shù)人員能繼續(xù)幫我解決我的一些疑難問(wèn)題,非常感謝!


U盤(pán)掛起的時(shí)候不同的U盤(pán)可能會(huì)不一樣,建議你還是按照你說(shuō)的在操作U盤(pán)的時(shí)候?qū)⒕W(wǎng)絡(luò)關(guān)閉掉比較好點(diǎn)


恩!謝謝HCN!現(xiàn)在該問(wèn)題已經(jīng)解決了! 我沒(méi)有關(guān)網(wǎng)絡(luò),因?yàn)榫W(wǎng)絡(luò)常常需要與設(shè)備通訊,不能關(guān)閉網(wǎng)絡(luò)! 為了解決該問(wèn)題,我在操作U盤(pán)前都先發(fā)了一個(gè)命令給U盤(pán),以防U盤(pán)被掛起而不能正常操作!

 現(xiàn)在還有最后一問(wèn)題了,我試過(guò)了很多U盤(pán),但是有的U盤(pán)只能在系統(tǒng)全部初始化望比后,再插上U盤(pán),才能正常讀寫(xiě)文件,但是可以讀U盤(pán)信息(磁盤(pán)大小,文件系統(tǒng)類型等參數(shù)),也可以列舉到文件名!  有一些U盤(pán)卻可以在上電前插上,也可以初始化系統(tǒng)后熱插拔,都能正常操作!  我的初始化流程如下: int main(void) { void RstSystem(void); BF_FileAttribute *pFileProp; OS_CPU_SR rCPSR; INT32U ulKeyVal; INT32S slErr; #ifdef __CAMERA_CUT__ BMCmdBlockEndToPC cmdToPc; BMCmdAllFileEndToPC cmdEndToPc; #endif INT8U ucErr; #ifdef __USB_INTERFACE__ INT32U i, j; #endif

bInitSys(); //init system BuzzerCon(1, 600000);

bcheckSnCardAndSetSysTime(); if (gSysPara.ulFlag & (1 << SYS_BIT_SELFCHECK)) { slErr = bAutoCheck(); // Auto check system power on if(slErr == 1) { BuzzerCon(1, 600000); g_pCurMenu = g_pRootM->child; //init windows g_pCurWin = g_pCurMenu->pWin; GUI_UpdataWindow(); } } if (gSysPara.ulFlag & (1 << SYS_BIT_BTO_POWER_ON)) // Back to origin power on { gSystem.ulSysStatus[gSystem.ulSysStatusCur] = STATUS_BTO_POWER_ON; bkEnterForBTO(); } #ifdef __DOUBLE_HEADS__ else bhAdjustHeadPowerOn();//調(diào)整激光頭 #endif //__DOUBLE_HEADS__ #ifdef __USB_INTERFACE__ CH375Reset( ); mDelaymS(100); ucErr = CH375LibInit( ); mDelaymS(100); for(j = 0; j < 5; j++) { if (CH375DiskStatus == DISK_CONNECT) break; mDelaymS(100); } if(j == 5) { #ifdef __LANGUAGE_CHINESE__ GUI_MsgBox((INT8U *)"沒(méi)有檢測(cè)到U盤(pán)!"); #else GUI_MsgBox((INT8U *)"Not find UDisk!"); #endif BuzzerCon(1, 600000); delay(0x00500000); g_pCurMenu = g_pRootM->child; g_pCurWin = g_pCurMenu->pWin; GUI_UpdataWindow(); } else { mDelaymS(300 ); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */ if(j != 5) { for ( i = 0; i < 3; i ++ ) { /* 有的U盤(pán)總是返回未準(zhǔn)備好,不過(guò)可以被忽略 */ mDelaymS( 100 ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; } } } #endif while (1) // system main loop { g_ulWDTFlag = 0x55555555; if (SCLOSED == gSystem.ulSocketStatus) { #ifdef __DM9000AE_LAN_MODULE__ if (g_ulSocketFlag == SOCKET_NEED_RESTART) { bsInitNet(); // Reconnect net g_ulSocketFlag = SOCKET_NO_NEED_RESTART; } gSystem.ulSocketStatus = SSYS_INIT_OK; if(STATUS_WAITING == gSystem.ulSysStatus[gSystem.ulSysStatusCur]) { g_pCurMenu = g_pRootM->child; g_pCurWin = g_pCurMenu->pWin; GUI_UpdataWindow(); } #else bsInitNet(); #endif } if (gSystem.keysInfo.ulKeyValue[gSystem.keysInfo.ulKeyCurHandle] & 0xFF000000) { OS_ENTER_CRITICAL(); gSystem.keysInfo.ulKeyValue[gSystem.keysInfo.ulKeyCurHandle] &= 0x00FFFFFF; ulKeyVal = gSystem.keysInfo.ulKeyValue[gSystem.keysInfo.ulKeyCurHandle++]; // Point to next keys stack if (gSystem.keysInfo.ulKeyCurHandle >= SYS_KEY_DEPTH) gSystem.keysInfo.ulKeyCurHandle = 0; OS_EXIT_CRITICAL(); bkProcessKeys(ulKeyVal); } if (STATUS_RUN_END != gSystem.ulSysStatus[gSystem.ulSysStatusCur]) bProcessWtDataLoop(); if (TRUE == g_ucDisplayFGraphFlag) { g_ucDisplayFGraphFlag = FALSE; if (g_pCurMenu->parent == g_pFileM) bkDisplayFileGraph(g_pCurMenu); } if(TRUE == g_ucMoveFlag) { g_ucMoveFlag = FALSE; g_ucKeyTimeFlag = FALSE; if(g_ulCurKeyVal == 0x00)//上 { bcMoveCoorYUp(0xFF000000); } else if(g_ulCurKeyVal == 0x01)//下 { bcMoveCoorYDown(0x00FFFFFF); } else if(g_ulCurKeyVal == 0x10) //左 { bcMoveCoorXLeft(0xFF000000); } else if(g_ulCurKeyVal == 0x11) //右 { bcMoveCoorXRight(0x00FFFFFF); } gSystem.ulSysStatus[gSystem.ulSysStatusCur] = STATUS_MOVING_COORS; }

switch(gSystem.ulSysStatus[gSystem.ulSysStatusCur])//2006/02/15 { case STATUS_RUNNING: bProcessRunStatus(); break; case STATUS_PROTECTION_ERROR: bProcessSysProtectStatus(); break; case STATUS_COMPLETE_UPDATA: RstSystem(); break; case STATUS_MOVING_COORS: ucErr = bcCheckLimit(); if(ucErr == 0) { if(bmGetMotionData(BMOTION_STATUS_ADDR) & 0x00004000)// 軸已停下來(lái)(點(diǎn)移) { g_ulKeyTime = 0; g_ucKeyTimeFlag = FALSE; g_ucMoveFlag = FALSE; g_ulKeyTime--; bkStopMotorRun(); gSystem.ulSysStatus[gSystem.ulSysStatusCur] = STATUS_WAITING; g_pCurMenu = g_pRootM->child; g_pCurWin = g_pCurMenu->pWin; GUI_UpdataWindow(); } } break; case STATUS_ADJUST_COORS: bcRunAdjustCoors(); break; case STATUS_BACK_TO_ORG: case STATUS_BTO_POWER_ON: case STATUS_SET_ORG: bEndBackToOrg(); break; case STATUS_BTO_BEFORE_RUN: bBTOOrgBeforeRun(); break; case STATUS_PAUSE: if(g_ucTimeFlag == 0xFF) { if (gSysPara.ulFlag & (1 << SYS_BIT_STORE_WAY)) pFileProp = (BF_FileAttribute *)(bfGetFileProp(bfGetCurrentFileIndex())); else pFileProp = (BF_FileAttribute *)(bfGetFileProp(0)); bDisplayRunTime(pFileProp); } break; case STATUS_SAVE_DATA: #ifdef __USB_INTERFACE__ if(CH375DiskConnect() == ERR_SUCCESS) { ucErr = bRdSDRAMToUDisk(); } else bSaveDataForFlashFile(); #else bSaveDataForFlashFile();//將文件存儲(chǔ)到NANDFLASH #endif break; case STATUS_SAVE_UPDATA_FILE: bWtFileDataToFlashRom();//將升級(jí)文件寫(xiě)到NORFLASH break; case STATUS_DATA_PROCESS: // FALSH儲(chǔ)存文件時(shí),軟件發(fā)送運(yùn)行命令,數(shù)據(jù)處理過(guò)程 bDataProcessForFlash(); break; case STATUS_DELETINT_FILE: bDeletingFile(); break; case STATUS_FOEMATINT_DISK: bFormatingDisk(); break; case STATUS_READ_SYS_LOG: bReadSystemLog(); break; case STATUS_GETTING_ERROR_FILE: bGetErrorFile(); break; case STATUS_STORE_ERROR_FILE: bStoreErrorFile(); break; case STATUS_ID_ERROR: case STATUS_LASER_POWER_ERROR: case STATUS_PROCESS_DATA_ERROR: case STATUS_LIMIT_ERROR: case STATUS_SN_NO_CONNECT: case STATUS_PREVIEW_END: case STATUS_PREVIEW_DATA_ERROR: case STATUS_MOVEING_LIMIT: #ifdef __METAL_CUT__ case STATUS_FOCUS_ERROR: case STATUS_AUTOFOCUS_TIMEOUT: case STATUS_AUTOFOCUS_LIMT: #endif BuzzerCon(1, 0x60000); break;

case STATUS_RUN_END: BuzzerCon(1, 0x60000); #ifdef __CAMERA_CUT__ if (gucBlockRunFlag == 1)//塊文件運(yùn)行結(jié)束 { gucBlockRunFlag = 0; bmInitMotionModule(); g_pRun->p_ulMotionBuf = (MOTION_BUF *)BMOTION_BASE_ADDR; gSystem.ulSysStatus[gSystem.ulSysStatusCur] = STATUS_WAITING; bfDeleteFile(bfGetCurrentFileIndex()); cmdToPc.usCmdFlag = EXECUTABLE_CMD; // 0x55aa cmdToPc.usCmd = BMCMD_BLOCK_END_TO_PC; cmdToPc.u


for(j = 0; j < 5; j++) { if (CH375DiskStatus == DISK_CONNECT) break; mDelaymS(100); } 上面這段函數(shù)建議你做成一個(gè)只有在設(shè)備插上來(lái)之后才跳出的程序,不然可能會(huì)出現(xiàn)有的U盤(pán)先插上可以,而后插不可以.


現(xiàn)在先插上不可以,后插上可以!


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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