Ejemplo n.º 1
0
void motorsInit()
{
#ifdef M451
	CLK_EnableModuleClock(PWM0_MODULE);
	CLK_SetModuleClock(PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, 0);

	SYS->GPC_MFPL = (SYS->GPC_MFPL 
	& (~SYS_GPC_MFPL_PC0MFP_Msk)
	& (~SYS_GPC_MFPL_PC1MFP_Msk)
	& (~SYS_GPC_MFPL_PC2MFP_Msk)
	& (~SYS_GPC_MFPL_PC3MFP_Msk)
#ifdef HEX6X 
	& (~SYS_GPC_MFPL_PC4MFP_Msk)
#endif
	);
#ifdef HEX6X 
	SYS->GPD_MFPL = (SYS->GPD_MFPL 
	& (~SYS_GPD_MFPL_PD7MFP_Msk)
	);
#endif
	SYS->GPC_MFPL |= (SYS_GPC_MFPL_PC0MFP_PWM0_CH0|SYS_GPC_MFPL_PC1MFP_PWM0_CH1|
	SYS_GPC_MFPL_PC2MFP_PWM0_CH2|SYS_GPC_MFPL_PC3MFP_PWM0_CH3
#ifdef HEX6X 
	|SYS_GPC_MFPL_PC4MFP_PWM0_CH4
#endif
	);
#ifdef HEX6X 
	SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD7MFP_PWM0_CH5);
#endif
	PWM_ConfigOutputChannelf(PWM0, 0, ESC_UPDATE_FREQ, ESC_UPDATE_FREQ/10);
	PWM_ConfigOutputChannelf(PWM0, 1, ESC_UPDATE_FREQ, ESC_UPDATE_FREQ/10);
	PWM_ConfigOutputChannelf(PWM0, 2, ESC_UPDATE_FREQ, ESC_UPDATE_FREQ/10);
	PWM_ConfigOutputChannelf(PWM0, 3, ESC_UPDATE_FREQ, ESC_UPDATE_FREQ/10);
#ifdef HEX6X 
	PWM_ConfigOutputChannelf(PWM0, 4, ESC_UPDATE_FREQ, ESC_UPDATE_FREQ/10);
	PWM_ConfigOutputChannelf(PWM0, 5, ESC_UPDATE_FREQ, ESC_UPDATE_FREQ/10);
#endif

	motorsSetRatio(MOTOR_M1, 0);
	motorsSetRatio(MOTOR_M2, 0);
	motorsSetRatio(MOTOR_M3, 0);
	motorsSetRatio(MOTOR_M4, 0);
#ifdef HEX6X 
	motorsSetRatio(MOTOR_M5, 0);
	motorsSetRatio(MOTOR_M6, 0);
#endif

	PWM_EnableOutput(PWM0, PWM_CH_0_MASK);
	PWM_EnableOutput(PWM0, PWM_CH_1_MASK);
	PWM_EnableOutput(PWM0, PWM_CH_2_MASK);
	PWM_EnableOutput(PWM0, PWM_CH_3_MASK);
#ifdef HEX6X 
	PWM_EnableOutput(PWM0, PWM_CH_4_MASK);
	PWM_EnableOutput(PWM0, PWM_CH_5_MASK);
#endif
#else
	uint8_t u8Timer;

	DrvPWM_Open();
	DrvGPIO_InitFunction(E_FUNC_PWM01);
	DrvGPIO_InitFunction(E_FUNC_PWM23);

	s_u32Pulse = 0;
	g_u8PWMCount = 1;
	g_u16Frequency = ESC_UPDATE_FREQ;
	sPt.u8Mode = DRVPWM_AUTO_RELOAD_MODE;
	sPt.u32Frequency = g_u16Frequency;
	sPt.u8HighPulseRatio = 1;
	sPt.u8HighPulseBase = 1000000/g_u16Frequency;
	sPt.i32Inverter = 0;

	u8Timer = DRVPWM_TIMER0;
	DrvPWM_SelectClockSource(u8Timer, DRVPWM_HCLK);
	DrvPWM_SetTimerClk(u8Timer, &sPt);
	DrvPWM_SetTimerIO(u8Timer, 1);

	u8Timer = DRVPWM_TIMER1;
	DrvPWM_SelectClockSource(u8Timer, DRVPWM_HCLK);
	DrvPWM_SetTimerClk(u8Timer, &sPt);
	DrvPWM_SetTimerIO(u8Timer, 1);

	u8Timer = DRVPWM_TIMER2;
	DrvPWM_SelectClockSource(u8Timer, DRVPWM_HCLK);
	DrvPWM_SetTimerClk(u8Timer, &sPt);
	DrvPWM_SetTimerIO(u8Timer, 1);

	u8Timer = DRVPWM_TIMER3;
	DrvPWM_SelectClockSource(u8Timer, DRVPWM_HCLK);
	DrvPWM_SetTimerClk(u8Timer, &sPt);
	DrvPWM_SetTimerIO(u8Timer, 1);
#endif
}
Ejemplo n.º 2
0
char PWM_Single_out(uint32_t Frequency,uint8_t port,uint8_t period)
{
	S_DRVPWM_TIME_DATA_T sPt;
	uint8_t u8Timer;
	if(port<1&&port>4) return 1;
	if(period<1&&port>99) return 1;
	DrvGPIO_InitFunction(E_FUNC_PWM0);
	DrvGPIO_InitFunction(E_FUNC_PWM1);
   	DrvGPIO_InitFunction(E_FUNC_PWM2);
  	DrvGPIO_InitFunction(E_FUNC_PWM3);
  	DrvGPIO_InitFunction(E_FUNC_PWM4);
  	DrvGPIO_InitFunction(E_FUNC_PWM5);
  	DrvGPIO_InitFunction(E_FUNC_PWM6);
  	DrvGPIO_InitFunction(E_FUNC_PWM7);
	sPt.u8Mode = DRVPWM_AUTO_RELOAD_MODE;
    sPt.u32Frequency = Frequency;
    sPt.u8HighPulseRatio = period;   /* High Pulse peroid : Total Pulse peroid = 1 : 100 */ 
    sPt.i32Inverter = 0;
    if(port==1)
	{	
		u8Timer=DRVPWM_TIMER0;          
	}                           
	else if(port==2)
	{
		u8Timer=DRVPWM_TIMER1;	
	}
	else if(port==3)
	{
		u8Timer=DRVPWM_TIMER2;	
	}    
	else if(port==4)
	{
		u8Timer=DRVPWM_TIMER3;	
	}    
	else if(port==5)
	{
		u8Timer=DRVPWM_TIMER4;	
	}    
	else if(port==6)
	{
		u8Timer=DRVPWM_TIMER5;	
	}    
	else if(port==7)
	{
		u8Timer=DRVPWM_TIMER6;	
	}    
	else if(port==8)
	{
		u8Timer=DRVPWM_TIMER7;	
	}        
        /* Select PWM engine clock */
        DrvPWM_SelectClockSource(u8Timer, DRVPWM_HCLK);
                        
        /* Set PWM Timer0 Configuration */
        DrvPWM_SetTimerClk(u8Timer, &sPt);

        /* Enable Output for PWM Timer0 */
        DrvPWM_SetTimerIO(u8Timer, port);

        /* Enable Interrupt Sources of PWM Timer0 and install call back function */
                                                            
        /* Enable the PWM Timer 0 */
        DrvPWM_Enable(u8Timer, port);    
                                                            
        /*--------------------------------------------------------------------------------------*/
        /* Stop PWM Timer0 (Recommended procedure method 2)                                     */
        /* Set PWM Timer counter as 0, When interrupt request happen, disable PWM Timer         */
        /* Set PWM Timer counter as 0 in Call back function                                     */
        /*--------------------------------------------------------------------------------------*/
                                
        /* Disable the PWM Timer 0 */
		return 0;
}