📄 apci1710_inp_cpt.c
字号:
case APCI1710_DISABLE: devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_ControlRegister = devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_ControlRegister & (0xFFFFFFFFUL - (1UL << b_PulseEncoderNbr)); /*****************************/ /* Disable the pulse encoder */ /*****************************/ outl(devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_ControlRegister,devpriv->s_BoardInfos. ui_Address + 16 + (64 * b_ModulNbr)); break; }// switch End } else { /*********************************/ /* Pulse encoder not initialised */ /*********************************/ DPRINTK("Pulse encoder not initialised\n"); i_ReturnValue = -4; } } else { /************************************/ /* Pulse encoder selection is wrong */ /************************************/ DPRINTK("Pulse encoder selection is wrong\n"); i_ReturnValue = -3; } } else { /*****************************/ /* Module selection is wrong */ /*****************************/ DPRINTK("Module selection is wrong\n"); i_ReturnValue = -2; } return (i_ReturnValue); }/*+----------------------------------------------------------------------------+| Function Name : _INT_ i_APCI1710_ReadPulseEncoderStatus || (BYTE_ b_BoardHandle, || BYTE_ b_ModulNbr, || BYTE_ b_PulseEncoderNbr, || PBYTE_ pb_Status) |+----------------------------------------------------------------------------+| Task APCI1710_PULSEENCODER_READ : Reads the pulse encoder status and valuefrom selected pulse || encoder (b_PulseEncoderNbr) from selected module || (b_ModulNbr). |+----------------------------------------------------------------------------+ BYTE b_Type; data[0] APCI1710_PULSEENCODER_WRITE Writes a 32-bit value (ul_WriteValue) into the selected|| pulse encoder (b_PulseEncoderNbr) from selected module || (b_ModulNbr). This operation set the new start pulse || encoder value. APCI1710_PULSEENCODER_READ| Input Parameters : BYTE_ b_BoardHandle : Handle of board APCI-1710|| CRAREF() BYTE_ b_ModulNbr : Module number to || configure (0 to 3) || data[1] BYTE_ b_PulseEncoderNbr : Pulse encoder selection || (0 to 3) APCI1710_PULSEENCODER_WRITE data[2] ULONG_ ul_WriteValue : 32-bit value to be || written |+----------------------------------------------------------------------------+| Output Parameters : PBYTE_ pb_Status : Pulse encoder status. || 0 : No overflow occur|| 1 : Overflow occur PULONG_ pul_ReadValue : Pulse encoder value | |+----------------------------------------------------------------------------+| Return Value : 0: No error || -1: The handle parameter of the board is wrong || -2: Module selection is wrong || -3: Pulse encoder selection is wrong || -4: Pulse encoder not initialised. || See function "i_APCI1710_InitPulseEncoder" |+----------------------------------------------------------------------------+*//*_INT_ i_APCI1710_ReadPulseEncoderStatus (BYTE_ b_BoardHandle, BYTE_ b_ModulNbr, BYTE_ b_PulseEncoderNbr, PBYTE_ pb_Status) */INT i_APCI1710_InsnBitsReadWritePulseEncoder(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn,lsampl_t *data) { INT i_ReturnValue = 0; DWORD dw_StatusRegister; BYTE b_ModulNbr; BYTE b_PulseEncoderNbr; PBYTE pb_Status; BYTE b_Type; PULONG pul_ReadValue; ULONG ul_WriteValue ; i_ReturnValue=insn->n; b_ModulNbr =(BYTE) CR_AREF(insn->chanspec); b_Type =(BYTE) data[0] ; b_PulseEncoderNbr=(BYTE) data[1]; pb_Status =(PBYTE) &data[0]; pul_ReadValue =(PULONG) &data[1]; /***********************************/ /* Test the selected module number */ /***********************************/ if (b_ModulNbr <= 3) { /******************************************/ /* Test the selected pulse encoder number */ /******************************************/ if (b_PulseEncoderNbr <= 3) { /*************************************/ /* Test if pulse encoder initialised */ /*************************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. s_PulseEncoderInfo [b_PulseEncoderNbr]. b_PulseEncoderInit == 1) { switch(b_Type) { case APCI1710_PULSEENCODER_READ: /****************************/ /* Read the status register */ /****************************/ dw_StatusRegister=inl(devpriv->s_BoardInfos. ui_Address + 16 + (64 * b_ModulNbr)); devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_StatusRegister = devpriv-> s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_StatusRegister | dw_StatusRegister; *pb_Status = (BYTE) (devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_StatusRegister >> (1 + b_PulseEncoderNbr)) & 1; devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_StatusRegister = devpriv->s_ModuleInfo [b_ModulNbr]. s_PulseEncoderModuleInfo. dw_StatusRegister & (0xFFFFFFFFUL - (1 << (1 + b_PulseEncoderNbr))); /******************/ /* Read the value */ /******************/ *pul_ReadValue=inl(devpriv->s_BoardInfos. ui_Address + (4 * b_PulseEncoderNbr) + (64 * b_ModulNbr)); break; case APCI1710_PULSEENCODER_WRITE: ul_WriteValue = (ULONG) data[2]; /*******************/ /* Write the value */ /*******************/ outl(ul_WriteValue,devpriv->s_BoardInfos. ui_Address + (4 * b_PulseEncoderNbr) + (64 * b_ModulNbr)); }//end of switch } else { /*********************************/ /* Pulse encoder not initialised */ /*********************************/ DPRINTK("Pulse encoder not initialised\n"); i_ReturnValue = -4; } } else { /************************************/ /* Pulse encoder selection is wrong */ /************************************/ DPRINTK("Pulse encoder selection is wrong\n"); i_ReturnValue = -3; } } else { /*****************************/ /* Module selection is wrong */ /*****************************/ DPRINTK("Module selection is wrong\n"); i_ReturnValue = -2; } return (i_ReturnValue); }INT i_APCI1710_InsnReadInterruptPulseEncoder(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn,lsampl_t *data){ data[0] = devpriv->s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Read].b_OldModuleMask; data[1] = devpriv->s_InterruptParameters. s_FIFOInterruptParameters [devpriv-> s_InterruptParameters. ui_Read].ul_OldInterruptMask; 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; return insn->n;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -