?? hwdrv_apci1710.c
字號:
devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldCounterLatchValue = 0; devpriv-> s_InterruptParameters. ul_InterruptOccur ++; /****************************/ /* 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); } // if (ul_StatusRegister & 1) } } // CDA /***********************/ /* Test if PWM counter */ /***********************/ if ((devpriv-> s_BoardInfos. dw_MolduleConfiguration [b_ModuleCpt] & 0xFFFF0000UL) == APCI1710_PWM) { for (b_PWMCpt = 0; b_PWMCpt < 2; b_PWMCpt ++) { /*************************************/ /* Test if PWM interrupt initialised */ /*************************************/ if (devpriv-> s_ModuleInfo [b_ModuleCpt]. s_PWMModuleInfo. s_PWMInfo [b_PWMCpt]. b_InterruptEnable == APCI1710_ENABLE) { /*****************************/ /* Read the interrupt status */ /*****************************/ ul_StatusRegister=inl(devpriv->s_BoardInfos. ui_Address + 16 + (20 * b_PWMCpt) + (64 * b_ModuleCpt)); /***************************/ /* Test if interrupt occur */ /***************************/ if (ul_StatusRegister & 0x1) { devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 0x4000UL << b_PWMCpt; devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. b_OldModuleMask = 1 << b_ModuleCpt; devpriv-> s_InterruptParameters. ul_InterruptOccur ++; /****************************/ /* 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); } // if (ul_StatusRegister & 0x1) } // if (APCI1710_ENABLE) } // for (b_PWMCpt == 0; b_PWMCpt < 0; b_PWMCpt ++) } // PWM counter /***********************/ /* Test if tor counter */ /***********************/ if ((devpriv-> s_BoardInfos. dw_MolduleConfiguration [b_ModuleCpt] & 0xFFFF0000UL) == APCI1710_TOR_COUNTER) { for (b_TorCounterCpt = 0; b_TorCounterCpt < 2; b_TorCounterCpt ++) { /*************************************/ /* Test if tor interrupt initialised */ /*************************************/ if (devpriv-> s_ModuleInfo [b_ModuleCpt]. s_TorCounterModuleInfo. s_TorCounterInfo [b_TorCounterCpt]. b_InterruptEnable == APCI1710_ENABLE) { /*****************************/ /* Read the interrupt status */ /*****************************/ ul_StatusRegister=inl(devpriv->s_BoardInfos. ui_Address + 12 + (16 * b_TorCounterCpt) + (64 * b_ModuleCpt)); /***************************/ /* Test if interrupt occur */ /***************************/ if (ul_StatusRegister & 0x1) { /******************************/ /* Read the tor counter value */ /******************************/ ul_LatchRegisterValue=inl(devpriv->s_BoardInfos. ui_Address + 0 + (16 * b_TorCounterCpt) + (64 * b_ModuleCpt)); devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 0x1000UL << b_TorCounterCpt; 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 ++; /****************************/ /* 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); } // if (ul_StatusRegister & 0x1) } // if (APCI1710_ENABLE) } // for (b_TorCounterCpt == 0; b_TorCounterCpt < 0; b_TorCounterCpt ++) } // Tor counter /***********************/ /* Test if chronometer */ /***********************/ if ((devpriv-> s_BoardInfos. dw_MolduleConfiguration [b_ModuleCpt] & 0xFFFF0000UL) == APCI1710_CHRONOMETER) { //printk("APCI1710 Chrono Interrupt\n"); /*****************************/ /* Read the interrupt status */ /*****************************/ ul_InterruptLatchReg=inl(devpriv->s_BoardInfos. ui_Address + 12 + (64 * b_ModuleCpt)); /***************************/ /* Test if interrupt occur */ /***************************/ if ((ul_InterruptLatchReg & 0x8) == 0x8) { /****************************/ /* Clear the interrupt flag */ /****************************/ outl(0,devpriv->s_BoardInfos. ui_Address + 32 + (64 * b_ModuleCpt)); /***************************/ /* Test if continuous mode */ /***************************/ if (ps_ModuleInfo-> s_ChronoModuleInfo. b_CycleMode == APCI1710_ENABLE) { /********************/ /* Clear the status */ /********************/ outl(0,devpriv->s_BoardInfos. ui_Address + 36 + (64 * b_ModuleCpt)); } /*************************/ /* Read the timing value */ /*************************/ ul_LatchRegisterValue=inl(devpriv->s_BoardInfos. ui_Address + 4 + (64 * b_ModuleCpt)); /*****************************/ /* Test if interrupt enabled */ /*****************************/ if (ps_ModuleInfo-> s_ChronoModuleInfo. b_InterruptMask) { devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 0x80; 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 ++; /****************************/ /* 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); } } } // Chronometer /*************************/ /* Test if pulse encoder */ /*************************/ if ((devpriv-> s_BoardInfos. dw_MolduleConfiguration [b_ModuleCpt] & 0xFFFF0000UL) == APCI1710_PULSE_ENCODER) { /****************************/ /* Read the status register */ /****************************/ ul_StatusRegister=inl(devpriv->s_BoardInfos. ui_Address + 20 + (64 * b_ModuleCpt)); if (ul_StatusRegister & 0xF) { for (b_PulseIncoderCpt = 0; b_PulseIncoderCpt < 4; b_PulseIncoderCpt ++) { /*************************************/ /* Test if pulse encoder initialised */ /*************************************/ if ((ps_ModuleInfo-> s_PulseEncoderModuleInfo. s_PulseEncoderInfo [b_PulseIncoderCpt]. b_PulseEncoderInit == 1) && (((ps_ModuleInfo-> s_PulseEncoderModuleInfo. dw_SetRegister >> b_PulseIncoderCpt) & 1) == 1) && (((ul_StatusRegister >> (b_PulseIncoderCpt)) & 1) == 1)) { devpriv-> s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Write]. ul_OldInterruptMask = 0x100UL << b_PulseIncoderCpt; 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); } } } }//pulse encoder } return ; }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -