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

📄 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)		 {				dw_Status=inl(devpriv->s_BoardInfos.			ui_Address + 8 + (64 * b_ModulNbr));		 /********************/		 /* Test if overflow */		 /********************/		 if ((dw_Status & 8) == 8)		    {		    /******************/		    /* Overflow occur */		    /******************/		    *pb_ChronoStatus = 3;		    } // if ((dw_Status & 8) == 8)		 else		    {		    /*******************************/		    /* Test if measurement stopped */		    /*******************************/		    if ((dw_Status & 2) == 2)		       {		       /***********************/		       /* A stop signal occur */		       /***********************/		       *pb_ChronoStatus = 2;		       } // if ((dw_Status & 2) == 2)		    else		       {		       /*******************************/		       /* Test if measurement started */		       /*******************************/		       if ((dw_Status & 1) == 1)			  {			  /************************/			  /* A start signal occur */			  /************************/			  *pb_ChronoStatus = 1;			  } // if ((dw_Status & 1) == 1)		       else			  {			  /***************************/			  /* Measurement not started */			  /***************************/			  *pb_ChronoStatus = 0;			  } // if ((dw_Status & 1) == 1)		       } // if ((dw_Status & 2) == 2)		    } // if ((dw_Status & 8) == 8)		 }	      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_ReadChronoValue                       ||                               (BYTE_     b_BoardHandle,                    ||                                BYTE_     b_ModulNbr,                       ||                                UINT_    ui_TimeOut,                        ||                                PBYTE_   pb_ChronoStatus,                   ||                                PULONG_ pul_ChronoValue)                    |+----------------------------------------------------------------------------+| Task              : Return the chronometer status (pb_ChronoStatus) and the||                     timing value (pul_ChronoValue) after a stop signal     ||                     occur from selected chronometer module (b_ModulNbr).   ||                     This function are only avaible if you have disabled    ||                     the interrupt functionality. See function              ||                     "i_APCI1710_EnableChrono" and the Interrupt mask       ||                     description chapter.                                   ||                     You can test the chronometer status witch the          ||                     "i_APCI1710_GetChronoProgressStatus" function.         ||                                                                            ||                     The returned value from pul_ChronoValue parameter is   ||                     not real measured timing.                              ||                     You must used the "i_APCI1710_ConvertChronoValue"      ||                     function or make this operation for calculate the      ||                     timing:                                                ||                                                                            ||                     Timing = pul_ChronoValue * pul_RealTimingInterval.     ||                                                                            ||                     pul_RealTimingInterval is the returned parameter from  ||                     "i_APCI1710_InitChrono" function and the time unity is ||                     the b_TimingUnit from "i_APCI1710_InitChrono" function|+----------------------------------------------------------------------------+| 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"  ||                     PULONG  pul_ChronoValue  : Chronometer timing value.   |+----------------------------------------------------------------------------+| 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"                            ||                     -5: Timeout parameter is wrong (0 to 65535)            ||                     -6: Interrupt routine installed. You can not read      ||                         directly the chronometer measured timing.          |+----------------------------------------------------------------------------+*/INT   i_APCI1710_ReadChronoValue      (comedi_device *dev,					 BYTE     b_ModulNbr,					 UINT    ui_TimeOut,					 PBYTE   pb_ChronoStatus,					 PULONG pul_ChronoValue)	{	INT    i_ReturnValue = 0;	DWORD dw_Status;	DWORD dw_TimeOut = 0;		/**************************/	/* Test the module number */	/**************************/	if (b_ModulNbr < 4)	   {	   /***********************/	   /* 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)		 {		 /*****************************/		 /* Test the timout parameter */		 /*****************************/		 if ((ui_TimeOut >= 0) && (ui_TimeOut <= 65535UL))		    {		   		       for (;;)			  {			  /*******************/			  /* Read the status */			  /*******************/			 				dw_Status=inl(devpriv->s_BoardInfos.				 ui_Address + 8 + (64 * b_ModulNbr));			  /********************/			  /* Test if overflow */			  /********************/			  if ((dw_Status & 8) == 8)			     {			     /******************/			     /* Overflow occur */			     /******************/			     *pb_ChronoStatus = 3;			     /***************************/			     /* 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;			     } // if ((dw_Status & 8) == 8)			  else			     {			     /*******************************/			     /* Test if measurement stopped */			     /*******************************/			     if ((dw_Status & 2) == 2)				{				/***********************/				/* A stop signal occur */				/***********************/				*pb_ChronoStatus = 2;				/***************************/				/* Test if continnous 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;				} // if ((dw_Status & 2) == 2)			     else				{				/*******************************/				/* Test if measurement started */				/*******************************/				if ((dw_Status & 1) == 1)				   {				   /************************/				   /* A start signal occur */				   /************************/				   *pb_ChronoStatus = 1;				   } // if ((dw_Status & 1) == 1)				else				   {				   /***************************/				   /* Measurement not started */				   /***************************/				   *pb_ChronoStatus = 0;				   } // if ((dw_Status & 1) == 1)				} // if ((dw_Status & 2) == 2)			     } // if ((dw_Status & 8) == 8)			  if (dw_TimeOut == ui_TimeOut)			     {			     /*****************/			     /* Timeout occur */			     /*****************/			     break;			     }			  else			     {			     /*************************/			     /* Increment the timeout */			     /*************************/			     dw_TimeOut = dw_TimeOut + 1;				 mdelay(1000);			    				}			  } // for (;;)		       /*****************************/		       /* Test if stop signal occur */		       /*****************************/		       if (*pb_ChronoStatus == 2)			  {			  /**********************************/			  /* Read the measured timing value */			  /**********************************/

⌨️ 快捷键说明

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