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

📄 hwdrv_apci3501.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
      outl(ul_Command1,devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);//mode 2           }//end if(data[0]==ADDIDATA_TIMER)return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI3501_StartStopWriteTimerCounterWatchdog      ||			  (comedi_device *dev,comedi_subdevice *s,               | |                      comedi_insn *insn,lsampl_t *data)                     |+----------------------------------------------------------------------------+| Task              : Start / Stop The Selected Timer , Counter or Watchdog  |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev : Driver handle                     ||                     UINT *data         : Data Pointer contains             ||                                          configuration parameters as below ||                                                                            | |					  data[0]            : 0 Timer                   | 	|										   1 Counter                 |							|										   2 Watchdog          		 |                             |            				 data[1]            : 1 Start                   | 	|										   0 Stop      				 |									                                              2 Trigger                 |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI3501_StartStopWriteTimerCounterWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){ULONG  ul_Command1 = 0;int i_Temp;if (devpriv->b_TimerSelectMode==ADDIDATA_WATCHDOG)   {               if  (data[1]==1)       {        ul_Command1=inl(devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);       ul_Command1=(ul_Command1& 0xFFFFF9FFUL) | 0x1UL;       //Enable the Watchdog       outl(ul_Command1,devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);      }   else if(data[1]==0)//Stop The Watchdog          {             //Stop The Watchdog          ul_Command1=inl(devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);          ul_Command1 =ul_Command1 & 0xFFFFF9FEUL;          outl(0x0,devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);         }        else if(data[1]==2)            {              ul_Command1=inl(devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);             ul_Command1 = (ul_Command1 & 0xFFFFF9FFUL) | 0x200UL;             outl(ul_Command1,devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);            }//if(data[1]==2)    } // end if (devpriv->b_TimerSelectMode==ADDIDATA_WATCHDOG)if (devpriv->b_TimerSelectMode==ADDIDATA_TIMER)   {        if  (data[1]==1)       {        ul_Command1=inl(devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);       ul_Command1=(ul_Command1& 0xFFFFF9FFUL) | 0x1UL;       //Enable the Timer       outl(ul_Command1,devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);      }      else if(data[1]==0)         {          //Stop The Timer          ul_Command1=inl(devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);          ul_Command1 =ul_Command1 & 0xFFFFF9FEUL;          outl(ul_Command1,devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);         }      else  if  (data[1]==2)       {       //Trigger the Timer      ul_Command1=inl(devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);      ul_Command1 = (ul_Command1 & 0xFFFFF9FFUL) | 0x200UL;      outl(ul_Command1,devpriv->iobase+ APCI3501_WATCHDOG+ APCI3501_TCW_PROG);      }    } // end if (devpriv->b_TimerSelectMode==ADDIDATA_TIMER)i_Temp= inl(devpriv->iobase + APCI3501_WATCHDOG + APCI3501_TCW_TRIG_STATUS)&0x1; return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI3501_ReadTimerCounterWatchdog                ||			  (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 ||                                                                            | |					  data[0]            : 0 Timer                   | 	|										   1 Counter                 |               |										   2 Watchdog                |                             |					  data[1]             : Timer Counter Watchdog Number   |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI3501_ReadTimerCounterWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){  if  (devpriv->b_TimerSelectMode==ADDIDATA_WATCHDOG)     {      data[0]= inl(devpriv->iobase + APCI3501_WATCHDOG + APCI3501_TCW_TRIG_STATUS)&0x1;     data[1]= inl(devpriv->iobase + APCI3501_WATCHDOG);     }// end if  (devpriv->b_TimerSelectMode==ADDIDATA_WATCHDOG)    else if  (devpriv->b_TimerSelectMode==ADDIDATA_TIMER)           {          data[0]= inl(devpriv->iobase+APCI3501_WATCHDOG+APCI3501_TCW_TRIG_STATUS)&0x1;           data[1]= inl(devpriv->iobase + APCI3501_WATCHDOG);           } // end if  (devpriv->b_TimerSelectMode==ADDIDATA_TIMER)   else if ((devpriv->b_TimerSelectMode!=ADDIDATA_TIMER) && (devpriv->b_TimerSelectMode!=ADDIDATA_WATCHDOG))     {      printk ("\nIn ReadTimerCounterWatchdog :: Invalid Subdevice \n");     }return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   :  int i_APCI3501_Reset(comedi_device *dev)			     ||					                                                 |+----------------------------------------------------------------------------+| Task              :Resets the registers of the card                        |+----------------------------------------------------------------------------+| Input Parameters  :                                                        |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      :                                                        ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI3501_Reset(comedi_device *dev){int i_Count=0,i_temp=0;ULONG  ul_Command1 = 0,ul_Polarity,ul_DAC_Ready=0;outl(0x0,devpriv->iobase+APCI3501_DIGITAL_OP);outl(1,devpriv->iobase+APCI3501_ANALOG_OUTPUT+APCI3501_AO_VOLT_MODE);     ul_Polarity=0x80000000;  for(i_Count=0;i_Count<=7;i_Count++)   {        ul_DAC_Ready=inl(devpriv->iobase+APCI3501_ANALOG_OUTPUT);   while(ul_DAC_Ready==0)     {     ul_DAC_Ready=inl(devpriv->iobase+APCI3501_ANALOG_OUTPUT);     ul_DAC_Ready=(ul_DAC_Ready>>8)&1;     }      if(ul_DAC_Ready)        {        // Output the Value on the output channels.        ul_Command1=(ULONG)((ULONG)(i_Count & 0xFF)|(ULONG)((i_temp << 0x8)&0x7FFFFF00L)|(ULONG)(ul_Polarity));        outl(ul_Command1,devpriv->iobase+APCI3501_ANALOG_OUTPUT+APCI3501_AO_PROG);        }    }  return 0;}/*+----------------------------------------------------------------------------+| Function   Name   : static void v_APCI3501_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          ||			                                                         |+----------------------------------------------------------------------------+*/ void v_APCI3501_Interrupt(int irq, void *d, struct pt_regs *regs) {    int i_temp;	    comedi_device *dev = d;    unsigned int  ui_Timer_AOWatchdog ;    unsigned long ul_Command1;     // Disable Interrupt       ul_Command1=inl(devpriv->iobase+APCI3501_WATCHDOG +APCI3501_TCW_PROG);       ul_Command1 = (ul_Command1 & 0xFFFFF9FDul);        outl(ul_Command1 , devpriv->iobase+APCI3501_WATCHDOG +APCI3501_TCW_PROG);         ui_Timer_AOWatchdog=inl(devpriv->iobase+APCI3501_WATCHDOG +APCI3501_TCW_IRQ )& 0x1;	if ((!ui_Timer_AOWatchdog)) 	{    	comedi_error(dev,"IRQ from unknow source");	return;	}	       // Enable Interrupt    //Send a signal to from kernel to user space    send_sig(SIGIO,devpriv->tsk_Current,0);     ul_Command1=inl(devpriv->iobase+APCI3501_WATCHDOG +APCI3501_TCW_PROG);    ul_Command1 = ((ul_Command1 & 0xFFFFF9FDul) | 1 << 1);      outl(ul_Command1 , devpriv->iobase+APCI3501_WATCHDOG +APCI3501_TCW_PROG);   i_temp= inl(devpriv->iobase + APCI3501_WATCHDOG + APCI3501_TCW_TRIG_STATUS)&0x1;  return;}

⌨️ 快捷键说明

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