📄 apci1710_82x54.c
字号:
data[2]=devpriv->s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Read].ul_OldCounterLatchValue; /**************************/ /* Increment the read FIFO */ /***************************/ devpriv-> s_InterruptParameters. ui_Read = (devpriv-> s_InterruptParameters. ui_Read + 1) % APCI1710_SAVE_INTERRUPT; break; case APCI1710_TIMER_READALLTIMER: /**************************/ /* Test the module number */ /**************************/ if (b_ModulNbr < 4) { /***********************/ /* Test if 82X54 timer */ /***********************/ if ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_82X54_TIMER) { /********************************/ /* Test if timer 0 iniutialised */ /********************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_82X54ModuleInfo. s_82X54TimerInfo [0]. b_82X54Init == 1) { /********************************/ /* Test if timer 1 iniutialised */ /********************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_82X54ModuleInfo. s_82X54TimerInfo [1]. b_82X54Init == 1) { /********************************/ /* Test if timer 2 iniutialised */ /********************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_82X54ModuleInfo. s_82X54TimerInfo [2]. b_82X54Init == 1) { /*********************/ /* Latch all counter */ /*********************/ outl(0x17,devpriv->s_BoardInfos. ui_Address + 12 + (64 * b_ModulNbr)); /**************************/ /* Read the timer 0 value */ /**************************/ pul_TimerValueArray [0]=inl(devpriv->s_BoardInfos. ui_Address + 0 + (64 * b_ModulNbr)); /**************************/ /* Read the timer 1 value */ /**************************/ pul_TimerValueArray [1]=inl(devpriv->s_BoardInfos. ui_Address + 4 + (64 * b_ModulNbr)); /**************************/ /* Read the timer 2 value */ /**************************/ pul_TimerValueArray [2]=inl(devpriv->s_BoardInfos. ui_Address + 8 + (64 * b_ModulNbr)); } else { /****************************************/ /* Timer 2 not initialised see function */ /****************************************/ DPRINTK("Timer 2 not initialised see function\n"); i_ReturnValue = -6; } } else { /****************************************/ /* Timer 1 not initialised see function */ /****************************************/ DPRINTK("Timer 1 not initialised see function\n"); i_ReturnValue = -5; } } else { /****************************************/ /* Timer 0 not initialised see function */ /****************************************/ DPRINTK("Timer 0 not initialised see function\n"); i_ReturnValue = -4; } } else { /************************************/ /* The module is not a TIMER module */ /************************************/ DPRINTK("The module is not a TIMER module\n"); i_ReturnValue = -3; } } else { /***********************/ /* Module number error */ /***********************/ DPRINTK("Module number error\n"); i_ReturnValue = -2; } }// End of Switch return (i_ReturnValue); }/*+----------------------------------------------------------------------------+| Function Name :INT i_APCI1710_InsnBitsTimer(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) |+----------------------------------------------------------------------------+| Task : Read write functions for Timer |+----------------------------------------------------------------------------+| Input Parameters : +----------------------------------------------------------------------------+| Output Parameters : - |+----------------------------------------------------------------------------+| Return Value : +----------------------------------------------------------------------------+*/INT i_APCI1710_InsnBitsTimer(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){ BYTE b_BitsType; INT i_ReturnValue=0; b_BitsType=data[0]; printk ("\n82X54"); switch(b_BitsType) { case APCI1710_TIMER_READVALUE: i_ReturnValue=i_APCI1710_ReadTimerValue (dev, (BYTE) CR_AREF(insn->chanspec), (BYTE) CR_CHAN(insn->chanspec), (PULONG) &data[0]); break; case APCI1710_TIMER_GETOUTPUTLEVEL: i_ReturnValue=i_APCI1710_GetTimerOutputLevel (dev, (BYTE) CR_AREF(insn->chanspec), (BYTE) CR_CHAN(insn->chanspec), (PBYTE) &data[0]); break; case APCI1710_TIMER_GETPROGRESSSTATUS: i_ReturnValue=i_APCI1710_GetTimerProgressStatus (dev, (BYTE) CR_AREF(insn->chanspec), (BYTE) CR_CHAN(insn->chanspec), (PBYTE) &data[0]); break; case APCI1710_TIMER_WRITEVALUE: i_ReturnValue=i_APCI1710_WriteTimerValue (dev, (BYTE) CR_AREF(insn->chanspec), (BYTE) CR_CHAN(insn->chanspec), (ULONG) data[1]); break; default: printk("Bits Config Parameter Wrong\n"); i_ReturnValue=-1; } if(i_ReturnValue>=0) i_ReturnValue =insn->n; return (i_ReturnValue);}/*+----------------------------------------------------------------------------+| Function Name : _INT_ i_APCI1710_ReadTimerValue || (BYTE_ b_BoardHandle, || BYTE_ b_ModulNbr, || BYTE_ b_TimerNbr, || PULONG_ pul_TimerValue) |+----------------------------------------------------------------------------+| Task : Return the timer value from selected digital timer || (b_TimerNbr) from selected timer module (b_ModulNbr). |+----------------------------------------------------------------------------+| Input Parameters : BYTE_ b_BoardHandle : Handle of board || APCI-1710 || BYTE_ b_ModulNbr : Selected module number || (0 to 3) || BYTE_ b_TimerNbr : Timer number to read || (0 to 2) |+----------------------------------------------------------------------------+| Output Parameters : PULONG_ pul_TimerValue : Timer value |+----------------------------------------------------------------------------+| Return Value : 0: No error || -1: The handle parameter of the board is wrong || -2: Module selection wrong || -3: Timer selection wrong || -4: The module is not a TIMER module || -5: Timer not initialised see function || "i_APCI1710_InitTimer" |+----------------------------------------------------------------------------+*/INT i_APCI1710_ReadTimerValue (comedi_device *dev, BYTE b_ModulNbr, BYTE b_TimerNbr, PULONG pul_TimerValue) { INT i_ReturnValue = 0; /**************************/ /* Test the module number */ /**************************/ if (b_ModulNbr < 4) { /***********************/ /* Test if 82X54 timer */ /***********************/ if ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_82X54_TIMER) { /*************************/ /* Test the timer number */ /*************************/ if (b_TimerNbr <= 2) { /*****************************/ /* Test if timer initialised */ /*****************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_82X54ModuleInfo. s_82X54TimerInfo [b_TimerNbr]. b_82X54Init == 1) { /*************************/ /* Latch the timer value */ /*************************/ outl((2 << b_TimerNbr) | 0xD0,devpriv->s_BoardInfos. ui_Address + 12 + (64 * b_ModulNbr)); /**************************/ /* Read the counter value */ /**************************/ *pul_TimerValue=inl(devpriv->s_BoardInfos. ui_Address + (b_TimerNbr * 4) + (64 * b_ModulNbr)); } else { /**************************************/ /* Timer not initialised see function */ /**************************************/ DPRINTK("Timer not initialised see function\n"); i_ReturnValue = -5; } } else { /*************************/ /* Timer selection wrong */ /*************************/ DPRINTK("Timer selection wrong\n"); i_ReturnValue = -3;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -