⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwdrv_apci1710.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
			  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 + -