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

📄 hwdrv_apci035.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
         {         //Stop The Watchdog         ui_Command=0;         //ui_Command = inl(devpriv->iobase+((i_WatchdogNbr-1)*32)+12);          //ui_Command = ui_Command & 0xFFFFF9FEUL;         outl(ui_Command,devpriv->iobase+((i_WatchdogNbr-1)*32)+12);            } //  if (data[1]==0)      if(data[0]==3)//stop all Watchdogs        {         ui_Command=0;          for(i_Count=1;i_Count<=4;i_Count++)            {            if(devpriv->b_TimerSelectMode==ADDIDATA_WATCHDOG)              {               ui_Command=0x2UL;              }            else              {              ui_Command = 0x10UL;               }                i_WatchdogNbr=i_Count;               outl(ui_Command,devpriv->iobase+((i_WatchdogNbr-1)*32) + 0);             }         }       if(data[0]==4)//start all Watchdogs        {         ui_Command = 0;         for(i_Count=1;i_Count<=4;i_Count++)            {            if(devpriv->b_TimerSelectMode==ADDIDATA_WATCHDOG)              {               ui_Command = 0x1UL;              }            else               {               ui_Command = 0x8UL;               }                i_WatchdogNbr=i_Count;	       outl(ui_Command,devpriv->iobase+((i_WatchdogNbr-1)*32) + 0);                          }           }      if(data[0]==5)//trigger all Watchdogs        {         ui_Command =0;         for(i_Count=1;i_Count<=4;i_Count++)            {            if(devpriv->b_TimerSelectMode==ADDIDATA_WATCHDOG)               {               ui_Command=0x4UL;               }            else              {              ui_Command = 0x20UL;               }              i_WatchdogNbr=i_Count;	      outl(ui_Command,devpriv->iobase+((i_WatchdogNbr-1)*32) + 0);           }         i_Temp=1;         }   return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI035_ReadTimerWatchdog                        ||			  (comedi_device *dev,comedi_subdevice *s,               | |                      comedi_insn *insn,lsampl_t *data)                     |+----------------------------------------------------------------------------+| Task              : Read The Selected Timer , Counter or Watchdog          |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev : Driver handle                     ||                     UINT *data         : Data Pointer contains             ||                                          configuration parameters as below ||                                                                            | |     																	 |+----------------------------------------------------------------------------+| Output Parameters :	data[0]            : software trigger status												              data[1]            : hardware trigger status  |     				data[2]            : Software clear status	                        data[3]            : Overflow status												                      data[4]            : Timer actual value                          +----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/INT i_APCI035_ReadTimerWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){UINT ui_Status = 0;   // Status register  i_WatchdogNbr=insn->unused[0];               /******************/              /* Get the status */              /******************/        ui_Status =inl(devpriv->iobase+((i_WatchdogNbr-1)*32) + 16);      /***********************************/      /* Get the software trigger status */      /***********************************/      data[0] = ((ui_Status >> 1) & 1);       /***********************************/      /* Get the hardware trigger status */      /***********************************/      data[1] =  ((ui_Status >> 2) & 1);       /*********************************/      /* Get the software clear status */      /*********************************/       data[2] = ((ui_Status >> 3) & 1);      /***************************/      /* Get the overflow status */      /***************************/      data[3] = ((ui_Status >> 0) & 1);    if  (devpriv->b_TimerSelectMode==ADDIDATA_TIMER)       {      data[4]=inl(devpriv->iobase+((i_WatchdogNbr-1)*32) + 0);            } //  if  (devpriv->b_TimerSelectMode==ADDIDATA_TIMER)            return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : INT i_APCI035_ConfigAnalogInput                        ||			  (comedi_device *dev,comedi_subdevice *s,               | |                      comedi_insn *insn,lsampl_t *data)                     |+----------------------------------------------------------------------------+| Task              : Configures The Analog Input Subdevice                  |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev      : Driver handle                ||                     comedi_subdevice *s     : Subdevice Pointer            |  |                     comedi_insn *insn       : Insn Structure Pointer       |  |                     lsampl_t *data          : Data Pointer contains        ||                                          configuration parameters as below ||                     data[0]                  : Warning delay value                                                              |                                                                            | 	+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/INT i_APCI035_ConfigAnalogInput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) {devpriv->tsk_Current=current;outl(0x200 | 0, devpriv->iobase+128 + 0x4);outl(0, devpriv->iobase+128 + 0);/********************************//* Initialise the warning value *//********************************/outl(0x300 | 0, devpriv->iobase+128 + 0x4);outl((data[0] << 8), devpriv->iobase+128 + 0);outl(0x200000UL , devpriv->iobase+128 + 12);return insn->n;} /*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI035_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              ||			                                                         |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/INT i_APCI035_ReadAnalogInput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { UINT ui_CommandRegister=0;/******************//*  Set the start *//******************/ui_CommandRegister =0x80000;   /******************************/ /* Write the command register */ /******************************/outl(ui_CommandRegister, devpriv->iobase+128 + 8);              /***************************************//* Read the digital value of the input *//***************************************/data[0] = inl (devpriv->iobase+ 128 + 28);                           return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   :  int i_APCI035_Reset(comedi_device *dev)			     ||					                                                         |+----------------------------------------------------------------------------+| Task              :Resets the registers of the card                        |+----------------------------------------------------------------------------+| Input Parameters  :                                                        |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      :                                                        ||			                                                                 |+----------------------------------------------------------------------------+*/INT i_APCI035_Reset(comedi_device *dev){INT i_Count=0;for(i_Count=1;i_Count<=4;i_Count++)    {     i_WatchdogNbr=i_Count;     outl(0x0,devpriv->iobase+((i_WatchdogNbr-1)*32) + 0);//stop all timers    }outl(0x0 , devpriv->iobase+128 + 12);//Disable the warning delay return 0;}/*+----------------------------------------------------------------------------+| Function   Name   : static void v_APCI035_Interrupt					     ||					  (int irq , void *d, struct pt_regs *regs)      |+----------------------------------------------------------------------------+| Task              : Interrupt processing Routine                           |+----------------------------------------------------------------------------+| Input Parameters  : int irq                 : irq number                   ||                     void *d                 : void pointer                 ||                     struct pt_regs *regs    : structure pointer            |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/static void v_APCI035_Interrupt(int irq, void *d, struct pt_regs *regs) {	   comedi_device *dev = d;   UINT ui_StatusRegister1 = 0;   UINT ui_StatusRegister2=0;   UINT ui_ReadCommand =0;   UINT ui_ChannelNumber=0;   UINT ui_DigitalTemperature=0;   if(i_Temp==1)       {        i_WatchdogNbr=i_Flag;          i_Flag=i_Flag+1;         }       /**************************************/  /* Read the interrupt status register of temperature Warning */  /**************************************/   ui_StatusRegister1 = inl(devpriv->iobase+128 + 16);    /**************************************/   /* Read the interrupt status register for Watchdog/timer */    /**************************************/     ui_StatusRegister2 = inl (devpriv->iobase+((i_WatchdogNbr-1)*32) + 20);      if ((((ui_StatusRegister1 ) & 0x8) == 0x8))//Test if warning relay interrupt        {        /**********************************/        /* Disable the temperature warning */        /**********************************/         ui_ReadCommand = inl (devpriv->iobase+128 + 12);         ui_ReadCommand = ui_ReadCommand & 0xFFDF0000UL;         outl(ui_ReadCommand , devpriv->iobase+128 + 12);           /***************************/      /* Read the channel number */      /***************************/           ui_ChannelNumber  = inl(devpriv->iobase+128 + 60);        /**************************************/        /* Read the digital temperature value */        /**************************************/         ui_DigitalTemperature = inl(devpriv->iobase+128 + 60);           send_sig(SIGIO,devpriv->tsk_Current,0); // send signal to the sample        }//if (((ui_StatusRegister1 & 0x8) == 0x8))               else       {       if((ui_StatusRegister2 & 0x1) == 0x1)                 {           send_sig(SIGIO,devpriv->tsk_Current,0); // send signal to the sample               }        }//else if (((ui_StatusRegister1 & 0x8) == 0x8))                   return;}

⌨️ 快捷键说明

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