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

📄 apci1710_ttl.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	/**************************/	/* Test the module number */	/**************************/	if (b_ModulNbr < 4)	   {	   /**************************/	   /* Test if TTL I/O module */	   /**************************/	   if ((devpriv->s_BoardInfos.		dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_TTL_IO)	      {	      /******************************************/	      /* Test if the TTL I/O module initialised */	      /******************************************/	      if (devpriv->		  s_ModuleInfo [b_ModulNbr].		  s_TTLIOInfo.		  b_TTLInit == 1)		 {		 /**************************/		 /* Read all digital input */		 /**************************/			dw_StatusReg=inl(devpriv->s_BoardInfos.			ui_Address + (64 * b_ModulNbr));		 /**********************/		 /* Test if TTL Rev1.0 */		 /**********************/		 if ((devpriv->s_BoardInfos.		      dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130)		    {		    *pul_PortValue = dw_StatusReg & 0xFFFFFFUL;		    }		 else		    {		    /**************************************/		    /* Test if port A not used for output */		    /**************************************/		    if (devpriv->s_ModuleInfo [b_ModulNbr].			s_TTLIOInfo.b_PortConfiguration [0] == 1)		       {		       *pul_PortValue = dw_StatusReg & 0x3FFFF00UL;		       }		    /**************************************/		    /* Test if port B not used for output */		    /**************************************/		    if (devpriv->			s_ModuleInfo [b_ModulNbr].			s_TTLIOInfo.			b_PortConfiguration [1] == 1)		       {		       *pul_PortValue = dw_StatusReg & 0x3FF00FFUL;		       }		    /**************************************/		    /* Test if port C not used for output */		    /**************************************/		    if (devpriv->			s_ModuleInfo [b_ModulNbr].			s_TTLIOInfo.			b_PortConfiguration [2] == 1)		       {		       *pul_PortValue = dw_StatusReg & 0x300FFFFUL;		       }		    /**************************************/		    /* Test if port D not used for output */		    /**************************************/		    if (devpriv->			s_ModuleInfo [b_ModulNbr].			s_TTLIOInfo.			b_PortConfiguration [3] == 1)		       {		       *pul_PortValue = dw_StatusReg & 0xFFFFFFUL;		       }		    }		 }	      else		 {		 /***************************/		 /* TTL I/O not initialised */		 /***************************/		 DPRINTK("TTL I/O not initialised\n");		 i_ReturnValue = -5;		 }	      }	   else	      {	      /**********************************/	      /* The module is not a TTL module */	      /**********************************/	      DPRINTK("The module is not a TTL module\n");  		      i_ReturnValue = -3;	      }	   }	else	   {	   /***********************/	   /* Module number error */	   /***********************/	   DPRINTK("Module number error\n");	   i_ReturnValue = -2;	   }	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+|                            OUTPUT FUNCTIONS                                |+----------------------------------------------------------------------------+*//*+----------------------------------------------------------------------------+| Function Name     : _INT_ i_APCI1710_SetTTLIOChlOn                         ||                               (BYTE_           b_BoardHandle,              ||                                BYTE_           b_ModulNbr,                 ||                                BYTE_           b_OutputChannel) INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device *dev,comedi_subdevice *s,	comedi_insn *insn,lsampl_t *data)           |+----------------------------------------------------------------------------+| Task              : Sets or resets  the output witch has been passed with the         ||                     parameter b_Channel. Setting an output means setting   ||                     an ouput high.                                         |+----------------------------------------------------------------------------+| Input Parameters  : BYTE_ b_BoardHandle   : Handle of board APCI-1710      ||                     BYTE_ b_ModulNbr      : Selected module number (0 to 3)||                     BYTE_ b_OutputChannel : Selection from digital output  ||                                             channel (0 or 1)               ||                                                0      : PD0                ||                                                1      : PD1                ||						 2 to 9 : PA                 ||						10 to 17: PB                 ||						18 to 25: PC                 |  b_ModulNbr	   = CR_AREF(insn->chanspec);	b_OutputChannel= CR_CHAN(insn->chanspec);	ui_State	   = data[0]; // ON or OFF+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : 0: No error                                            ||                    -1: The handle parameter of the board is wrong          ||                    -2: The module parameter is wrong                       ||                    -3: The module is not a TTL I/O module                  ||                    -4: The selected digital output is wrong                ||                    -5: TTL I/O not initialised see function                ||                        " i_APCI1710_InitTTLIO"+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device *dev,comedi_subdevice *s,	comedi_insn *insn,lsampl_t *data)	{	INT    i_ReturnValue = 0;		DWORD dw_StatusReg   = 0;	BYTE b_ModulNbr;	BYTE b_OutputChannel;	UINT ui_State;	i_ReturnValue  = insn->n;	b_ModulNbr	   = CR_AREF(insn->chanspec);	b_OutputChannel= CR_CHAN(insn->chanspec);	ui_State	   = data[0]; // ON or OFF	/**************************/	/* Test the module number */	/**************************/	if (b_ModulNbr < 4)	   {	   /**************************/	   /* Test if TTL I/O module */	   /**************************/	   if ((devpriv->s_BoardInfos.		dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_TTL_IO)	      {	      /******************************************/	      /* Test if the TTL I/O module initialised */	      /******************************************/	      if (devpriv->s_ModuleInfo [b_ModulNbr].		  s_TTLIOInfo.		  b_TTLInit == 1)		 {		 /***********************************/		 /* Test the TTL I/O channel number */		 /***********************************/		 if (((b_OutputChannel <= 1) && ((devpriv->s_BoardInfos.						 dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130)) ||		     ((b_OutputChannel <= 25) && ((devpriv->s_BoardInfos.						  dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) >= 0x3230)))		    {		    /****************************************************/		    /* Test if the selected channel is a output channel */		    /****************************************************/		    if (((b_OutputChannel <= 1) && (devpriv->			s_ModuleInfo [b_ModulNbr].									      s_TTLIOInfo.									      b_PortConfiguration [3] == 1)) ||			((b_OutputChannel >= 2) && (b_OutputChannel <= 9) && (devpriv->s_ModuleInfo [b_ModulNbr].									      s_TTLIOInfo.									      b_PortConfiguration [0] == 1)) ||			((b_OutputChannel >= 10) && (b_OutputChannel <= 17) && (devpriv->s_ModuleInfo [b_ModulNbr].										s_TTLIOInfo.										b_PortConfiguration [1] == 1)) ||			((b_OutputChannel >= 18) && (b_OutputChannel <= 25) && (devpriv->s_ModuleInfo [b_ModulNbr].										s_TTLIOInfo.										b_PortConfiguration [2] == 1)))		       {		       /************************/		       /* Test if PD0 selected */		       /************************/		       if (b_OutputChannel == 0)			  {                outl(ui_State,devpriv->s_BoardInfos.				  ui_Address + (64 * b_ModulNbr));			  }		       else              {			  /************************/			  /* Test if PD1 selected */			  /************************/			  if (b_OutputChannel == 1)			     {				  outl(ui_State,devpriv->s_BoardInfos.				     ui_Address + 4 + (64 * b_ModulNbr));			     }			  else			     {			     b_OutputChannel = b_OutputChannel - 2;			     /********************/			     /* Read all channel */			     /********************/			    					dw_StatusReg =inl(devpriv->s_BoardInfos.				    ui_Address + (64 * b_ModulNbr));                 if(ui_State) // ON                 {			     dw_StatusReg = (dw_StatusReg >> ((b_OutputChannel / 8) * 8)) & 0xFF;			     dw_StatusReg = dw_StatusReg | (1 << (b_OutputChannel % 8));				 }else    // Off				 {                 dw_StatusReg = (dw_StatusReg >> ((b_OutputChannel / 8) * 8)) & 0xFF;			     dw_StatusReg = dw_StatusReg & (0xFF - (1 << (b_OutputChannel % 8)));				 }			     /****************************/			     /* Set the new output value */			     /****************************/						 outl(dw_StatusReg,devpriv->s_BoardInfos.				     ui_Address + 8 + ((b_OutputChannel / 8) * 4) + (64 * b_ModulNbr));			     }			  }		       }		    else		       {		       /************************************/		       /* The selected TTL output is wrong */		       /************************************/			   DPRINTK(" The selected TTL output is wrong\n");			       i_ReturnValue = -4;		       }		    }		 else		    {		    /************************************/		    /* The selected TTL output is wrong */		    /************************************/			DPRINTK("The selected TTL output is wrong\n");			    i_ReturnValue = -4;		    }		 }	      else		 {		 /***************************/		 /* TTL I/O not initialised */		 /***************************/		 DPRINTK("TTL I/O not initialised\n");			 i_ReturnValue = -5;		 }	      }	   else	      {	      /**************************************/	      /* The module is not a TTL I/O module */	      /**************************************/	      DPRINTK("The module is not a TTL I/O module\n");			      i_ReturnValue = -3;	      }	   }	else	   {	   /***********************/	   /* Module number error */	   /***********************/	   DPRINTK("Module number error\n");		   i_ReturnValue = -2;	   }	return (i_ReturnValue);	}

⌨️ 快捷键说明

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