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

📄 hwdrv_apci2032.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
|		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/INT i_APCI2032_ReadDigitalOutput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) {   UINT ui_Temp;   UINT ui_NoOfChannel;   ui_NoOfChannel=CR_CHAN(insn->chanspec);   ui_Temp=data[0];   *data=inl(devpriv->iobase+APCI2032_DIGITAL_OP_RW);   if  (ui_Temp==0)      {      *data=(*data >> ui_NoOfChannel)&0x1;       } //if  (ui_Temp==0)   else      {      if  (ui_Temp==1)         {         switch( ui_NoOfChannel)	   {	   case 2:                  *data=(*data >>(2*data[1]))&3; 	          break;	   case 4:                  *data=(*data >>(4*data[1]))&15; 	          break;  	   case 8: 	          *data=(*data >>(8*data[1]))&255;                    break;            case 16:                  *data=(*data >>(16*data[1]))&65535;                  break;           case 31: break;           default:	           comedi_error(dev," chan spec wrong");		   return -EINVAL;   // "sorry channel spec wrong "                             }//switch(ui_NoOfChannels)           }//if  (ui_Temp==1)  else     {     printk("\nSpecified channel not supported \n");     }//elseif  (ui_Temp==1)  }return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : INT i_APCI2032_ConfigWatchdog(comedi_device                   *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)||				                                                     |+----------------------------------------------------------------------------+| Task              : Configures The Watchdog                                |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev      : Driver handle                ||                     comedi_subdevice *s,   :pointer to subdevice structure                      comedi_insn *insn      :pointer to insn structure      ||                     lsampl_t *data          : Data Pointer to read status                                                                                                             |  +----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/INT i_APCI2032_ConfigWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){if(data[0]==0)  {   //Disable the watchdog   outl(0x0,devpriv->iobase+APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_PROG);   //Loading the Reload value   outl(data[1],devpriv->iobase+APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_RELOAD_VALUE);  }else   {     printk("\nThe input parameters are wrong\n");     return -EINVAL;    }return insn->n;} /*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI2032_StartStopWriteWatchdog                  ||				(comedi_device *dev,comedi_subdevice *s,                     comedi_insn *insn,lsampl_t *data);                      |+----------------------------------------------------------------------------+| Task              : Start / Stop The Watchdog                              |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev      : Driver handle                ||                     comedi_subdevice *s,   :pointer to subdevice structure                      comedi_insn *insn      :pointer to insn structure      ||                     lsampl_t *data          : Data Pointer to read status  |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI2032_StartStopWriteWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) {   switch(data[0])      {       case 0://stop the watchdog                outl(0x0,devpriv->iobase +APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_PROG );//disable the watchdog                break;       case 1://start the watchdog               outl(0x0001,devpriv->iobase+APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_PROG);               break;       case 2://Software trigger                outl(0x0201,devpriv->iobase+APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_PROG);              break;       default:printk("\nSpecified functionality does not exist\n");	       return -EINVAL;       }         return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI2032_ReadWatchdog                            ||			(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,                    lsampl_t *data); 	                                     |+----------------------------------------------------------------------------+| Task              : Read The Watchdog                                      |+----------------------------------------------------------------------------+| Input Parameters  :   comedi_device *dev      : Driver handle              ||                     comedi_subdevice *s,   :pointer to subdevice structure                      comedi_insn *insn      :pointer to insn structure      ||                     lsampl_t *data          : Data Pointer to read status  |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI2032_ReadWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { data[0]= inl(devpriv->iobase+APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_TRIG_STATUS  )&0x1; return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   :  void v_APCI2032_Interrupt					         ||					  (int irq , void *d, struct pt_regs *regs)      |+----------------------------------------------------------------------------+| Task              : Writes port value  To the selected port                |+----------------------------------------------------------------------------+| 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_APCI2032_Interrupt(int irq, void *d, struct pt_regs *regs) { 	comedi_device *dev = d;        unsigned int ui_DO;                ui_DO=inl(devpriv->iobase+APCI2032_DIGITAL_OP_IRQ)&0x1;//Check if VCC OR CC interrupt has occured.              if(ui_DO==0)           {           printk("\nInterrupt from unKnown source\n");           }// if(ui_DO==0)        if (ui_DO)	   {           // Check for Digital Output interrupt Type - 1: Vcc interrupt 2: CC interrupt.           ui_Type=inl(devpriv->iobase+ APCI2032_DIGITAL_OP_INTERRUPT_STATUS)&0x3;           outl(0x0,devpriv->iobase+APCI2032_DIGITAL_OP+APCI2032_DIGITAL_OP_INTERRUPT);	   if (ui_Type==1)	     {             //Sends signal to user space 	     send_sig(SIGIO,devpriv->tsk_Current,0);             }// if (ui_Type==1)	  else             {                     if (ui_Type==2)	       {	       // Sends signal to user space 		send_sig(SIGIO,devpriv->tsk_Current,0);                }//if (ui_Type==2)             }//else if (ui_Type==1)           } //if(ui_DO)    return;   } /*+----------------------------------------------------------------------------+| Function   Name   :  int i_APCI2032_ReadInterruptStatus                    ||			  (comedi_device *dev,comedi_subdevice *s,               | |                      comedi_insn *insn,lsampl_t *data)                     |+----------------------------------------------------------------------------+| Task              :Reads the interrupt status register                     |+----------------------------------------------------------------------------+| Input Parameters  :                                                        |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      :                                                        ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI2032_ReadInterruptStatus(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){    *data=ui_Type;   return insn->n;} /*+----------------------------------------------------------------------------+| Function   Name   :  int i_APCI2032_Reset(comedi_device *dev)			     ||					                                                 |+----------------------------------------------------------------------------+| Task              :Resets the registers of the card                        |+----------------------------------------------------------------------------+| Input Parameters  :                                                        |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      :                                                        ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI2032_Reset(comedi_device *dev){devpriv->b_DigitalOutputRegister=0;ui_Type=0;outl(0x0,devpriv->iobase+APCI2032_DIGITAL_OP);//Resets the output channelsoutl(0x0,devpriv->iobase+APCI2032_DIGITAL_OP_INTERRUPT);//Disables the interrupt.outl(0x0,devpriv->iobase+APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_PROG);//disable the watchdogoutl(0x0,devpriv->iobase+APCI2032_DIGITAL_OP_WATCHDOG+APCI2032_TCW_RELOAD_VALUE);//reload=0return 0;}  

⌨️ 快捷键说明

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