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

📄 apci1710_82x54.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
|                    -3: Timer selection wrong                               ||                    -4: The module is not a TIMER module                    ||                    -5: Timer not initialised see function                  ||                        "i_APCI1710_InitTimer"                              ||                    -6: Interrupt parameter is wrong                        ||                    -7: Interrupt function not initialised.                 ||                        See function "i_APCI1710_SetBoardIntRoutineX"       |+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnWriteEnableDisableTimer(comedi_device *dev,comedi_subdevice *s,	comedi_insn *insn,lsampl_t *data)	{	INT		i_ReturnValue = 0;	DWORD	dw_DummyRead;	BYTE	b_ModulNbr;	BYTE	b_TimerNbr;	BYTE    b_ActionType;	BYTE	b_InterruptEnable;	i_ReturnValue=insn->n;	b_ModulNbr        = (BYTE) CR_AREF(insn->chanspec);	b_TimerNbr		  = (BYTE) CR_CHAN(insn->chanspec);	b_ActionType      = (BYTE) data[0]; // enable disable 	/**************************/	/* Test the module number */	/**************************/	if (b_ModulNbr < 4)	   {	   /***********************/	   /* Test if 82X54 timer */	   /***********************/	   if ((devpriv->s_BoardInfos.		dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_82X54_TIMER)	      {	      /*************************/	      /* Test the timer number */	      /*************************/	      if (b_TimerNbr <= 2)		 {		 /*****************************/		 /* Test if timer initialised */		 /*****************************/		 if (devpriv->s_ModuleInfo [b_ModulNbr].		     s_82X54ModuleInfo.		     s_82X54TimerInfo  [b_TimerNbr].		     b_82X54Init == 1)		    {             switch(b_ActionType)             { 			 case APCI1710_ENABLE:			 b_InterruptEnable = (BYTE) data[1];		    /********************************/		    /* Test the interrupt selection */		    /********************************/		    if ((b_InterruptEnable == APCI1710_ENABLE) || (b_InterruptEnable == APCI1710_DISABLE))		       {		       if (b_InterruptEnable == APCI1710_ENABLE)			  {			                              dw_DummyRead=inl(devpriv->s_BoardInfos.				    ui_Address + 12 + (b_TimerNbr * 4) + (64 * b_ModulNbr));			     /************************/			     /* Enable the interrupt */			     /************************/			     devpriv->s_ModuleInfo [b_ModulNbr].			     s_82X54ModuleInfo.			     s_82X54TimerInfo  [b_TimerNbr].			     dw_ConfigurationWord = devpriv->s_ModuleInfo [b_ModulNbr].						    s_82X54ModuleInfo.						    s_82X54TimerInfo  [b_TimerNbr].						    dw_ConfigurationWord | 0x8;			     				  outl(devpriv->s_ModuleInfo [b_ModulNbr].				     s_82X54ModuleInfo.				     s_82X54TimerInfo  [b_TimerNbr].				     dw_ConfigurationWord,devpriv->s_BoardInfos.				     ui_Address + 32 + (b_TimerNbr * 4) + (64 * b_ModulNbr));                             devpriv->tsk_Current=current; // Save the current process task structure			   			   			  } // if (b_InterruptEnable == APCI1710_ENABLE)		       else			  {			  /*************************/			  /* Disable the interrupt */			  /*************************/			  devpriv->s_ModuleInfo [b_ModulNbr].			  s_82X54ModuleInfo.			  s_82X54TimerInfo  [b_TimerNbr].			  dw_ConfigurationWord = devpriv->s_ModuleInfo [b_ModulNbr].						 s_82X54ModuleInfo.						 s_82X54TimerInfo  [b_TimerNbr].						 dw_ConfigurationWord & 0xF7;			  			  outl(devpriv->s_ModuleInfo [b_ModulNbr].				  s_82X54ModuleInfo.				  s_82X54TimerInfo  [b_TimerNbr].				  dw_ConfigurationWord,devpriv->s_BoardInfos.				  ui_Address + 32 + (b_TimerNbr * 4) + (64 * b_ModulNbr));			  /***************************/			  /* Save the interrupt flag */			  /***************************/			 devpriv->s_ModuleInfo [b_ModulNbr].			  s_82X54ModuleInfo.			  b_InterruptMask = devpriv->s_ModuleInfo [b_ModulNbr].					    s_82X54ModuleInfo.						b_InterruptMask & (0xFF - (1 << b_TimerNbr));			  } // if (b_InterruptEnable == APCI1710_ENABLE)		       /***********************/		       /* Test if error occur */		       /***********************/		       if (i_ReturnValue >= 0)			  {			  /***************************/			  /* Save the interrupt flag */			  /***************************/			  devpriv->s_ModuleInfo [b_ModulNbr].			  s_82X54ModuleInfo.			  b_InterruptMask = devpriv->s_ModuleInfo [b_ModulNbr].					    s_82X54ModuleInfo.					    b_InterruptMask | ((1 & b_InterruptEnable) << b_TimerNbr);			  /********************/			  /* Enable the timer */			  /********************/			  			  outl(1,devpriv->s_BoardInfos.				  ui_Address + 44 + (b_TimerNbr * 4) + (64 * b_ModulNbr));			  }		       }		    else		       {		       /********************************/		       /* Interrupt parameter is wrong */		       /********************************/                      DPRINTK("\n");		       i_ReturnValue = -6;		       }			   break;		case APCI1710_DISABLE:			/***************************/		    /* Test the interrupt flag */		    /***************************/		    if (((devpriv->s_ModuleInfo [b_ModulNbr].			  s_82X54ModuleInfo.			  b_InterruptMask  >> b_TimerNbr) & 1) == 1)		       {		       /*************************/		       /* Disable the interrupt */		       /*************************/		       devpriv->s_ModuleInfo [b_ModulNbr].		       s_82X54ModuleInfo.		       s_82X54TimerInfo  [b_TimerNbr].		       dw_ConfigurationWord = devpriv->s_ModuleInfo [b_ModulNbr].					      s_82X54ModuleInfo.					      s_82X54TimerInfo  [b_TimerNbr].					      dw_ConfigurationWord & 0xF7;		       			     outl(devpriv->s_ModuleInfo [b_ModulNbr].			       s_82X54ModuleInfo.			       s_82X54TimerInfo  [b_TimerNbr].			       dw_ConfigurationWord,devpriv->s_BoardInfos.			       ui_Address + 32 + (b_TimerNbr * 4) + (64 * b_ModulNbr));		       /***************************/		       /* Save the interrupt flag */		       /***************************/		       devpriv->s_ModuleInfo [b_ModulNbr].		       s_82X54ModuleInfo.		       b_InterruptMask = devpriv->s_ModuleInfo [b_ModulNbr].					 s_82X54ModuleInfo.b_InterruptMask & (0xFF - (1 << b_TimerNbr));		       }		    /*********************/		    /* Disable the timer */		    /*********************/		    			outl(0,devpriv->s_BoardInfos.			    ui_Address + 44 + (b_TimerNbr * 4) + (64 * b_ModulNbr));				break;    			 }// Switch end		    }		 else		    {		    /**************************************/		    /* Timer not initialised see function */		    /**************************************/			DPRINTK("Timer not initialised see function\n");		    i_ReturnValue = -5;		    }		 }	      else		 {		 /*************************/		 /* Timer selection wrong */		 /*************************/		 DPRINTK("Timer selection wrong\n");		 i_ReturnValue = -3;		 } // if ((b_TimerNbr >= 0) && (b_TimerNbr <= 2))	      }	   else	      {	      /************************************/	      /* The module is not a TIMER module */	      /************************************/	      DPRINTK("The module is not a TIMER module\n");	      i_ReturnValue = -4;	      }	   }	else	   {	   /***********************/	   /* Module number error */	   /***********************/	   DPRINTK("Module number error\n");	   i_ReturnValue = -2;	   }	return (i_ReturnValue);	}	/*+----------------------------------------------------------------------------+| Function Name     : _INT_     i_APCI1710_ReadAllTimerValue                 ||                                       (BYTE_     b_BoardHandle,            ||                                        BYTE_     b_ModulNbr,               ||                                        PULONG_ pul_TimerValueArray)INT i_APCI1710_InsnReadAllTimerValue(comedi_device *dev,comedi_subdevice *s,	comedi_insn *insn,lsampl_t *data)        |+----------------------------------------------------------------------------+| Task              : Return the all timer values from selected timer        ||                     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_ pul_TimerValueArray : Timer value array.       ||                           Element 0 contain the timer 0 value.             ||                           Element 1 contain the timer 1 value.             ||                           Element 2 contain the timer 2 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 TIMER module                    ||                    -4: Timer 0 not initialised see function                ||                        "i_APCI1710_InitTimer"                              ||                    -5: Timer 1 not initialised see function                ||                        "i_APCI1710_InitTimer"                              ||                    -6: Timer 2 not initialised see function                ||                        "i_APCI1710_InitTimer"                              |+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnReadAllTimerValue(comedi_device *dev,comedi_subdevice *s,	comedi_insn *insn,lsampl_t *data)	{	INT i_ReturnValue = 0;    	BYTE    b_ModulNbr,b_ReadType;	PULONG	pul_TimerValueArray;	b_ModulNbr=CR_AREF(insn->chanspec);        b_ReadType=CR_CHAN(insn->chanspec);    	pul_TimerValueArray=(PULONG) data;	i_ReturnValue=insn->n;                switch(b_ReadType)        {         case APCI1710_TIMER_READINTERRUPT:                                  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;

⌨️ 快捷键说明

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