📄 apci1710_ttl.c
字号:
/**************************/ /* Test the module number */ /**************************/ if (b_ModulNbr < 4) { /**************************/ /* Test if TTL I/O module */ /**************************/ if ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_TTL_IO) { /******************************************/ /* Test if the TTL I/O module initialised */ /******************************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_TTLInit == 1) { /**************************/ /* Read all digital input */ /**************************/ dw_StatusReg=inl(devpriv->s_BoardInfos. ui_Address + (64 * b_ModulNbr)); /**********************/ /* Test if TTL Rev1.0 */ /**********************/ if ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130) { *pul_PortValue = dw_StatusReg & 0xFFFFFFUL; } else { /**************************************/ /* Test if port A not used for output */ /**************************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo.b_PortConfiguration [0] == 1) { *pul_PortValue = dw_StatusReg & 0x3FFFF00UL; } /**************************************/ /* Test if port B not used for output */ /**************************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [1] == 1) { *pul_PortValue = dw_StatusReg & 0x3FF00FFUL; } /**************************************/ /* Test if port C not used for output */ /**************************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [2] == 1) { *pul_PortValue = dw_StatusReg & 0x300FFFFUL; } /**************************************/ /* Test if port D not used for output */ /**************************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [3] == 1) { *pul_PortValue = dw_StatusReg & 0xFFFFFFUL; } } } else { /***************************/ /* TTL I/O not initialised */ /***************************/ DPRINTK("TTL I/O not initialised\n"); i_ReturnValue = -5; } } else { /**********************************/ /* The module is not a TTL module */ /**********************************/ DPRINTK("The module is not a TTL module\n"); i_ReturnValue = -3; } } else { /***********************/ /* Module number error */ /***********************/ DPRINTK("Module number error\n"); i_ReturnValue = -2; } return (i_ReturnValue); }/*+----------------------------------------------------------------------------+| OUTPUT FUNCTIONS |+----------------------------------------------------------------------------+*//*+----------------------------------------------------------------------------+| Function Name : _INT_ i_APCI1710_SetTTLIOChlOn || (BYTE_ b_BoardHandle, || BYTE_ b_ModulNbr, || BYTE_ b_OutputChannel) INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn,lsampl_t *data) |+----------------------------------------------------------------------------+| Task : Sets or resets the output witch has been passed with the || parameter b_Channel. Setting an output means setting || an ouput high. |+----------------------------------------------------------------------------+| Input Parameters : BYTE_ b_BoardHandle : Handle of board APCI-1710 || BYTE_ b_ModulNbr : Selected module number (0 to 3)|| BYTE_ b_OutputChannel : Selection from digital output || channel (0 or 1) || 0 : PD0 || 1 : PD1 || 2 to 9 : PA || 10 to 17: PB || 18 to 25: PC | b_ModulNbr = CR_AREF(insn->chanspec); b_OutputChannel= CR_CHAN(insn->chanspec); ui_State = data[0]; // ON or OFF+----------------------------------------------------------------------------+| Output Parameters : - |+----------------------------------------------------------------------------+| Return Value : 0: No error || -1: The handle parameter of the board is wrong || -2: The module parameter is wrong || -3: The module is not a TTL I/O module || -4: The selected digital output is wrong || -5: TTL I/O not initialised see function || " i_APCI1710_InitTTLIO"+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn,lsampl_t *data) { INT i_ReturnValue = 0; DWORD dw_StatusReg = 0; BYTE b_ModulNbr; BYTE b_OutputChannel; UINT ui_State; i_ReturnValue = insn->n; b_ModulNbr = CR_AREF(insn->chanspec); b_OutputChannel= CR_CHAN(insn->chanspec); ui_State = data[0]; // ON or OFF /**************************/ /* Test the module number */ /**************************/ if (b_ModulNbr < 4) { /**************************/ /* Test if TTL I/O module */ /**************************/ if ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_TTL_IO) { /******************************************/ /* Test if the TTL I/O module initialised */ /******************************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_TTLInit == 1) { /***********************************/ /* Test the TTL I/O channel number */ /***********************************/ if (((b_OutputChannel <= 1) && ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130)) || ((b_OutputChannel <= 25) && ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) >= 0x3230))) { /****************************************************/ /* Test if the selected channel is a output channel */ /****************************************************/ if (((b_OutputChannel <= 1) && (devpriv-> s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [3] == 1)) || ((b_OutputChannel >= 2) && (b_OutputChannel <= 9) && (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [0] == 1)) || ((b_OutputChannel >= 10) && (b_OutputChannel <= 17) && (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [1] == 1)) || ((b_OutputChannel >= 18) && (b_OutputChannel <= 25) && (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [2] == 1))) { /************************/ /* Test if PD0 selected */ /************************/ if (b_OutputChannel == 0) { outl(ui_State,devpriv->s_BoardInfos. ui_Address + (64 * b_ModulNbr)); } else { /************************/ /* Test if PD1 selected */ /************************/ if (b_OutputChannel == 1) { outl(ui_State,devpriv->s_BoardInfos. ui_Address + 4 + (64 * b_ModulNbr)); } else { b_OutputChannel = b_OutputChannel - 2; /********************/ /* Read all channel */ /********************/ dw_StatusReg =inl(devpriv->s_BoardInfos. ui_Address + (64 * b_ModulNbr)); if(ui_State) // ON { dw_StatusReg = (dw_StatusReg >> ((b_OutputChannel / 8) * 8)) & 0xFF; dw_StatusReg = dw_StatusReg | (1 << (b_OutputChannel % 8)); }else // Off { dw_StatusReg = (dw_StatusReg >> ((b_OutputChannel / 8) * 8)) & 0xFF; dw_StatusReg = dw_StatusReg & (0xFF - (1 << (b_OutputChannel % 8))); } /****************************/ /* Set the new output value */ /****************************/ outl(dw_StatusReg,devpriv->s_BoardInfos. ui_Address + 8 + ((b_OutputChannel / 8) * 4) + (64 * b_ModulNbr)); } } } else { /************************************/ /* The selected TTL output is wrong */ /************************************/ DPRINTK(" The selected TTL output is wrong\n"); i_ReturnValue = -4; } } else { /************************************/ /* The selected TTL output is wrong */ /************************************/ DPRINTK("The selected TTL output is wrong\n"); i_ReturnValue = -4; } } else { /***************************/ /* TTL I/O not initialised */ /***************************/ DPRINTK("TTL I/O not initialised\n"); i_ReturnValue = -5; } } else { /**************************************/ /* The module is not a TTL I/O module */ /**************************************/ DPRINTK("The module is not a TTL I/O module\n"); i_ReturnValue = -3; } } else { /***********************/ /* Module number error */ /***********************/ DPRINTK("Module number error\n"); i_ReturnValue = -2; } return (i_ReturnValue); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -