⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apci1710_pwm.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
										   /******************/					   /* 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 + -