?? hwdrv_apci1710.c
字號:
b_InterruptFlag = 1; /**********************/ /* Call user function */ /**********************/ //Send a signal to from kernel to user space send_sig(SIGIO,devpriv->tsk_Current,0); } /*************************************/ /* Test if strobe latch II interrupt */ /*************************************/ if (ul_InterruptLatchReg & 0x20) { ul_LatchRegisterValue=inl(devpriv->s_BoardInfos. ui_Address + 8 + (64 * b_ModuleCpt)); devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 2UL; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. b_OldModuleMask = 1 << b_ModuleCpt; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldCounterLatchValue = ul_LatchRegisterValue; devpriv-> s_InterruptParameters. ul_InterruptOccur ++; /****************************/ /* 0899/0224 to 1199/0225 */ /****************************/ /* Increment the write FIFO */ /****************************/ devpriv-> s_InterruptParameters. ui_Write = (devpriv-> s_InterruptParameters. ui_Write + 1) % APCI1710_SAVE_INTERRUPT; b_InterruptFlag = 1; /**********************/ /* Call user function */ /**********************/ //Send a signal to from kernel to user space send_sig(SIGIO,devpriv->tsk_Current,0); } } ul_InterruptLatchReg=inl(devpriv-> s_BoardInfos. ui_Address + 24 + (64 * b_ModuleCpt)); /***************************/ /* Test if index interrupt */ /***************************/ if (ul_InterruptLatchReg & 0x8) { ps_ModuleInfo-> s_SiemensCounterInfo. s_InitFlag. b_IndexInterruptOccur = 1; if (ps_ModuleInfo-> s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 & APCI1710_INDEX_AUTO_MODE) { outl(ps_ModuleInfo-> s_SiemensCounterInfo. s_ModeRegister. dw_ModeRegister1_2_3_4,devpriv-> s_BoardInfos. ui_Address + 20 + (64 * b_ModuleCpt)); } /*****************************/ /* Test if interrupt enabled */ /*****************************/ if ((ps_ModuleInfo-> s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister3 & APCI1710_ENABLE_INDEX_INT) == APCI1710_ENABLE_INDEX_INT) { devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 4UL; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. b_OldModuleMask = 1 << b_ModuleCpt; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldCounterLatchValue = ul_LatchRegisterValue; devpriv-> s_InterruptParameters. ul_InterruptOccur ++; /****************************/ /* 0899/0224 to 1199/0225 */ /****************************/ /* Increment the write FIFO */ /****************************/ devpriv-> s_InterruptParameters. ui_Write = (devpriv-> s_InterruptParameters. ui_Write + 1) % APCI1710_SAVE_INTERRUPT; b_InterruptFlag = 1; /**********************/ /* Call user function */ /**********************/ //Send a signal to from kernel to user space send_sig(SIGIO,devpriv->tsk_Current,0); } } /*****************************/ /* Test if compare interrupt */ /*****************************/ if (ul_InterruptLatchReg & 0x10) { /*****************************/ /* Test if interrupt enabled */ /*****************************/ if ((ps_ModuleInfo-> s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister3 & APCI1710_ENABLE_COMPARE_INT) == APCI1710_ENABLE_COMPARE_INT) { devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 8UL; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. b_OldModuleMask = 1 << b_ModuleCpt; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldCounterLatchValue = ul_LatchRegisterValue; devpriv-> s_InterruptParameters. ul_InterruptOccur ++; /****************************/ /* 0899/0224 to 1199/0225 */ /****************************/ /* Increment the write FIFO */ /****************************/ devpriv-> s_InterruptParameters. ui_Write = (devpriv-> s_InterruptParameters. ui_Write + 1) % APCI1710_SAVE_INTERRUPT; b_InterruptFlag = 1; /**********************/ /* Call user function */ /**********************/ //Send a signal to from kernel to user space send_sig(SIGIO,devpriv->tsk_Current,0); } } /*******************************************/ /* Test if frequency measurement interrupt */ /*******************************************/ if (ul_InterruptLatchReg & 0x20) { /*******************/ /* Read the status */ /*******************/ ul_StatusRegister=inl(devpriv->s_BoardInfos. ui_Address + 32 + (64 * b_ModuleCpt)); /******************/ /* Read the value */ /******************/ ul_LatchRegisterValue=inl(devpriv->s_BoardInfos. ui_Address + 28 + (64 * b_ModuleCpt)); switch ((ul_StatusRegister >> 1) & 3) { case 0: /*************************/ /* Test the counter mode */ /*************************/ if ((devpriv-> s_ModuleInfo [b_ModuleCpt]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister1 & APCI1710_16BIT_COUNTER) == APCI1710_16BIT_COUNTER) { /****************************************/ /* Test if 16-bit counter 1 pulse occur */ /****************************************/ if ((ul_LatchRegisterValue & 0xFFFFU) != 0) { ui_16BitValue = (UINT) ul_LatchRegisterValue & 0xFFFFU; ul_LatchRegisterValue = (ul_LatchRegisterValue & 0xFFFF0000UL) | (0xFFFFU - ui_16BitValue); } /****************************************/ /* Test if 16-bit counter 2 pulse occur */ /****************************************/ if ((ul_LatchRegisterValue & 0xFFFF0000UL) != 0) { ui_16BitValue = (UINT) ((ul_LatchRegisterValue >> 16) & 0xFFFFU); ul_LatchRegisterValue = (ul_LatchRegisterValue & 0xFFFFUL) | ((0xFFFFU - ui_16BitValue) << 16); } } else { if (ul_LatchRegisterValue != 0) { ul_LatchRegisterValue = 0xFFFFFFFFUL - ul_LatchRegisterValue; } } break; case 1: /****************************************/ /* Test if 16-bit counter 2 pulse occur */ /****************************************/ if ((ul_LatchRegisterValue & 0xFFFF0000UL) != 0) { ui_16BitValue = (UINT) ((ul_LatchRegisterValue >> 16) & 0xFFFFU); ul_LatchRegisterValue = (ul_LatchRegisterValue & 0xFFFFUL) | ((0xFFFFU - ui_16BitValue) << 16); } break; case 2: /****************************************/ /* Test if 16-bit counter 1 pulse occur */ /****************************************/ if ((ul_LatchRegisterValue & 0xFFFFU) != 0) { ui_16BitValue = (UINT) ul_LatchRegisterValue & 0xFFFFU; ul_LatchRegisterValue = (ul_LatchRegisterValue & 0xFFFF0000UL) | (0xFFFFU - ui_16BitValue); } break; } devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 0x10000UL; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. b_OldModuleMask = 1 << b_ModuleCpt; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldCounterLatchValue = ul_LatchRegisterValue; devpriv-> s_InterruptParameters. ul_InterruptOccur ++; /****************************/ /* 0899/0224 to 1199/0225 */ /****************************/ /* Increment the write FIFO */ /****************************/ devpriv-> s_InterruptParameters. ui_Write = (devpriv-> s_InterruptParameters. ui_Write + 1) % APCI1710_SAVE_INTERRUPT; b_InterruptFlag = 1; /**********************/ /* Call user function */ /**********************/ //Send a signal to from kernel to user space send_sig(SIGIO,devpriv->tsk_Current,0); } } // Incremental counter /***************/ /* Test if CDA */ /***************/ if ((devpriv-> s_BoardInfos. dw_MolduleConfiguration [b_ModuleCpt] & 0xFFFF0000UL) == APCI1710_CDA) { /******************************************/ /* Test if CDA enable and functionality 0 */ /******************************************/ if ((devpriv-> s_ModuleInfo [b_ModuleCpt]. s_CDAModuleInfo. b_CDAEnable == APCI1710_ENABLE) && (devpriv-> s_ModuleInfo [b_ModuleCpt]. s_CDAModuleInfo. b_FctSelection == 0)) { /****************************/ /* Get the interrupt status */ /****************************/ ul_StatusRegister=inl(devpriv->s_BoardInfos. ui_Address + 16 + (64 * b_ModuleCpt)); /***************************/ /* Test if interrupt occur */ /***************************/ if (ul_StatusRegister & 1) { devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 0x80000UL; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. b_OldModuleMask = 1 << b_ModuleCpt;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -