📄 apci1710_pwm.c
字号:
/******************/ /* Timer 0 factor */ /******************/ ul_HighTimerValue = (ULONG) (ul_HighTiming * (250000.0 * b_ClockSelection)); /*******************/ /* Round the value */ /*******************/ if ((double) ((double) ul_HighTiming * (250000.0 * (double) b_ClockSelection)) >= ((double) ((double) ul_HighTimerValue + 0.5))) { ul_HighTimerValue = ul_HighTimerValue + 1; } /*****************************/ /* Calculate the real timing */ /*****************************/ *pul_RealHighTiming = (ULONG) (ul_HighTimerValue / (250000.0 * (double) b_ClockSelection)); d_RealHighTiming = (double) ul_HighTimerValue / (250000.0 * (double) b_ClockSelection); if ((double) ((double) ul_HighTimerValue / (250000.0 * (double) b_ClockSelection)) >= (double) ((double) *pul_RealHighTiming + 0.5)) { *pul_RealHighTiming = *pul_RealHighTiming + 1; } ul_HighTiming = ul_HighTiming - 1; ul_HighTimerValue = ul_HighTimerValue - 2; if (b_ClockSelection != APCI1710_40MHZ) { ul_HighTimerValue = (ULONG) ((double) (ul_HighTimerValue) * 1.007752288); } break; /******/ /* mn */ /******/ case 4: /******************/ /* Timer 0 factor */ /******************/ ul_HighTimerValue = (ULONG) ((ul_HighTiming * 60) * (250000.0 * b_ClockSelection)); /*******************/ /* Round the value */ /*******************/ if ((double) ((double) (ul_HighTiming * 60.0) * (250000.0 * (double) b_ClockSelection)) >= ((double) ((double) ul_HighTimerValue + 0.5))) { ul_HighTimerValue = ul_HighTimerValue + 1; } /*****************************/ /* Calculate the real timing */ /*****************************/ *pul_RealHighTiming = (ULONG) (ul_HighTimerValue / (250000.0 * (double) b_ClockSelection)) / 60; d_RealHighTiming = ((double) ul_HighTimerValue / (250000.0 * (double) b_ClockSelection)) / 60.0; if ((double) (((double) ul_HighTimerValue / (250000.0 * (double) b_ClockSelection)) / 60.0) >= (double) ((double) *pul_RealHighTiming + 0.5)) { *pul_RealHighTiming = *pul_RealHighTiming + 1; } ul_HighTiming = ul_HighTiming - 1; ul_HighTimerValue = ul_HighTimerValue - 2; if (b_ClockSelection != APCI1710_40MHZ) { ul_HighTimerValue = (ULONG) ((double) (ul_HighTimerValue) * 1.007752288); } break; } fpu_end (); /****************************/ /* Save the clock selection */ /****************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_PWMModuleInfo. b_ClockSelection = b_ClockSelection; /************************/ /* Save the timing unit */ /************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_PWMModuleInfo. s_PWMInfo [b_PWM]. b_TimingUnit = b_TimingUnit; /****************************/ /* Save the low base timing */ /****************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_PWMModuleInfo. s_PWMInfo [b_PWM]. d_LowTiming = d_RealLowTiming; devpriv-> s_ModuleInfo [b_ModulNbr]. s_PWMModuleInfo. s_PWMInfo [b_PWM]. ul_RealLowTiming = *pul_RealLowTiming; /****************************/ /* Save the high base timing */ /****************************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_PWMModuleInfo. s_PWMInfo [b_PWM]. d_HighTiming = d_RealHighTiming; devpriv-> s_ModuleInfo [b_ModulNbr]. s_PWMModuleInfo. s_PWMInfo [b_PWM]. ul_RealHighTiming = *pul_RealHighTiming; /************************/ /* Write the low timing */ /************************/ outl(ul_LowTimerValue,devpriv->s_BoardInfos. ui_Address + 0 + (20 * b_PWM) + (64 * b_ModulNbr)); /*************************/ /* Write the high timing */ /*************************/ outl(ul_HighTimerValue,devpriv->s_BoardInfos. ui_Address + 4 + (20 * b_PWM) + (64 * b_ModulNbr)); /***************************/ /* Set the clock selection */ /***************************/ dw_Command=inl(devpriv->s_BoardInfos. ui_Address + 8 + (20 * b_PWM) + (64 * b_ModulNbr)); dw_Command = dw_Command & 0x7F; if (b_ClockSelection == APCI1710_40MHZ) { dw_Command = dw_Command | 0x80; } /***************************/ /* Set the clock selection */ /***************************/ outl(dw_Command,devpriv->s_BoardInfos. ui_Address + 8 + (20 * b_PWM) + (64 * b_ModulNbr)); /*************/ /* PWM init. */ /*************/ devpriv-> s_ModuleInfo [b_ModulNbr]. s_PWMModuleInfo. s_PWMInfo [b_PWM]. b_PWMInit = 1; } else { /***************************************************/ /* You can not used the 40MHz clock selection with */ /* this board */ /***************************************************/ DPRINTK("You can not used the 40MHz clock selection with this board\n"); i_ReturnValue = -9; } } else { /***************************************/ /* High base timing selection is wrong */ /***************************************/ DPRINTK("High base timing selection is wrong\n"); i_ReturnValue = -8; } } else { /**************************************/ /* Low base timing selection is wrong */ /**************************************/ DPRINTK("Low base timing selection is wrong\n"); i_ReturnValue = -7; } } // if ((b_TimingUnit >= 0) && (b_TimingUnit <= 4)) else { /**********************************/ /* Timing unit selection is wrong */ /**********************************/ DPRINTK("Timing unit selection is wrong\n"); i_ReturnValue = -6; } // if ((b_TimingUnit >= 0) && (b_TimingUnit <= 4)) } // if ((b_ClockSelection == APCI1710_30MHZ) || (b_ClockSelection == APCI1710_33MHZ) || (b_ClockSelection == APCI1710_40MHZ)) else { /*******************************/ /* The selected clock is wrong */ /*******************************/ DPRINTK("The selected clock is wrong\n"); i_ReturnValue = -5; } // if ((b_ClockSelection == APCI1710_30MHZ) || (b_ClockSelection == APCI1710_33MHZ) || (b_ClockSelection == APCI1710_40MHZ)) } // if (b_PWM >= 0 && b_PWM <= 1) else { /******************************/ /* Tor PWM selection is wrong */ /******************************/ DPRINTK("Tor PWM selection is wrong\n"); i_ReturnValue = -4; } // if (b_PWM >= 0 && b_PWM <= 1) } else { /**********************************/ /* The module is not a PWM module */ /**********************************/ DPRINTK("The module is not a PWM 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_GetPWMInitialisation || (BYTE_ b_BoardHandle, || BYTE_ b_ModulNbr, || BYTE_ b_PWM, || PBYTE_ pb_TimingUnit, || PULONG_ pul_LowTiming, || PULONG_ pul_HighTiming, || PBYTE_ pb_StartLevel, || PBYTE_ pb_StopMode, || PBYTE_ pb_StopLevel, || PBYTE_ pb_ExternGate, || PBYTE_ pb_InterruptEnable, || PBYTE_ pb_Enable) |+----------------------------------------------------------------------------+| Task : Return the PWM (b_PWM) initialisation from selected || module (b_ModulNbr). You must calling the || "i_APCI1710_InitPWM" function be for you call this || function. |+----------------------------------------------------------------------------+| Input Parameters : BYTE_ b_BoardHandle : Handle of board APCI-1710 || BYTE_ b_ModulNbr : Selected module number (0 to 3) || BYTE_ b_PWM : Selected PWM (0 or 1) |+----------------------------------------------------------------------------+| Output Parameters : PBYTE_ pb_TimingUnit : Base timing Unit (0 to 4) || 0 : ns || 1 : æs || 2 : ms || 3 : s || 4 : mn || PULONG_ pul_LowTiming : Low base timing value. || PULONG_ pul_HighTiming : High base timing value. || PBYTE_ pb_StartLevel : Start period level || selection || 0 : The period start || with a low level || 1 : The period start || with a high level|| PBYTE_ pb_StopMode : Stop mode selection || 0 : The PWM is stopped || directly after the || "i_APCI1710_DisablePWM"|| function and break the|| last period || 1 : After the || "i_APCI1710_DisablePWM"|| function the PWM is || stopped at the end || from last period cycle|| PBYTE_ pb_StopLevel : Stop PWM level selection || 0 : The output signal || keep the level after|| the || "i_APCI1710_DisablePWM"|| function || 1 : The output signal is|| set to low after the|| "i_APCI1710_DisablePWM"|| function || 2 : The output signal is|| set to high after || the || "i_APCI1710_DisablePWM"|| function || PBYTE_ pb_ExternGate : Extern gate action || selection || 0 : Extern gate signal || not used. || 1 : Extern gate signal || used. || PBYTE_ pb_InterruptEnable : Enable or disable the PWM || interrupt. |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -