技術(shù)支持:為什么我重裝CH365驅(qū)動后運行應用程序機器會重啟

設置了中斷但應用程序中未用偽中斷,中斷處理全部交由驅(qū)動完成. 現(xiàn)在問題是: 1、只要沒啟動過應用程序(也就是未加載過驅(qū)動),驅(qū)動程序我無論更新多少次,再運行應用程序都沒問題,正常 2、只要啟動過應用程序(也就是加載過驅(qū)動),驅(qū)動程序只要我更新了(在設備管理器里刪除后重裝,哪怕是原來的驅(qū)動再裝一遍),再運行應用程序,一般的端口操作和I2C操作等都沒問題,但只要觸發(fā)中斷,機器必然重啟或藍屏。如果重新啟動機器再運行應用程序,也是正常的。

總之,只要運行過應用程序后退出,然后更新驅(qū)動,再運行應用程序,觸發(fā)了中斷,計算機必然重啟,不知是什么原因。 我知道現(xiàn)在一般設備安裝驅(qū)動后要求機器重啟,但我們批量生產(chǎn)PCI需要測試,買的測試設備是可以測試好一塊板卡->卸載驅(qū)動->關閉板卡電源->插入新卡->上測試設備電源->重裝驅(qū)動這樣的流程測試的,而不需要關閉計算機換卡再重新啟動,從而可以節(jié)約很多時間,現(xiàn)在出現(xiàn)這個問題,我們的測試設備派不上什么用場了。 懇請貴公司技術(shù)支持分析一下可能是哪個環(huán)節(jié)的原因(應用程序、驅(qū)動程序還是硬件設計上的原因)

有幾點想問你一下: 1.為什么每次測試完后要卸載驅(qū)動? 2.驅(qū)動加載是在進入系統(tǒng)后,如果系統(tǒng)發(fā)現(xiàn)板卡已插入,他會將驅(qū)動自動加載上,而不是你啟動應用程序后加載驅(qū)動.啟動應用程序只是你加載了DLL后與驅(qū)動進行通訊. 3.你在啟動應用程序后對CH365做了哪些操作,有沒調(diào)用CH365mWriteIntCommand,CH365mReadIntCommand,CH365mSetIntRoutine,CH365mSetIntLine?


1、PCI測試設備的操作就是那樣的,不關計算機情況下批量測試PCI卡功能,僅僅關閉PCI電源還不夠。 2、應用程序里只做了如下初始化操作(第9步全部注釋掉) //1) 加載DLL LoadLibrary( "CardDLL.DLL" ); //2) 選擇打開CH365設備0,打開存儲器和中斷 Device_Number=0; if ( CH365mOpenDevice(Device_Number, TRUE, TRUE ) == INVALID_HANDLE_VALUE ) { AfxMessageBox("打開板卡設備失敗,\r\n\r\n請確認板卡正確并連接可靠!",16,0); exit(0); }

//3) 通過DLL來調(diào)用版本號 //printf( "= %02X \n", CH365GetDrvVersion() );

//4) 通過DLL來調(diào)用系統(tǒng)自動分配的I/O基地址 if ( CH365mGetIoBaseAddr( Device_Number,&mIoBase ) == FALSE ) { AfxMessageBox("系統(tǒng)自動分配I/O基地址失敗,\r\n\r\n請重新安裝板卡驅(qū)動程序!",16,0); exit(0); }

//5) 通過DLL來調(diào)用系統(tǒng)自動分配的存儲器基地址 if (CH365mGetMemBaseAddr(Device_Number,&mMemBase) ==FALSE) { AfxMessageBox("系統(tǒng)自動分配Memory基地址失敗,\r\n\r\n請重新安裝板卡驅(qū)動程序!",16,0); exit(0); }

//6) 選擇A15作為SCL if ( CH365mReadIoByte(Device_Number,&mIoBase->mCh365IoCtrl,&cByte) == FALSE ) // 檢查A15的狀態(tài),因為當A15為高電平時I2C不工作 { AfxMessageBox("檢查A15的狀態(tài)失敗,\r\n\r\n請重新安裝板卡驅(qū)動程序!",16,0); exit(0); } if ( cByte & 0x01 ) { //AfxMessageBox("A15狀態(tài)異常,\r\n\r\n點擊確定可正常操作!",16,0); CH365mWriteIoByte(Device_Number,&mIoBase->mCh365IoCtrl,(UCHAR)(cByte & 0xFE)); // 設置A15=0,也可由數(shù)據(jù)線D0下拉電阻進行模式設置 }

