📄 apci1710_inccpt.c
字号:
/*****************/ outl(0,devpriv->s_BoardInfos. ui_Address + 16 + (64 * b_ModulCpt)); } } } else { /***************************/ /* No counter module found */ /***************************/ DPRINTK("No counter module found\n"); i_ReturnValue = -2; } return (i_ReturnValue); }/*+----------------------------------------------------------------------------+| Function Name : _INT_ i_APCI1710_InitIndex (BYTE_ b_BoardHandle, || BYTE_ b_ModulNbr, || BYTE_ b_ReferenceAction, || BYTE_ b_IndexOperation, || BYTE_ b_AutoMode, || BYTE_ b_InterruptEnable) |+----------------------------------------------------------------------------+| Task : Initialise the index corresponding to the selected || module (b_ModulNbr). If a INDEX flag occur, you have || the possibility to clear the 32-Bit counter or to latch|| the current 32-Bit value in to the first latch || register. The b_IndexOperation parameter give the || possibility to choice the INDEX action. || If you have enabled the automatic mode, each INDEX || action is cleared automatically, else you must read || the index status ("i_APCI1710_ReadIndexStatus") || after each INDEX action. || || || Index action || ------------ || || +------------------------+------------------------------------+ || | b_IndexOperation | Operation | || |------------------------+------------------------------------| || |APCI1710_LATCH_COUNTER | After a index signal, the counter | || | | value (32-Bit) is latched in to | || | | the first latch register | || |------------------------|------------------------------------| || |APCI1710_CLEAR_COUNTER | After a index signal, the counter | || | | value is cleared (32-Bit) | || +------------------------+------------------------------------+ |+----------------------------------------------------------------------------+| Input Parameters : BYTE_ b_BoardHandle : Handle of board APCI-1710 || BYTE_ b_ModulNbr : Module number to configure || (0 to 3) || BYTE_ b_ReferenceAction : Determine if the reference || must set or no for the || acceptance from index || APCI1710_ENABLE : || Reference must be set for || accepted the index || APCI1710_DISABLE : || Reference have not || importance || BYTE_ b_IndexOperation : Index operating mode. || See table. || BYTE_ b_AutoMode : Enable or disable the || automatic index reset. || APCI1710_ENABLE : || Enable the automatic mode || APCI1710_DISABLE : || Disable the automatic mode || BYTE_ b_InterruptEnable : Enable or disable the || interrupt. || APCI1710_ENABLE : || Enable the interrupt || APCI1710_DISABLE : || Disable the interrupt |+----------------------------------------------------------------------------+| Output Parameters : - |+----------------------------------------------------------------------------+| Return Value : 0: No error || -1: The handle parameter of the board is wrong || -2: No counter module found || -3: Counter not initialised see function || "i_APCI1710_InitCounter" || -4 The reference action parameter is wrong || -5: The index operating mode parameter is wrong || -6: The auto mode parameter is wrong || -7: Interrupt parameter is wrong || -8: Interrupt function not initialised. || See function "i_APCI1710_SetBoardIntRoutineX" |+----------------------------------------------------------------------------+*/INT i_APCI1710_InitIndex (comedi_device *dev, BYTE b_ModulNbr, BYTE b_ReferenceAction, BYTE b_IndexOperation, BYTE b_AutoMode, BYTE b_InterruptEnable) { INT i_ReturnValue = 0; /**************************/ /* Test the module number */ /**************************/ if (b_ModulNbr < 4) { /*******************************/ /* Test if counter initialised */ /*******************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_InitFlag. b_CounterInit == 1) { /********************************/ /* Test the reference parameter */ /********************************/ if (b_ReferenceAction == APCI1710_ENABLE || b_ReferenceAction == APCI1710_DISABLE) { /****************************/ /* Test the index parameter */ /****************************/ if (b_IndexOperation == APCI1710_HIGH_EDGE_LATCH_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_LATCH_COUNTER || b_IndexOperation == APCI1710_HIGH_EDGE_CLEAR_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_CLEAR_COUNTER || b_IndexOperation == APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER) { /********************************/ /* Test the auto mode parameter */ /********************************/ if (b_AutoMode == APCI1710_ENABLE || b_AutoMode == APCI1710_DISABLE) { /***************************/ /* Test the interrupt mode */ /***************************/ if (b_InterruptEnable == APCI1710_ENABLE || b_InterruptEnable == APCI1710_DISABLE) { /************************************/ /* Makte the configuration commando */ /************************************/ if (b_ReferenceAction == APCI1710_ENABLE) { devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 | APCI1710_ENABLE_INDEX_ACTION; } else { devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 & APCI1710_DISABLE_INDEX_ACTION; } /****************************************/ /* Test if low level latch or/and clear */ /****************************************/ if (b_IndexOperation == APCI1710_LOW_EDGE_LATCH_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_CLEAR_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER) { /*************************************/ /* Set the index level to low (DQ26) */ /*************************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 | APCI1710_SET_LOW_INDEX_LEVEL; } else { /**************************************/ /* Set the index level to high (DQ26) */ /**************************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 & APCI1710_SET_HIGH_INDEX_LEVEL; } /***********************************/ /* Test if latch and clear counter */ /***********************************/ if (b_IndexOperation == APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER) { /***************************************/ /* Set the latch and clear flag (DQ27) */ /***************************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 | APCI1710_ENABLE_LATCH_AND_CLEAR; } // if (b_IndexOperation == APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER) else { /*****************************************/ /* Clear the latch and clear flag (DQ27) */ /*****************************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister4 & APCI1710_DISABLE_LATCH_AND_CLEAR; /*************************/ /* Test if latch counter */ /*************************/ if (b_IndexOperation == APCI1710_HIGH_EDGE_LATCH_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_LATCH_COUNTER) { /*********************************/ /* Enable the latch from counter */ /*********************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 | APCI1710_INDEX_LATCH_COUNTER; } else { /*********************************/ /* Enable the clear from counter */ /*********************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 = devpriv-> s_ModuleInfo [b_ModulNbr]. s_SiemensCounterInfo. s_ModeRegister. s_ByteModeRegister. b_ModeRegister2 & (~APCI1710_INDEX_LATCH_COUNTER); } } // // if (b_IndexOperation == APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER || b_IndexOperation == APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -