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

📄 hwdrv_apci1710.c

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -