📄 apci1710_chrono.c
字号:
/***********************/ /* Test if chronometer */ /***********************/ if ((devpriv-> s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_CHRONOMETER) { /***********************************/ /* Test if chronometer initialised */ /***********************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_ChronoModuleInfo. b_ChronoInit == 1) { dw_Status=inl(devpriv->s_BoardInfos. ui_Address + 8 + (64 * b_ModulNbr)); /********************/ /* Test if overflow */ /********************/ if ((dw_Status & 8) == 8) { /******************/ /* Overflow occur */ /******************/ *pb_ChronoStatus = 3; } // if ((dw_Status & 8) == 8) else { /*******************************/ /* Test if measurement stopped */ /*******************************/ if ((dw_Status & 2) == 2) { /***********************/ /* A stop signal occur */ /***********************/ *pb_ChronoStatus = 2; } // if ((dw_Status & 2) == 2) else { /*******************************/ /* Test if measurement started */ /*******************************/ if ((dw_Status & 1) == 1) { /************************/ /* A start signal occur */ /************************/ *pb_ChronoStatus = 1; } // if ((dw_Status & 1) == 1) else { /***************************/ /* Measurement not started */ /***************************/ *pb_ChronoStatus = 0; } // if ((dw_Status & 1) == 1) } // if ((dw_Status & 2) == 2) } // if ((dw_Status & 8) == 8) } else { /*******************************/ /* Chronometer not initialised */ /*******************************/ DPRINTK("Chronometer not initialised\n"); i_ReturnValue = -4; } } else { /******************************************/ /* The module is not a Chronometer module */ /******************************************/ DPRINTK("The module is not a Chronometer module\n"); i_ReturnValue = -3; } } else { /***********************/ /* Module number error */ /***********************/ DPRINTK("Module number error\n"); i_ReturnValue = -2; } return (i_ReturnValue); }/*+----------------------------------------------------------------------------+| Function Name : _INT_ i_APCI1710_ReadChronoValue || (BYTE_ b_BoardHandle, || BYTE_ b_ModulNbr, || UINT_ ui_TimeOut, || PBYTE_ pb_ChronoStatus, || PULONG_ pul_ChronoValue) |+----------------------------------------------------------------------------+| Task : Return the chronometer status (pb_ChronoStatus) and the|| timing value (pul_ChronoValue) after a stop signal || occur from selected chronometer module (b_ModulNbr). || This function are only avaible if you have disabled || the interrupt functionality. See function || "i_APCI1710_EnableChrono" and the Interrupt mask || description chapter. || You can test the chronometer status witch the || "i_APCI1710_GetChronoProgressStatus" function. || || The returned value from pul_ChronoValue parameter is || not real measured timing. || You must used the "i_APCI1710_ConvertChronoValue" || function or make this operation for calculate the || timing: || || Timing = pul_ChronoValue * pul_RealTimingInterval. || || pul_RealTimingInterval is the returned parameter from || "i_APCI1710_InitChrono" function and the time unity is || the b_TimingUnit from "i_APCI1710_InitChrono" function|+----------------------------------------------------------------------------+| Input Parameters : BYTE_ b_BoardHandle : Handle of board APCI-1710 || BYTE_ b_ModulNbr : Selected module number (0 to 3) |+----------------------------------------------------------------------------+| Output Parameters : PULONG_ pb_ChronoStatus : Return the chronometer || status. || 0 : Measurement not started.|| No start signal occur. || 1 : Measurement started. || A start signal occur. || 2 : Measurement stopped. || A stop signal occur. || The measurement is || terminate. || 3: A overflow occur. You || must change the base || timing witch the || function || "i_APCI1710_InitChrono" || PULONG pul_ChronoValue : Chronometer timing value. |+----------------------------------------------------------------------------+| Return Value : 0: No error || -1: The handle parameter of the board is wrong || -2: Module selection wrong || -3: The module is not a Chronometer module || -4: Chronometer not initialised see function || "i_APCI1710_InitChrono" || -5: Timeout parameter is wrong (0 to 65535) || -6: Interrupt routine installed. You can not read || directly the chronometer measured timing. |+----------------------------------------------------------------------------+*/INT i_APCI1710_ReadChronoValue (comedi_device *dev, BYTE b_ModulNbr, UINT ui_TimeOut, PBYTE pb_ChronoStatus, PULONG pul_ChronoValue) { INT i_ReturnValue = 0; DWORD dw_Status; DWORD dw_TimeOut = 0; /**************************/ /* Test the module number */ /**************************/ if (b_ModulNbr < 4) { /***********************/ /* Test if chronometer */ /***********************/ if ((devpriv-> s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_CHRONOMETER) { /***********************************/ /* Test if chronometer initialised */ /***********************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_ChronoModuleInfo. b_ChronoInit == 1) { /*****************************/ /* Test the timout parameter */ /*****************************/ if ((ui_TimeOut >= 0) && (ui_TimeOut <= 65535UL)) { for (;;) { /*******************/ /* Read the status */ /*******************/ dw_Status=inl(devpriv->s_BoardInfos. ui_Address + 8 + (64 * b_ModulNbr)); /********************/ /* Test if overflow */ /********************/ if ((dw_Status & 8) == 8) { /******************/ /* Overflow occur */ /******************/ *pb_ChronoStatus = 3; /***************************/ /* Test if continuous mode */ /***************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_ChronoModuleInfo. b_CycleMode == APCI1710_CONTINUOUS) { /*************************/ /* Clear status register */ /*************************/ outl(0,devpriv->s_BoardInfos. ui_Address + 36 + (64 * b_ModulNbr)); } break; } // if ((dw_Status & 8) == 8) else { /*******************************/ /* Test if measurement stopped */ /*******************************/ if ((dw_Status & 2) == 2) { /***********************/ /* A stop signal occur */ /***********************/ *pb_ChronoStatus = 2; /***************************/ /* Test if continnous mode */ /***************************/ if (devpriv-> s_ModuleInfo [b_ModulNbr]. s_ChronoModuleInfo. b_CycleMode == APCI1710_CONTINUOUS) { /*************************/ /* Clear status register */ /*************************/ outl(0,devpriv->s_BoardInfos. ui_Address + 36 + (64 * b_ModulNbr)); } break; } // if ((dw_Status & 2) == 2) else { /*******************************/ /* Test if measurement started */ /*******************************/ if ((dw_Status & 1) == 1) { /************************/ /* A start signal occur */ /************************/ *pb_ChronoStatus = 1; } // if ((dw_Status & 1) == 1) else { /***************************/ /* Measurement not started */ /***************************/ *pb_ChronoStatus = 0; } // if ((dw_Status & 1) == 1) } // if ((dw_Status & 2) == 2) } // if ((dw_Status & 8) == 8) if (dw_TimeOut == ui_TimeOut) { /*****************/ /* Timeout occur */ /*****************/ break; } else { /*************************/ /* Increment the timeout */ /*************************/ dw_TimeOut = dw_TimeOut + 1; mdelay(1000); } } // for (;;) /*****************************/ /* Test if stop signal occur */ /*****************************/ if (*pb_ChronoStatus == 2) { /**********************************/ /* Read the measured timing value */ /**********************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -