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

📄 apci1710_tor.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
					      /*****************************/					      ul_RealTimingInterval = (ULONG) (ul_TimerValue / (250.0 * (double) b_PCIInputClock));					      d_RealTimingInterval = (double) ul_TimerValue / (250.0 * (double) b_PCIInputClock);					      if ((double) ((double) ul_TimerValue / (250.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) * 1.007752288);						 }					   					   break;				      /*****/				      /* s */				      /*****/				      case 3:					   					      /******************/					      /* Timer 0 factor */					      /******************/					      ul_TimerValue = (ULONG) (ul_TimingInterval * (250000.0 * b_PCIInputClock));					      /*******************/					      /* Round the value */					      /*******************/					      if ((double) ((double) ul_TimingInterval * (250000.0 * (double) b_PCIInputClock)) >= ((double) ((double) ul_TimerValue + 0.5)))						 {						 ul_TimerValue = ul_TimerValue + 1;						 }					      /*****************************/					      /* Calculate the real timing */					      /*****************************/					      ul_RealTimingInterval = (ULONG) (ul_TimerValue / (250000.0 * (double) b_PCIInputClock));					      d_RealTimingInterval = (double) ul_TimerValue / (250000.0 * (double) b_PCIInputClock);					      if ((double) ((double) ul_TimerValue / (250000.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) * 1.007752288);						 }					   					   break;				      /******/				      /* mn */				      /******/				      case 4:					   					      /******************/					      /* Timer 0 factor */					      /******************/					      ul_TimerValue = (ULONG) ((ul_TimingInterval * 60) * (250000.0 * b_PCIInputClock));					      /*******************/					      /* Round the value */					      /*******************/					      if ((double) ((double) (ul_TimingInterval * 60.0) * (250000.0 * (double) b_PCIInputClock)) >= ((double) ((double) ul_TimerValue + 0.5)))						 {						 ul_TimerValue = ul_TimerValue + 1;						 }					      /*****************************/					      /* Calculate the real timing */					      /*****************************/					      ul_RealTimingInterval = (ULONG) (ul_TimerValue / (250000.0 * (double) b_PCIInputClock)) / 60;					      d_RealTimingInterval = ((double) ul_TimerValue / (250000.0 * (double) b_PCIInputClock)) / 60.0;					      if ((double) (((double) ul_TimerValue / (250000.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) * 1.007752288);						 }					   					   break;				      }				      				   fpu_end ();				   } // if (b_PCIInputClock != APCI1710_GATE_INPUT)				else				   {				   /*************************************************************/				   /* 2 Clock used for the overflow and the reload from counter */				   /*************************************************************/				   ul_TimerValue = ul_TimingInterval - 2;				   } // if (b_PCIInputClock != APCI1710_GATE_INPUT)				/****************************/				/* Save the PCI input clock */				/****************************/                		devpriv->s_ModuleInfo [b_ModulNbr].				s_TorCounterModuleInfo.				b_PCIInputClock = b_PCIInputClock;				/************************/				/* Save the timing unit */				/************************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_TorCounterModuleInfo.				s_TorCounterInfo [b_TorCounter].				b_TimingUnit = b_TimingUnit;				/************************/				/* Save the base timing */				/************************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_TorCounterModuleInfo.				s_TorCounterInfo [b_TorCounter].				d_TimingInterval = d_RealTimingInterval;				devpriv->s_ModuleInfo [b_ModulNbr].				s_TorCounterModuleInfo.				s_TorCounterInfo [b_TorCounter].				ul_RealTimingInterval = ul_RealTimingInterval;				/*******************/				/* Get the command */				/*******************/								dw_Command = inl(devpriv->s_BoardInfos.ui_Address + 4 + (16 * b_TorCounter) + (64 * b_ModulNbr));				dw_Command = (dw_Command >> 4) & 0xF;				/******************/				/* Test if 40 MHz */				/******************/				if (b_PCIInputClock == APCI1710_40MHZ)				   {				   /****************************/				   /* Set the 40 MHz selection */				   /****************************/				   dw_Command = dw_Command | 0x10;				   }				/*****************************/				/* Test if extern clock used */				/*****************************/				if (b_PCIInputClock == APCI1710_GATE_INPUT)				   {				   /****************************/				   /* Set the 40 MHz selection */				   /****************************/				   dw_Command = dw_Command | 0x20;				   }				/*************************/				/* Write the new command */				/*************************/							outl(dw_Command,devpriv->s_BoardInfos.ui_Address + 4 + (16 * b_TorCounter) + (64 * b_ModulNbr)); 				/*******************/				/* Disable the tor */				/*******************/								outl(0,devpriv->s_BoardInfos.					ui_Address + 8 + (16 * b_TorCounter) + (64 * b_ModulNbr));				/*************************/				/* Set the timer 1 value */				/*************************/							outl(ul_TimerValue,devpriv->s_BoardInfos.ui_Address + 0 + (16 * b_TorCounter) + (64 * b_ModulNbr));				/*********************/				/* Tor counter init. */				/*********************/				devpriv->s_ModuleInfo [b_ModulNbr].				s_TorCounterModuleInfo.				s_TorCounterInfo [b_TorCounter].				b_TorCounterInit = 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 unit selection is wrong */		       /**********************************/			   DPRINTK("Timing unit 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_TorCounterMode >= 0 && b_TorCounterMode <= 7)	      else		 {		 /**********************************/		 /* Tor Counter selection is wrong */		 /**********************************/		 DPRINTK("Tor Counter selection is wrong\n");		 i_ReturnValue = -4;		 } // if (b_TorCounterMode >= 0 && b_TorCounterMode <= 7)	      }	   else	      {	      /******************************************/	      /* The module is not a tor counter module */	      /******************************************/	      DPRINTK("The module is not a tor counter module\n"); 			      i_ReturnValue = -3;	      }	   }	else	   {	   /***********************/	   /* Module number error */	   /***********************/          DPRINTK("Module number error\n");	   i_ReturnValue = -2;	   }    data[0] = (UINT) ul_RealTimingInterval;	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+| Function Name     : _INT_ i_APCI1710_EnableTorCounter                      ||                                               (BYTE_ b_BoardHandle,        ||                                                BYTE_ b_ModulNbr,           ||						 BYTE_ b_TorCounter,         ||						 BYTE_ b_InputMode,          ||						 BYTE_ b_ExternGate,         ||                                                BYTE_ b_CycleMode,          ||                                                BYTE_ b_InterruptEnable)    |+----------------------------------------------------------------------------+| Task              : Enable the tor counter (b_TorCounter) from selected    ||		      module (b_ModulNbr). You must calling the              ||                     "i_APCI1710_InitTorCounter" function be for you call   ||		      this function.                                         ||                     If you enable the tor counter interrupt, the           ||                     tor counter generate a interrupt after the timing cycle||                     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.                       |+----------------------------------------------------------------------------+| Input Parameters  : BYTE_ b_BoardHandle  : Handle of board APCI-1710       ||                     BYTE_ b_ModulNbr     : Selected module number (0 to 3) ||                     BYTE_ b_TorCounter   : Tor counter selection (0 or 1). ||		      BYTE_ b_InputMode    : Input signal level selection    ||						0 : Tor count each low level ||						1 : Tor count each high level||		      BYTE_ b_ExternGate   : Extern gate action selection    ||						0 : Extern gate signal not   ||						    used                     ||						1 : Extern gate signal used. ||						    If you selected the      ||						    single mode, each high   ||						    level signal start the   ||						    counter.                 ||						    If you selected the      ||						    continuous mode, the     ||						    first high level signal  ||						    start the tor counter    ||									     ||					      APCI1710_TOR_QUADRUPLE _MODE : ||					      In the quadruple mode, the edge||					      analysis circuit generates a   ||					      counting pulse from each edge  ||					      of 2 signals which are phase   ||					      shifted in relation to each    ||					      other.                         ||					      The gate input is used for the ||					      signal B                       ||									     ||					      APCI1710_TOR_DOUBLE_MODE:      ||					      Functions in the same way as   ||					      the quadruple mode, except that||					      only two of the four edges are ||					      analysed per period.           ||					      The gate input is used for the ||					      signal B                       ||									     ||					      APCI1710_TOR_SIMPLE_MODE:      |

⌨️ 快捷键说明

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