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

📄 apci1710_chrono.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	   /***********************/	   /* Test if chronometer */	   /***********************/	   if ((devpriv->s_BoardInfos.		dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_CHRONOMETER)	      {	      /***********************************/	      /* Test if chronometer initialised */	      /***********************************/	      if (devpriv->s_ModuleInfo [b_ModulNbr].		  s_ChronoModuleInfo.		  b_ChronoInit == 1)		 {         switch(b_Action)         { 		 case APCI1710_ENABLE :                            		 /*********************************/		 /* Test the cycle mode parameter */		 /*********************************/		 if ((b_CycleMode == APCI1710_SINGLE) || (b_CycleMode == APCI1710_CONTINUOUS))		    {		    /***************************/		    /* Test the interrupt flag */		    /***************************/		    if ((b_InterruptEnable == APCI1710_ENABLE) || (b_InterruptEnable == APCI1710_DISABLE))		       {		    				  /***************************/			  /* Save the interrupt flag */			  /***************************/			  devpriv->s_ModuleInfo [b_ModulNbr].			  s_ChronoModuleInfo.			  b_InterruptMask = b_InterruptEnable;			  /***********************/			  /* Save the cycle mode */			  /***********************/			  devpriv->s_ModuleInfo [b_ModulNbr].			  s_ChronoModuleInfo.			  b_CycleMode = b_CycleMode;			  devpriv->s_ModuleInfo [b_ModulNbr].			  s_ChronoModuleInfo.			  dw_ConfigReg = (devpriv->s_ModuleInfo [b_ModulNbr].					  s_ChronoModuleInfo.					  dw_ConfigReg & 0x8F)           |					  ((1 & b_InterruptEnable) << 5) |					  ((1 & b_CycleMode) << 6)       |					  0x10 ;			  /*****************************/			  /* Test if interrupt enabled */			  /*****************************/			  if (b_InterruptEnable == APCI1710_ENABLE)			     {			     /****************************/			     /* Clear the interrupt flag */			     /****************************/			    				 outl(devpriv->s_ModuleInfo [b_ModulNbr].				     s_ChronoModuleInfo.dw_ConfigReg, devpriv->s_BoardInfos.				     ui_Address + 32 + (64 * b_ModulNbr));                         devpriv->tsk_Current=current; // Save the current process task structure			     }			  /***********************************/			  /* Enable or disable the interrupt */			  /* Enable the chronometer          */			  /***********************************/           			  outl(devpriv->s_ModuleInfo [b_ModulNbr].				  s_ChronoModuleInfo.dw_ConfigReg,devpriv->s_BoardInfos.				  ui_Address + 16 + (64 * b_ModulNbr));			  /*************************/			  /* Clear status register */			  /*************************/			 			  outl(0,devpriv->s_BoardInfos.ui_Address + 36 + (64 * b_ModulNbr));			  		    } // if ((b_InterruptEnable == APCI1710_ENABLE) || (b_InterruptEnable == APCI1710_DISABLE))		    else		       {		       /********************************/		       /* Interrupt parameter is wrong */		       /********************************/			   DPRINTK("Interrupt parameter is wrong\n");		       i_ReturnValue = -6;		       } // if ((b_InterruptEnable == APCI1710_ENABLE) || (b_InterruptEnable == APCI1710_DISABLE))		    } // if ((b_CycleMode == APCI1710_SINGLE) || (b_CycleMode == APCI1710_CONTINUOUS))		 else		    {		    /***********************************************/		    /* Chronometer acquisition mode cycle is wrong */		    /***********************************************/			DPRINTK("Chronometer acquisition mode cycle is wrong\n");		    i_ReturnValue = -5;		    } // if ((b_CycleMode == APCI1710_SINGLE) || (b_CycleMode == APCI1710_CONTINUOUS))		 break;		 case APCI1710_DISABLE :		 devpriv->s_ModuleInfo [b_ModulNbr].		 s_ChronoModuleInfo.		 b_InterruptMask = 0;		 devpriv->s_ModuleInfo [b_ModulNbr].		 s_ChronoModuleInfo.		 dw_ConfigReg = devpriv->s_ModuleInfo [b_ModulNbr].				s_ChronoModuleInfo.				dw_ConfigReg & 0x2F;		 /***************************/		 /* Disable the interrupt   */		 /* Disable the chronometer */		 /***************************/		 		 outl(devpriv->s_ModuleInfo [b_ModulNbr].			 s_ChronoModuleInfo.dw_ConfigReg, devpriv->s_BoardInfos.			 ui_Address + 16 + (64 * b_ModulNbr));		 /***************************/		 /* Test if continuous mode */		 /***************************/		 if (devpriv->s_ModuleInfo [b_ModulNbr].		     s_ChronoModuleInfo.b_CycleMode == APCI1710_CONTINUOUS)		    {		    /*************************/		    /* Clear status register */		    /*************************/		   			outl(0,devpriv->s_BoardInfos.ui_Address + 36 + (64 * b_ModulNbr));		    }		    break;		 default:			  DPRINTK("Inputs wrong! Enable or Disable chrono\n");              		  i_ReturnValue = -8;		  } // switch ENABLE/DISABLE		 }	      else		 {		 /*******************************/		 /* Chronometer not initialised */		 /*******************************/                DPRINTK("Chronometer not initialised\n");		 i_ReturnValue = -4;		 }	      }	   else	      {	      /******************************************/	      /* The module is not a Chronometer module */	      /******************************************/	      DPRINTK("The module is not a Chronometer module\n");  		      i_ReturnValue = -3;	      }	   }	else	   {	   /***********************/	   /* Module number error */	   /***********************/          DPRINTK("Module number error\n");	   i_ReturnValue = -2;	   }      	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+| Function Name     :INT	i_APCI1710_InsnReadChrono(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)                   |+----------------------------------------------------------------------------+| Task              : Read  functions for Timer                                     |+----------------------------------------------------------------------------+| Input Parameters  : +----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : +----------------------------------------------------------------------------+*/INT	i_APCI1710_InsnReadChrono(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){	BYTE b_ReadType;	INT  i_ReturnValue=insn->n;	 	b_ReadType=CR_CHAN(insn->chanspec);	switch(b_ReadType)	{	case APCI1710_CHRONO_PROGRESS_STATUS:		i_ReturnValue=i_APCI1710_GetChronoProgressStatus  (dev,						 (BYTE)    CR_AREF(insn->chanspec),						 (PBYTE)  &data[0]);	break;	case APCI1710_CHRONO_READVALUE:		i_ReturnValue=i_APCI1710_ReadChronoValue      (dev,					 (BYTE)    CR_AREF(insn->chanspec),					 (UINT)    insn->unused[0],					 (PBYTE)   &data[0],					 (PULONG) &data[1]);	break;	case APCI1710_CHRONO_CONVERTVALUE:		i_ReturnValue=i_APCI1710_ConvertChronoValue     (dev,					 (BYTE)    CR_AREF(insn->chanspec),					 (ULONG)   insn->unused[0],					 (PULONG)  &data[0],					 (PBYTE)   &data[1],					 (PBYTE)   &data[2],					 (PUINT)  &data[3],					 (PUINT)  &data[4],					 (PUINT)  &data[5]);	break;                case APCI1710_CHRONO_READINTERRUPT:                         printk("In Chrono Read Interrupt\n");                         data[0]=devpriv->s_InterruptParameters.						      s_FIFOInterruptParameters [devpriv->										 s_InterruptParameters.										 ui_Read].b_OldModuleMask;                         data[1]=devpriv->s_InterruptParameters.						      s_FIFOInterruptParameters [devpriv->										 s_InterruptParameters.										 ui_Read].ul_OldInterruptMask;                         data[2]=devpriv->s_InterruptParameters.						      s_FIFOInterruptParameters [devpriv->										 s_InterruptParameters.										 ui_Read].ul_OldCounterLatchValue;			     			     /**************************/			     /* Increment the read FIFO */			     /***************************/			     devpriv->			     s_InterruptParameters.			     ui_Read = (devpriv->					s_InterruptParameters.					ui_Read + 1) % APCI1710_SAVE_INTERRUPT;        break;    	default:		printk("ReadType Parameter wrong\n");	}	if(i_ReturnValue>=0) i_ReturnValue =insn->n;	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+| Function Name     : _INT_ i_APCI1710_GetChronoProgressStatus               ||                               (BYTE_    b_BoardHandle,                     ||                                BYTE_    b_ModulNbr,                        ||                                PBYTE_  pb_ChronoStatus)                    |+----------------------------------------------------------------------------+| Task              : Return the chronometer status (pb_ChronoStatus) from   ||                     selected chronometer module (b_ModulNbr).              |+----------------------------------------------------------------------------+| Input Parameters  : BYTE_ b_BoardHandle  : Handle of board APCI-1710       ||                     BYTE_ b_ModulNbr     : Selected module number (0 to 3) |+----------------------------------------------------------------------------+| Output Parameters : PULONG_  pb_ChronoStatus : Return the chronometer      ||                                                status.                     ||                                                0 : Measurement not started.||                                                    No start signal occur.  ||                                                1 : Measurement started.    ||                                                    A start signal occur.   ||                                                2 : Measurement stopped.    ||                                                    A stop signal occur.    ||                                                    The measurement is      ||                                                    terminate.              ||                                                3: A overflow occur. You    ||                                                   must change the base     ||                                                   timing witch the         ||                                                   function                 ||                                                   "i_APCI1710_InitChrono"  |+----------------------------------------------------------------------------+| Return Value      :  0: No error                                           ||                     -1: The handle parameter of the board is wrong         ||                     -2: Module selection wrong                             ||                     -3: The module is not a Chronometer module             ||                     -4: Chronometer not initialised see function           ||                         "i_APCI1710_InitChrono"                            |+----------------------------------------------------------------------------+*/INT   i_APCI1710_GetChronoProgressStatus      (comedi_device *dev,						 BYTE    b_ModulNbr,						 PBYTE  pb_ChronoStatus)	{	INT    i_ReturnValue = 0;	DWORD dw_Status;		/**************************/	/* Test the module number */	/**************************/	if (b_ModulNbr < 4)	   {

⌨️ 快捷键说明

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