if ( CH365mWriteIoByte(Device_Number,&mIoBase->mCh365I2cCtrl,0) == FALSE ) // 選擇A15作為SCL,默認值 { AfxMessageBox("選擇SCL失敗,\r\n\r\n請重新安裝板卡驅(qū)動程序!",16,0); exit(0); } //CH365mWriteIoByte(Device_Number,&mBaseAddr->mCh365I2cCtrl,0x80); // 選擇SYS_EX作為SCL

//7) 自動檢測CH365所用的中斷號 if ( CH365mSetIntLine(Device_Number, mCH365_INT_LINE_AUTO ) == FALSE ) { AfxMessageBox("打開板卡中斷失敗,\r\n\r\n請重新安裝板卡驅(qū)動程序!",16,0); exit(0); }

//8) 調(diào)用中斷號 if ( CH365mGetIntLine(Device_Number, &mIntLine ) == FALSE ) { AfxMessageBox("系統(tǒng)調(diào)用板卡中斷號失敗,\r\n\r\n請重新安裝板卡驅(qū)動程序!",16,0); exit(0); } /* //9) 中斷命令設定,CH365的WDM驅(qū)動程序中支持兩條中斷預處理命令 //通過使用CH365mWriteIntCommand( // 寫入中斷命令緩沖區(qū) // ULONG iIndex, // 指定CH365設備序號 // mPWIN32_COMMAND iCommand, // 指向作為中斷命令的命令結(jié)構(gòu) // ULONG iCmdIndex ) // 中斷命令序號,為1或者2 // 假定在系統(tǒng)響應中斷時設定A0-A15的狀態(tài)為0x08000,可以撤消外部電路的中斷請求 if (mIntLine )// 已經(jīng)啟用中斷 { // mWIN32_COMMAND mCommand; // mCommand.mFunction = mFuncWriteIoWord;//發(fā)送I/O口寫字命令,命令代碼,該命令在硬件中斷時由驅(qū)動程序執(zhí)行 // mCommand.mAddress = & mIoBase ->mCh365IoPort[0x00]; //設定A0-A15的地址寄存器,操作地址 // mCommand.mLength = 1; //數(shù)據(jù)長度設定,操作數(shù)據(jù)長度,以字節(jié)計算 // mCommand.mBuffer[0] = 0x00; //要寫的數(shù)據(jù) // mCommand.mBuffer[1] = 0x00; // A15=1,假定:在外部電路的中斷邏輯上,將A15置為高電平可以撤消中斷 // if ( CH365mWriteIntCommand(Device_Number, &mCommand, 1 ) == FALSE ) // { // AfxMessageBox("設置中斷預處理命令失敗,請重新安裝板卡驅(qū)動程序!",16,0); // //exit(0); // } // if ( CH365mSetIntRoutine(Device_Number, InterruptEvent ) == FALSE ) // { // AfxMessageBox("設置中斷服務子程序失敗,\r\n\r\n請重新安裝板卡驅(qū)動程序!",16,0); // exit(0); // } // } */

3、退出應用程序時CH365mCloseDevice(Device_Number);

現(xiàn)在主要是只要打開過應用程序再關閉,然后更新驅(qū)動,再打開應用程序,一般端口操作都正常,但只要觸發(fā)中斷就重啟。反之,只要未運行過應用程序,計算機啟動完就直接刪除驅(qū)動->更新驅(qū)動,不管更新多少遍,然后運行應用程序都正常的。中斷觸發(fā):其實也是通過一端口向PCI卡上的主控芯片發(fā)命令,主控芯片發(fā)中斷信號,觸發(fā)驅(qū)動程序里的中斷(應用程序級未設置偽中斷,也即dll里的檢測中斷線程并未啟動)。


應用程序關閉后 在任務管理器中 是否還有未被關閉的中斷進程?


沒有,我應用程序都未設置偽中斷,更沒有未關閉的中斷進程.任務管理器里也看不到我的應用程序


中斷是如何觸發(fā)的? 硬件上是否D3下拉啟用中斷?


D3 1K電阻下拉


中斷如何觸發(fā)的?D3下拉電阻應用4.7K


有資料上說下拉1K也可,我估計改成4.7K問題也一樣,中斷觸發(fā)很簡單: 通過端口向PCI上主控制芯片發(fā)一個命令,主控制芯片發(fā)一負脈沖(2us寬度左右),從而觸發(fā)中斷,驅(qū)動里中斷服務里就只添加了向主控制芯片發(fā)數(shù)據(jù)的代碼.另外應用程序設置了停止中斷的命令,在退出了應用程序之前,中斷肯定停止了.


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

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