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

📄 apci1710_chrono.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
					   /* Calculate the real timing */					   /*****************************/					   ul_RealTimingInterval = (ULONG) (ul_TimerValue / (1000.0 * (double) b_PCIInputClock));					   d_RealTimingInterval = (double) ul_TimerValue / (1000.0 * (double) b_PCIInputClock);					   if ((double) ((double) ul_TimerValue / (1000.0 * (double) b_PCIInputClock)) >= (double) ((double) ul_RealTimingInterval + 0.5))					      {					      ul_RealTimingInterval = ul_RealTimingInterval + 1;					      }					   ul_TimingInterval = ul_TimingInterval - 1;					   ul_TimerValue     = ul_TimerValue - 2;					   if (b_PCIInputClock != APCI1710_40MHZ)					      {					      ul_TimerValue     = (ULONG) ((double) (ul_TimerValue) * 0.99392);					      }										break;				   /*****/				   /* s */				   /*****/				   case 3:										   /******************/					   /* Timer 0 factor */					   /******************/					   ul_TimerValue = (ULONG) (ul_TimingInterval * (1000000.0 * b_PCIInputClock));					   /*******************/					   /* Round the value */					   /*******************/					   if ((double) ((double) ul_TimingInterval * (1000000.0 * (double) b_PCIInputClock)) >= ((double) ((double) ul_TimerValue + 0.5)))					      {					      ul_TimerValue = ul_TimerValue + 1;					      }					   /*****************************/					   /* Calculate the real timing */					   /*****************************/					   ul_RealTimingInterval = (ULONG) (ul_TimerValue / (1000000.0 * (double) b_PCIInputClock));					   d_RealTimingInterval = (double) ul_TimerValue / (1000000.0 * (double) b_PCIInputClock);					   if ((double) ((double) ul_TimerValue / (1000000.0 * (double) b_PCIInputClock)) >= (double) ((double) ul_RealTimingInterval + 0.5))					      {					      ul_RealTimingInterval = ul_RealTimingInterval + 1;					      }					   ul_TimingInterval = ul_TimingInterval - 1;					   ul_TimerValue     = ul_TimerValue - 2;					   if (b_PCIInputClock != APCI1710_40MHZ)					      {					      ul_TimerValue     = (ULONG) ((double) (ul_TimerValue) * 0.99392);					      }										break;				   /******/				   /* mn */				   /******/				   case 4:										   /******************/					   /* Timer 0 factor */					   /******************/					   ul_TimerValue = (ULONG) ((ul_TimingInterval * 60) * (1000000.0 * b_PCIInputClock));					   /*******************/					   /* Round the value */					   /*******************/					   if ((double) ((double) (ul_TimingInterval * 60.0) * (1000000.0 * (double) b_PCIInputClock)) >= ((double) ((double) ul_TimerValue + 0.5)))					      {					      ul_TimerValue = ul_TimerValue + 1;					      }					   /*****************************/					   /* Calculate the real timing */					   /*****************************/					   ul_RealTimingInterval = (ULONG) (ul_TimerValue / (1000000.0 * (double) b_PCIInputClock)) / 60;					   d_RealTimingInterval = ((double) ul_TimerValue / (0.001 * (double) b_PCIInputClock)) / 60.0;					   if ((double) (((double) ul_TimerValue / (1000000.0 * (double) b_PCIInputClock)) / 60.0) >= (double) ((double) ul_RealTimingInterval + 0.5))					      {					      ul_RealTimingInterval = ul_RealTimingInterval + 1;					      }					   ul_TimingInterval = ul_TimingInterval - 1;					   ul_TimerValue     = ul_TimerValue - 2;					   if (b_PCIInputClock != APCI1710_40MHZ)					      {					      ul_TimerValue     = (ULONG) ((double) (ul_TimerValue) * 0.99392);					      }										break;				   }				fpu_end ();								/****************************/				/* Save the PCI input clock */				/****************************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_ChronoModuleInfo.				b_PCIInputClock = b_PCIInputClock;				/*************************/				/* Save the timing unity */				/*************************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_ChronoModuleInfo.				b_TimingUnit = b_TimingUnit;				/************************/				/* Save the base timing */				/************************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_ChronoModuleInfo.				d_TimingInterval = d_RealTimingInterval;				/****************************/				/* Set the chronometer mode */				/****************************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_ChronoModuleInfo.				dw_ConfigReg = dw_ModeArray [b_ChronoMode];				/***********************/				/* Test if 40 MHz used */				/***********************/				if (b_PCIInputClock == APCI1710_40MHZ)				   {				   devpriv->s_ModuleInfo [b_ModulNbr].				   s_ChronoModuleInfo.				   dw_ConfigReg = devpriv->s_ModuleInfo [b_ModulNbr].						  s_ChronoModuleInfo.						  dw_ConfigReg | 0x80;				   }				outl(devpriv->s_ModuleInfo [b_ModulNbr].s_ChronoModuleInfo.					dw_ConfigReg,devpriv->s_BoardInfos.					ui_Address + 16 + (64 * b_ModulNbr));				/***********************/				/* Write timer 0 value */				/***********************/								outl(ul_TimerValue,devpriv->s_BoardInfos.					ui_Address + (64 * b_ModulNbr));				/*********************/				/* Chronometer init. */				/*********************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_ChronoModuleInfo.				b_ChronoInit = 1;				}			     else				{				/***********************************************/				/* TOR version error for 40MHz clock selection */				/***********************************************/                       DPRINTK("TOR version error for 40MHz clock selection\n");				i_ReturnValue = -9;				}			     }			  else			     {			     /**************************************************************/			     /* You can not used the 40MHz clock selection wich this board */			     /**************************************************************/				 DPRINTK("You can not used the 40MHz clock selection wich this board\n");			     i_ReturnValue = -8;			     }			  }		       else			  {			  /**********************************/			  /* Base timing selection is wrong */			  /**********************************/			  DPRINTK("Base timing selection is wrong\n");			  i_ReturnValue = -7;			  }		       } // if ((b_TimingUnit >= 0) && (b_TimingUnit <= 4))		    else		       {		       /***********************************/		       /* Timing unity selection is wrong */		       /***********************************/			   DPRINTK("Timing unity selection is wrong\n");		       i_ReturnValue = -6;		       } // if ((b_TimingUnit >= 0) && (b_TimingUnit <= 4))		    } // if ((b_PCIInputClock == APCI1710_30MHZ) || (b_PCIInputClock == APCI1710_33MHZ))		 else		    {		    /*****************************************/		    /* The selected PCI input clock is wrong */		    /*****************************************/			DPRINTK("The selected PCI input clock is wrong\n");		    i_ReturnValue = -5;		    } // if ((b_PCIInputClock == APCI1710_30MHZ) || (b_PCIInputClock == APCI1710_33MHZ))		 } // if (b_ChronoMode >= 0 && b_ChronoMode <= 7)	      else		 {		 /***************************************/		 /* Chronometer mode selection is wrong */		 /***************************************/		DPRINTK("Chronometer mode selection is wrong\n");		 i_ReturnValue = -4;		 } // if (b_ChronoMode >= 0 && b_ChronoMode <= 7)	      }	   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;	   }    	data[0] = ul_RealTimingInterval;	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+| Function Name     : _INT_ i_APCI1710_EnableChrono                          ||                                               (BYTE_ b_BoardHandle,        ||                                                BYTE_ b_ModulNbr,           ||                                                BYTE_ b_CycleMode,          ||                                                BYTE_ b_InterruptEnable)INT i_APCI1710_InsnWriteEnableDisableChrono(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)						 |+----------------------------------------------------------------------------+| Task              : Enable the chronometer from selected module            ||                     (b_ModulNbr). You must calling the                     ||                     "i_APCI1710_InitChrono" function be for you call this  ||                     function.                                              ||                     If you enable the chronometer interrupt, the           ||                     chronometer generate a interrupt after the stop signal.||                     See function "i_APCI1710_SetBoardIntRoutineX" and the  ||                     Interrupt mask description chapter from this manual.   ||                     The b_CycleMode parameter determine if you will        ||                     measured a single or more cycle. |					  Disable the chronometer from selected module           ||                     (b_ModulNbr). If you disable the chronometer after a   ||                     start signal occur and you restart the chronometer     ||                     witch the " i_APCI1710_EnableChrono" function, if no   ||                     stop signal occur this start signal is ignored.   +----------------------------------------------------------------------------+| Input Parameters  : BYTE_ b_BoardHandle  : Handle of board APCI-1710       ||                     BYTE_ b_ModulNbr   CR_AREF(chanspec)  : Selected module number (0 to 3) |                                  data[0]  ENABle/Disable chrono|                     BYTE_ b_CycleMode    : Selected the chronometer        ||                                  data[1]           acquisition mode                ||                     BYTE_ b_InterruptEnable : Enable or disable the        ||                                   data[2]            chronometer interrupt.       ||                                               APCI1710_ENABLE:             ||                                               Enable the chronometer       ||                                               interrupt                    ||                                               APCI1710_DISABLE:            ||                                               Disable the chronometer      ||                                               interrupt                    |+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| 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: Chronometer acquisition mode cycle is wrong        ||                     -6: Interrupt parameter is wrong                       ||                     -7: Interrupt function not initialised.                ||                         See function "i_APCI1710_SetBoardIntRoutineX"                        -8: data[0] wrong input    |+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnWriteEnableDisableChrono(comedi_device *dev,comedi_subdevice *s,	comedi_insn *insn,lsampl_t *data)	{	INT i_ReturnValue = 0;	BYTE b_ModulNbr,b_CycleMode,b_InterruptEnable,b_Action;	b_ModulNbr			=	CR_AREF(insn->chanspec);        b_Action            =(BYTE) data[0];	b_CycleMode			=(BYTE)	data[1];	b_InterruptEnable	=(BYTE)	data[2];	i_ReturnValue		=   insn->n;			/**************************/	/* Test the module number */	/**************************/	if (b_ModulNbr < 4)	   {

⌨️ 快捷键说明

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