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

📄 addi_eeprom.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
      v_EepromClock76(dw_Address, dw_RegisterValue);      /**********************/      /* Get the result bit */      /**********************/     dw_RegisterValueRead = inl(dw_Address);      /***************/      /* Wait 0.1 ms */      /***************/     udelay(100);           /***************************************/      /* Get bit value and shift into result */      /***************************************/      if (dw_RegisterValueRead & 0x8)	 {	 /**********/	 /* Read 1 */	 /**********/	 *pw_Value = (*pw_Value << 1) | 0x1;	 }      else	 {	 /**********/	 /* Read 0 */	 /**********/	 *pw_Value = (*pw_Value << 1);	 	}      }   /*************************/   /* Clear all EEPROM bits */   /*************************/   dw_RegisterValue = 0x0;   /********************************************************************/   /* Toggle EEPROM's Chip select to get it out of Shift Register Mode */   /********************************************************************/  outl(dw_RegisterValue,dw_Address);        /***************/   /* Wait 0.1 ms */   /***************/   udelay(100);       }	/******************************************/ 	/*	EEPROM HEADER READ FUNCTIONS	  */	/******************************************//*+----------------------------------------------------------------------------+| Function Name  : INT i_EepromReadMainHeader(WORD w_PCIBoardEepromAddress,  ||				PCHAR 	pc_PCIChipInformation,comedi_device *dev)    |+----------------------------------------------------------------------------+| Task              : Read from eeprom Main Header                           |+----------------------------------------------------------------------------+| Input Parameters  : WORD w_PCIBoardEepromAddress : PCI eeprom address      ||																	 |	|		      PCHAR pc_PCIChipInformation  : PCI Chip Type.          ||																	 ||			  comedi_device *dev		   : comedi device structure ||											 pointer				 |+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : 0							                             |+----------------------------------------------------------------------------+*/INT i_EepromReadMainHeader(WORD	w_PCIBoardEepromAddress,PCHAR 	pc_PCIChipInformation,comedi_device *dev){	WORD w_Temp,i,w_Count=0;        UINT ui_Temp;	str_MainHeader  s_MainHeader;	str_DigitalInputHeader	s_DigitalInputHeader;	str_DigitalOutputHeader s_DigitalOutputHeader;	//str_TimerMainHeader     s_TimerMainHeader,s_WatchdogMainHeader;	str_AnalogOutputHeader   s_AnalogOutputHeader;	str_AnalogInputHeader   s_AnalogInputHeader;        // Read size	s_MainHeader.w_HeaderSize = w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+8);                        // Read nbr of functionality	w_Temp = w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+10);        s_MainHeader.b_Nfunctions =(BYTE)w_Temp & 0x00FF;       // Read functionality details	for(i=0;i<s_MainHeader.b_Nfunctions;i++)	{         // Read Type         w_Temp = w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+12+w_Count);         s_MainHeader.s_Functions[i].b_Type	=(BYTE) w_Temp & 0x3F;         w_Count=w_Count+2;	//Read Address	 s_MainHeader.s_Functions[i].w_Address= w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+12+w_Count);    	 w_Count=w_Count+2;	}        // Display main header info        	for(i=0;i<s_MainHeader.b_Nfunctions;i++)	{	          switch(s_MainHeader.s_Functions[i].b_Type)	  {	    case EEPROM_DIGITALINPUT:               		 i_EepromReadDigitalInputHeader(w_PCIBoardEepromAddress,pc_PCIChipInformation,		 s_MainHeader.s_Functions[i].w_Address,&s_DigitalInputHeader);                   this_board->i_NbrDiChannel=s_DigitalInputHeader.w_Nchannel;		 break;	    case EEPROM_DIGITALOUTPUT:                 		 i_EepromReadDigitalOutputHeader(w_PCIBoardEepromAddress,pc_PCIChipInformation,		 s_MainHeader.s_Functions[i].w_Address,&s_DigitalOutputHeader);		                  this_board->i_NbrDoChannel=s_DigitalOutputHeader.w_Nchannel;                 ui_Temp=0xffffffff;                 this_board->i_DoMaxdata= ui_Temp >>(32 - this_board->i_NbrDoChannel);		 break;	    case EEPROM_ANALOGINPUT:		 i_EepromReadAnlogInputHeader(w_PCIBoardEepromAddress,pc_PCIChipInformation,		 s_MainHeader.s_Functions[i].w_Address,&s_AnalogInputHeader); 		 if (!(strcmp(this_board->pc_DriverName, "apci3200")))  		    this_board->i_NbrAiChannel=s_AnalogInputHeader.w_Nchannel * 4;		 else		    this_board->i_NbrAiChannel=s_AnalogInputHeader.w_Nchannel;                 this_board->i_Dma=s_AnalogInputHeader.b_HasDma;                 this_board->ui_MinAcquisitiontimeNs=(UINT)s_AnalogInputHeader.w_MinConvertTiming * 1000;                 this_board->ui_MinDelaytimeNs      =(UINT)s_AnalogInputHeader.w_MinDelayTiming * 1000;                   ui_Temp=0xffff;                 this_board->i_AiMaxdata = ui_Temp >> (16 - s_AnalogInputHeader.b_Resolution);		 break;            case EEPROM_ANALOGOUTPUT: 				      		 i_EepromReadAnlogOutputHeader(w_PCIBoardEepromAddress,pc_PCIChipInformation,		 s_MainHeader.s_Functions[i].w_Address,&s_AnalogOutputHeader);                                  this_board->i_NbrAoChannel=s_AnalogOutputHeader.w_Nchannel;                 ui_Temp=0xffff;                 this_board->i_AoMaxdata= ui_Temp >>(16 - s_AnalogOutputHeader.b_Resolution);		 break;	    case EEPROM_TIMER:		 this_board->i_Timer=1;//Timer subdevice present 							 break;	    case EEPROM_WATCHDOG:	  		 this_board->i_Timer=1; //Timer subdevice present                  break;            case EEPROM_TIMER_WATCHDOG_COUNTER:	  		 this_board->i_Timer=1; //Timer subdevice present					  } 	}	return 0;}/*+----------------------------------------------------------------------------+| Function Name  : INT i_EepromReadDigitalInputHeader(WORD 					 ||			w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,	 ||			WORD w_Address,str_DigitalInputHeader *s_Header)		 ||																	 |+----------------------------------------------------------------------------+| Task              : Read Digital Input Header                              |+----------------------------------------------------------------------------+| Input Parameters  : WORD w_PCIBoardEepromAddress : PCI eeprom address      ||																	 ||		      PCHAR pc_PCIChipInformation  : PCI Chip Type.          ||																	 ||			 str_DigitalInputHeader *s_Header: Digita Input Header   ||												   Pointer			 |+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : 0							                             |+----------------------------------------------------------------------------+*/INT i_EepromReadDigitalInputHeader(WORD w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,WORD w_Address,str_DigitalInputHeader *s_Header){  WORD w_Temp; // read nbr of channels s_Header->w_Nchannel=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+6); // interruptible or not w_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+8); s_Header->b_Interruptible=(BYTE) (w_Temp>>7)& 0x01;// How many interruptible logic s_Header->w_NinterruptLogic=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+10); return 0;}/*+----------------------------------------------------------------------------+| Function Name  : INT i_EepromReadDigitalOutputHeader(WORD 				 ||			w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,	 ||			WORD w_Address,str_DigitalOutputHeader *s_Header)	     ||																	 |+----------------------------------------------------------------------------+| Task              : Read Digital Output Header                             |+----------------------------------------------------------------------------+| Input Parameters  : WORD w_PCIBoardEepromAddress : PCI eeprom address      ||																	 ||		      PCHAR pc_PCIChipInformation  : PCI Chip Type.          ||																	 ||			 str_DigitalOutputHeader *s_Header: Digital Output Header||											   Pointer				 |+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : 0							                             |+----------------------------------------------------------------------------+*/INT i_EepromReadDigitalOutputHeader(WORD w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,WORD w_Address,str_DigitalOutputHeader *s_Header){// Read Nbr channels s_Header->w_Nchannel=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+6);return 0;}/*+----------------------------------------------------------------------------+| Function Name  : INT i_EepromReadTimerHeader(WORD w_PCIBoardEepromAddress, ||			PCHAR pc_PCIChipInformation,WORD w_Address,				 ||			str_TimerMainHeader *s_Header)							 | +----------------------------------------------------------------------------+| Task              : Read Timer or Watchdog Header                          |+----------------------------------------------------------------------------+| Input Parameters  : WORD w_PCIBoardEepromAddress : PCI eeprom address      ||																	 |	|		      PCHAR pc_PCIChipInformation  : PCI Chip Type.          ||																	 |	|			 str_TimerMainHeader *s_Header: Timer Header			 ||											   Pointer				 |+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : 0							                             |+----------------------------------------------------------------------------+*/INT i_EepromReadTimerHeader(WORD w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,WORD w_Address,str_TimerMainHeader *s_Header){WORD i,w_Size=0,w_Temp;  //Read No of Timers_Header->w_Ntimer=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+6);//Read header sizefor(i=0;i<s_Header->w_Ntimer;i++){  s_Header->s_TimerDetails[i].w_HeaderSize=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+8+w_Size+0);  w_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+8+w_Size+2) ;  //Read Resolution  s_Header->s_TimerDetails[i].b_Resolution=(BYTE)(w_Temp>>10)&0x3F;  //Read Mode  s_Header->s_TimerDetails[i].b_Mode		=(BYTE) (w_Temp>>4)&0x3F;  w_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+8+w_Size+4) ;  //Read MinTiming  s_Header->s_TimerDetails[i].w_MinTiming	=(w_Temp>>6)&0x3FF;   //Read Timebase  s_Header->s_TimerDetails[i].b_TimeBase	=(BYTE)(w_Temp)&0x3F;   w_Size += s_Header->s_TimerDetails[i].w_HeaderSize;}    return 0;}/*+----------------------------------------------------------------------------+| Function Name  : INT i_EepromReadAnlogOutputHeader(WORD 					 ||			w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,	 ||			WORD w_Address,str_AnalogOutputHeader *s_Header)         | +----------------------------------------------------------------------------+| Task              : Read Nalog Output  Header                              |+----------------------------------------------------------------------------+| Input Parameters  : WORD w_PCIBoardEepromAddress : PCI eeprom address      ||																	 |	|		      PCHAR pc_PCIChipInformation  : PCI Chip Type.          ||																	 ||			 str_AnalogOutputHeader *s_Header:Anlog Output Header    ||											   Pointer				 |+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : 0							                             |+----------------------------------------------------------------------------+*/INT i_EepromReadAnlogOutputHeader(WORD w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,WORD w_Address,str_AnalogOutputHeader *s_Header){  WORD w_Temp;  // No of channels for 1st hard component  w_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+10);  s_Header->w_Nchannel=(w_Temp>>4)& 0x03FF;  // Resolution for 1st hard component  w_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+16);  s_Header->b_Resolution=(BYTE)(w_Temp>>8) & 0xFF;  return 0;}/*+----------------------------------------------------------------------------+| Function Name  : INT i_EepromReadAnlogInputHeader(WORD 					 ||			w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,     ||			WORD w_Address,str_AnalogInputHeader *s_Header)          |+----------------------------------------------------------------------------+| Task              : Read Nalog Output  Header                              |+----------------------------------------------------------------------------+| Input Parameters  : WORD w_PCIBoardEepromAddress : PCI eeprom address      ||																	 ||		      PCHAR pc_PCIChipInformation  : PCI Chip Type.          ||																	 ||			 str_AnalogInputHeader *s_Header:Anlog Input Header      |  |											   Pointer				 |+----------------------------------------------------------------------------+| Output Parameters : -                                                      |+----------------------------------------------------------------------------+| Return Value      : 0							                             |+----------------------------------------------------------------------------+*/// Reads only for ONE  hardware componentINT i_EepromReadAnlogInputHeader(WORD w_PCIBoardEepromAddress,PCHAR pc_PCIChipInformation,WORD w_Address,str_AnalogInputHeader *s_Header){  WORD w_Temp,w_Offset;  w_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+10);  s_Header->w_Nchannel=(w_Temp>>4)& 0x03FF;  s_Header->w_MinConvertTiming=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+16);s_Header->w_MinDelayTiming=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+30);w_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+20);s_Header->b_HasDma=(w_Temp>>13) & 0x01; // whether dma present or notw_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+72);// reading Yw_Temp=w_Temp & 0x00FF;if(w_Temp)//Y>0{w_Offset=74+(2*w_Temp)+(10*(1+(w_Temp/16)));// offset of first analog input single headerw_Offset= w_Offset+2; // resolution}else//Y=0{ w_Offset=74; w_Offset= w_Offset+2; // resolution}// read Resolutionw_Temp=w_EepromReadWord(w_PCIBoardEepromAddress,pc_PCIChipInformation,0x100+w_Address+w_Offset);s_Header->b_Resolution=w_Temp & 0x001F;// last 5 bitsreturn 0;}

⌨️ 快捷键说明

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