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

📄 hwdrv_apci3200.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
  /* Reset the configuration */                                                             /**************************/    //BEGIN JK 06.07.04: Management of sevrals boards                  //outl(0 , devpriv->iobase+i_Offset + 0x0);    outl(0 , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 0x0);    //END JK 06.07.04: Management of sevrals boards                    //BEGIN JK 06.07.04: Management of sevrals boards                            //while (((inl(devpriv->iobase+i_Offset+12)>>19) & 1) != 1);  while (((inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset+12)>>19) & 1) != 1);  //END JK 06.07.04: Management of sevrals boards                                              /***************************/  /* Write the configuration */  /***************************/  //BEGIN JK 06.07.04: Management of sevrals boards                            //outl(ul_Config , devpriv->iobase+i_Offset + 0x0);  outl(ul_Config , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 0x0);  //END JK 06.07.04: Management of sevrals boards                            /***************************/  /*Reset the calibration bit*/  /***************************/  //BEGIN JK 06.07.04: Management of sevrals boards   //ul_Temp = inl(devpriv->iobase+i_Offset + 12);  ul_Temp = inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 12);  //END JK 06.07.04: Management of sevrals boards     //BEGIN JK 06.07.04: Management of sevrals boards   //while (((inl(devpriv->iobase+i_Offset+12)>>19) & 1) != 1);  while (((inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset+12)>>19) & 1) != 1);  //END JK 06.07.04: Management of sevrals boards     //BEGIN JK 06.07.04: Management of sevrals boards    //outl((ul_Temp & 0xFFF9FFFF) , devpriv->iobase+.i_Offset + 12);  outl((ul_Temp & 0xFFF9FFFF) , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 12);  //END JK 06.07.04: Management of sevrals boards   if(data[9]==1)    {            devpriv->tsk_Current=current;      //BEGIN JK 06.07.04: Management of sevrals boards      //i_InterruptFlag=1;      s_BoardInfos [dev->minor].i_InterruptFlag=1;      //END JK 06.07.04: Management of sevrals boards    }// if(data[9]==1)  else    {      //BEGIN JK 06.07.04: Management of sevrals boards      //i_InterruptFlag=0;      s_BoardInfos [dev->minor].i_InterruptFlag=0;      //END JK 06.07.04: Management of sevrals boards    }//else  if(data[9]==1)    //BEGIN JK 06.07.04: Management of sevrals boards  //i_Initialised=1;  s_BoardInfos [dev->minor].i_Initialised=1;  //END JK 06.07.04: Management of sevrals boards    //BEGIN JK 06.07.04: Management of sevrals boards  //if(i_ScanType==1)  if(s_BoardInfos [dev->minor].i_ScanType==1)    //END JK 06.07.04: Management of sevrals boards    {      //BEGIN JK 06.07.04: Management of sevrals boards      //i_Sum=i_Sum+1;      s_BoardInfos [dev->minor].i_Sum=s_BoardInfos [dev->minor].i_Sum+1;      //END JK 06.07.04: Management of sevrals boards            insn->unused[0]=0;       i_APCI3200_ReadAnalogInput(dev,s,insn,&ui_Dummy);    }            return insn->n;} /*  +----------------------------------------------------------------------------+  | Function   Name   : int i_APCI3200_ReadAnalogInput                         |  |			          (comedi_device *dev,comedi_subdevice *s,       |   |                     comedi_insn *insn,lsampl_t *data)                      |  +----------------------------------------------------------------------------+  | Task              : Read  value  of the selected channel			         |  +----------------------------------------------------------------------------+  | Input Parameters  : comedi_device *dev      : Driver handle                |  |                     UINT ui_NoOfChannels    : No Of Channels To read       |  |                     UINT *data              : Data Pointer to read status  |  +----------------------------------------------------------------------------+  | Output Parameters :	--													 |  |				data[0]  : Digital Value Of Input             |  |				data[1]  : Calibration Offset Value           |  |				data[2]  : Calibration Gain Value            |				data[3]  : CJC value    |				data[4]  : CJC offset value  |				data[5]  : CJC gain value   | Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values   |				data[6] : CJC current source from eeprom  |				data[7] : Channel current source from eeprom  |				data[8] : Channle gain factor from eeprom  | End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values   +----------------------------------------------------------------------------+  | Return Value      : TRUE  : No error occur                                 |  |		            : FALSE : Error occur. Return the error          |  |			                                                         |  +----------------------------------------------------------------------------+*/INT i_APCI3200_ReadAnalogInput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) {   UINT ui_DummyValue=0;  int i_ConvertCJCCalibration;  int i=0;       //BEGIN JK 06.07.04: Management of sevrals boards  //if(i_Initialised==0)  if(s_BoardInfos [dev->minor].i_Initialised==0)    //END JK 06.07.04: Management of sevrals boards         {      i_APCI3200_Reset(dev);      return -EINVAL;    }//if(i_Initialised==0);        #ifdef PRINT_INFO               printk ("\n insn->unused[0] = %i", insn->unused[0]);#endif        switch(insn->unused[0])    {    case 0:                      i_APCI3200_Read1AnalogInputChannel(dev,s,insn,&ui_DummyValue);      //BEGIN JK 06.07.04: Management of sevrals boards      //ui_InterruptChannelValue[i_Count+0]=ui_DummyValue;       s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+0]=ui_DummyValue;             //END JK 06.07.04: Management of sevrals boards                //Begin JK 25.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values	          i_APCI3200_GetChannelCalibrationValue (dev,s_BoardInfos [dev->minor].ui_Channel_num, 					     &s_BoardInfos [dev->minor].ui_InterruptChannelValue [s_BoardInfos [dev->minor].i_Count+6], 					     &s_BoardInfos [dev->minor].ui_InterruptChannelValue [s_BoardInfos [dev->minor].i_Count+7], 					     &s_BoardInfos [dev->minor].ui_InterruptChannelValue [s_BoardInfos [dev->minor].i_Count+8]);						 #ifdef PRINT_INFO 						       printk ("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+6] = %lu", s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+6]);						       printk ("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+7] = %lu", s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+7]);						       printk ("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+8] = %lu", s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+8]);						 	#endif              //End JK 25.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values                         //BEGIN JK 06.07.04: Management of sevrals boards      //if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE) && (i_CJCAvailable==1))      if((s_BoardInfos [dev->minor].i_ADDIDATAType==2) && (s_BoardInfos [dev->minor].i_InterruptFlag == FALSE) && (s_BoardInfos [dev->minor].i_CJCAvailable==1))	//END JK 06.07.04: Management of sevrals boards             	{	  i_APCI3200_ReadCJCValue(dev,&ui_DummyValue);	  //BEGIN JK 06.07.04: Management of sevrals boards	  //ui_InterruptChannelValue[i_Count + 3]=ui_DummyValue; 	  s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 3]=ui_DummyValue; 	  //END JK 06.07.04: Management of sevrals boards   	  	}//if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE))      else	{	  //BEGIN JK 06.07.04: Management of sevrals boards	  //ui_InterruptChannelValue[i_Count + 3]=0;	  s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 3]=0;	  //END JK 06.07.04: Management of sevrals boards	}//elseif((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE) && (i_CJCAvailable==1))              //BEGIN JK 06.07.04: Management of sevrals boards      //if (( i_AutoCalibration == FALSE) && (i_InterruptFlag == FALSE))          if ((s_BoardInfos [dev->minor].i_AutoCalibration == FALSE) && (s_BoardInfos [dev->minor].i_InterruptFlag == FALSE))    	//END JK 06.07.04: Management of sevrals boards	{  	  i_APCI3200_ReadCalibrationOffsetValue(dev,&ui_DummyValue);	  //BEGIN JK 06.07.04: Management of sevrals boards	  //ui_InterruptChannelValue[i_Count + 1]=ui_DummyValue;	  s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 1]=ui_DummyValue;	  //END JK 06.07.04: Management of sevrals boards  	  i_APCI3200_ReadCalibrationGainValue(dev,&ui_DummyValue);            //BEGIN JK 06.07.04: Management of sevrals boards	  //ui_InterruptChannelValue[i_Count + 2]=ui_DummyValue; 	  s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 2]=ui_DummyValue; 	  //END JK 06.07.04: Management of sevrals boards	}//if (( i_AutoCalibration == FALSE) && (i_InterruptFlag == FALSE))             //BEGIN JK 06.07.04: Management of sevrals boards      //if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE)&& (i_CJCAvailable==1))      if((s_BoardInfos [dev->minor].i_ADDIDATAType==2) && (s_BoardInfos [dev->minor].i_InterruptFlag == FALSE)&& (s_BoardInfos [dev->minor].i_CJCAvailable==1))	//END JK 06.07.04: Management of sevrals boards	{	  /**********************************************************/	  /*Test if the Calibration channel must be read for the CJC*/	  /**********************************************************/	  /**********************************/	  /*Test if the polarity is the same*/	  /**********************************/                   //BEGIN JK 06.07.04: Management of sevrals boards	                              	  //if(i_CJCPolarity!=i_ADDIDATAPolarity)	  if(s_BoardInfos [dev->minor].i_CJCPolarity!=s_BoardInfos [dev->minor].i_ADDIDATAPolarity)	    //END JK 06.07.04: Management of sevrals boards	                              	    {	      i_ConvertCJCCalibration=1;	    }//if(i_CJCPolarity!=i_ADDIDATAPolarity)	  else 	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	                              	      //if(i_CJCGain==i_ADDIDATAGain) 	      if(s_BoardInfos [dev->minor].i_CJCGain==s_BoardInfos [dev->minor].i_ADDIDATAGain) 		//END JK 06.07.04: Management of sevrals boards	                              		{		  i_ConvertCJCCalibration=0;		}//if(i_CJCGain==i_ADDIDATAGain) 	      else		{		  i_ConvertCJCCalibration=1;		}//elseif(i_CJCGain==i_ADDIDATAGain)  	    }//elseif(i_CJCPolarity!=i_ADDIDATAPolarity)           	  if(i_ConvertCJCCalibration==1)	    {	      i_APCI3200_ReadCJCCalOffset(dev,&ui_DummyValue);	      //BEGIN JK 06.07.04: Management of sevrals boards	                              	      //ui_InterruptChannelValue[i_Count+4]=ui_DummyValue;	      s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+4]=ui_DummyValue;              //END JK 06.07.04: Management of sevrals boards	                              	      i_APCI3200_ReadCJCCalGain(dev,&ui_DummyValue);	                    //BEGIN JK 06.07.04: Management of sevrals boards 	      //ui_InterruptChannelValue[i_Count+5]=ui_DummyValue;	      s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+5]=ui_DummyValue;	      //END JK 06.07.04: Management of sevrals boards 	    }//if(i_ConvertCJCCalibration==1)	  else	    {	      //BEGIN JK 06.07.04: Management of sevrals boards 	      //ui_InterruptChannelValue[i_Count+4]=0;	      //ui_InterruptChannelValue[i_Count+5]=0;	      	      s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+4]=0;	      s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+5]=0;	      //END JK 06.07.04: Management of sevrals boards 	    }//elseif(i_ConvertCJCCalibration==1) 	}//if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE))             //BEGIN JK 06.07.04: Management of sevrals boards       //if(i_ScanType!=1)      if(s_BoardInfos [dev->minor].i_ScanType!=1)	{	  //i_Count=0;	  s_BoardInfos [dev->minor].i_Count=0;	}//if(i_ScanType!=1)      else  	{	  //i_Count=i_Count +6;	  //Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values   	  //s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count +6;	  s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count +9;	  //End JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values   	}//else if(i_ScanType!=1)        //if((i_ScanType==1) &&(i_InterruptFlag==1))      if((s_BoardInfos [dev->minor].i_ScanType==1) &&(s_BoardInfos [dev->minor].i_InterruptFlag==1))	{	  //i_Count=i_Count-6;	  //Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values	  //s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count-6;	  s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count-9;	  //End JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values	}       //if(i_ScanType==0)      if(s_BoardInfos [dev->minor].i_ScanType==0)	{           	  /*	    data[0]= ui_InterruptChannelValue[0];	    data[1]= ui_InterruptChannelValue[1];	    data[2]= ui_InterruptChannelValue[2];  	    data[3]= ui_InterruptChannelValue[3];	    data[4]= ui_InterruptChannelValue[4];	    data[5]= ui_InterruptChannelValue[5];  	  */          #ifdef PRINT_INFO 	  	  printk("\n data[0]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[0];");#endif	  	  data[0]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[0];	  data[1]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[1];	  data[2]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[2];  	  data[3]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[3];	  data[4]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[4];	  data[5]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[5];  	  	  //Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values	  //printk("\n 0 - i_APCI3200_GetChannelCalibrationValue data [6] = %lu, data [7] = %lu, data [8] = %lu", data [6], data [7], data [8]);	  i_APCI3200_GetChannelCalibrationValue (dev, s_BoardInfos [dev->minor].ui_Channel_num, &data [6], &data [7], &data [8]);	  //End JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values		  	}         break;    case 1 :            for(i=0;i<insn->n;i++)	{ 	  //data[i]=ui_InterruptChannelValue[i]; 	  data[i]=s_BoardInfos [dev->minor].ui_InterruptChannelValue[i]; 	}	      //i_Count=0;      //i_Sum=0;      //if(i_ScanType==1)      s_BoardInfos [dev->minor].i_Count=0;      s_BoardInfos [dev->minor].i_Sum=0;      if(s_BoardInfos [dev->minor].i_ScanType==1)	{           	  //i_Initialised=0; 	  //i_InterruptFlag=0; 	  s_BoardInfos [dev->minor].i_Initialised=0; 	  s_BoardInfos [dev->minor].i

⌨️ 快捷键说明

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