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

📄 hwdrv_apci1500.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
			       if (i_PatternTransitionCount > 1)			          {			          /****************************************/			          /* Transition error on an AND logic     */			          /****************************************/                              printk("\n Transition error on an AND logic\n");                              return -EINVAL;                              }// if (i_PatternTransitionCount > 1)			       }// if (data[1]== APCI1500_AND)			    			    /*****************************************************************/			    /* Selects the APCI1500_RW_MASTER_CONFIGURATION_CONTROL register */			    /*****************************************************************/                        outb(APCI1500_RW_MASTER_CONFIGURATION_CONTROL,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          /******************/			    /* Disable Port A */			    /******************/                        outb(0xF0,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          /**********************************************/			    /* Selects the polarity register of port 1    */			    /**********************************************/                         outb(APCI1500_RW_PORT_A_PATTERN_POLARITY,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                         outb(i_PatternPolarity,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          /*********************************************/			    /* Selects the pattern mask register of      */			    /* port 1                                    */			    /*********************************************/                        outb(APCI1500_RW_PORT_A_PATTERN_MASK,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);	                outb(i_PatternMask,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);	                           /********************************************/			    /* Selects the pattern transition register  */			    /* of port 1                                */			    /********************************************/                        outb(APCI1500_RW_PORT_A_PATTERN_TRANSITION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);	                          outb(i_PatternTransition,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                      /******************************************/			  /* Selects the mode specification mask    */			  /* register of port 1                     */			  /******************************************/                        outb(APCI1500_RW_PORT_A_SPECIFICATION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          i_RegValue=inb(devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                                              /******************************************/			  /* Selects the mode specification mask    */			  /* register of port 1                     */			  /******************************************/                        outb(APCI1500_RW_PORT_A_SPECIFICATION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /**********************/			  /* Port A new mode    */			  /**********************/                                                 i_RegValue=(i_RegValue & 0xF9) | data[1]|0x9;                        outb(i_RegValue,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                                                i_Event1Status=1;                                             /*****************************************************************/			  /* Selects the APCI1500_RW_MASTER_CONFIGURATION_CONTROL register */			  /*****************************************************************/                                            outb(APCI1500_RW_MASTER_CONFIGURATION_CONTROL,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /*****************/			  /* Enable Port A */			  /*****************/                        outb(0xF4,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                        }// if(data[1]==APCI1500_AND||data[1]==APCI1500_OR||data[1]==APCI1500_OR_PRIORITY)                   else	              {                       printk("\nThe choice for interrupt logic does not exist\n");                       return -EINVAL;                       }// else }// if(data[1]==APCI1500_AND||data[1]==APCI1500_OR||data[1]==APCI1500_OR_PRIORITY)                    }//   if (data[0]== 1)               		 /************************************/		 /* Test if event setting for port 2 */		 /************************************/		 if (data[0] == 2)		    {		    /************************/		    /* Test the event logic */		    /************************/		     if (data[1] == APCI1500_OR)		        {                       /*****************************************************************/		       /* Selects the APCI1500_RW_MASTER_CONFIGURATION_CONTROL register */		       /*****************************************************************/                            outb(APCI1500_RW_MASTER_CONFIGURATION_CONTROL,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                        /******************/		       /* Disable Port B */		       /******************/                          outb(0x74,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                        /****************************************/		       /* Selects the mode specification mask  */		       /* register of port B                   */		       /****************************************/                          outb( APCI1500_RW_PORT_B_SPECIFICATION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                         i_RegValue=inb(devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          		       /******************************************/		       /* Selects the mode specification mask    */		       /* register of port B                     */		       /******************************************/                          outb(APCI1500_RW_PORT_B_SPECIFICATION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          i_RegValue=i_RegValue & 0xF9;                          outb(i_RegValue,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                        		       /**********************************/		       /* Selects error channels 1 and 2 */		       /**********************************/                      		       i_PatternMask       = (i_PatternMask       | 0xC0);		       i_PatternPolarity   = (i_PatternPolarity   | 0xC0);		       i_PatternTransition = (i_PatternTransition | 0xC0);                       /**********************************************/		       /* Selects the polarity register of port 2    */		       /**********************************************/                          outb(APCI1500_RW_PORT_B_PATTERN_POLARITY,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          outb( i_PatternPolarity,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /**********************************************/		       /* Selects the pattern transition register    */		       /* of port 2                                  */		       /**********************************************/                           outb(APCI1500_RW_PORT_B_PATTERN_TRANSITION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          outb(i_PatternTransition,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /**********************************************/		       /* Selects the pattern Mask register    */		       /* of port 2                                  */		       /**********************************************/                         outb(APCI1500_RW_PORT_B_PATTERN_MASK,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                         outb(i_PatternMask,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                        /******************************************/		       /* Selects the mode specification mask    */		       /* register of port 2                     */		       /******************************************/                          outb(APCI1500_RW_PORT_B_SPECIFICATION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          i_RegValue=inb(devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                         /******************************************/		       /* Selects the mode specification mask    */		       /* register of port 2                     */		       /******************************************/                          outb( APCI1500_RW_PORT_B_SPECIFICATION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          i_RegValue=(i_RegValue & 0xF9) | 4;                           outb(i_RegValue,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                                                i_Event2Status=1;                       /*****************************************************************/		       /* Selects the APCI1500_RW_MASTER_CONFIGURATION_CONTROL register */		       /*****************************************************************/                                              outb(APCI1500_RW_MASTER_CONFIGURATION_CONTROL,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /*****************/		       /* Enable Port B */		       /*****************/                          outb(0xF4,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          }//  if (data[1] == APCI1500_OR)                      else                          {                          printk("\nThe choice for interrupt logic does not exist\n");                          return -EINVAL;                          }//elseif (data[1] == APCI1500_OR)                       }//if(data[0]==2)    return insn->n;}                   /*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI1500_StartStopInputEvent                     ||			  (comedi_device *dev,comedi_subdevice *s,               ||                      comedi_insn *insn,lsampl_t *data)                     |+----------------------------------------------------------------------------+| Task              :  Allows or disallows a port event                      |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev      : Driver handle                ||		              UINT ui_Channel : Channel number to read       ||                     lsampl_t *data          : Data Pointer to read status  |                      data[0]                 :0 Start input event                                                1 Stop input event                      data[1]                 :No of port (1 or 2) +----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI1500_StartStopInputEvent(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){int i_Event1InterruptStatus=0,i_Event2InterruptStatus=0,i_RegValue;switch(data[0])   {   case START :               /*************************/	      /* Tests the port number */	      /*************************/   	      if (data[1] == 1 || data[1] == 2)	         {	          /***************************/	          /* Test if port 1 selected */	          /***************************/	         if ( data[1] == 1)		    {		    /*****************************/		    /* Test if event initialised */		    /*****************************/                    if(i_Event1Status==1)                       {                       /*****************************************************************/		       /* Selects the APCI1500_RW_MASTER_CONFIGURATION_CONTROL register */		       /*****************************************************************/                       outb(APCI1500_RW_MASTER_CONFIGURATION_CONTROL,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /******************/		       /* Disable Port A */		       /******************/                       outb(0xF0,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);		       /***************************************************/		       /* Selects the command and status register of      */		       /* port 1                                          */		       /***************************************************/		        outb(APCI1500_RW_PORT_A_COMMAND_AND_STATUS,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /*************************************/		       /* Allows the pattern interrupt      */		       /*************************************/                        outb(0xC0,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                          /*****************************************************************/		       /* Selects the APCI1500_RW_MASTER_CONFIGURATION_CONTROL register */		       /*****************************************************************/                        outb(APCI1500_RW_MASTER_CONFIGURATION_CONTROL,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                       /*****************/		       /* Enable Port A */		       /*****************/                         outb(0xF4,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);                         i_Event1InterruptStatus=1;                         outb(APCI1500_RW_PORT_A_SPECIFICATION,devpriv->iobase+APCI1500_Z8536_CONTROL_REGISTER);  

⌨️ 快捷键说明

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