Exemplo n.º 1
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;
}
Exemplo n.º 2
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
}
Exemplo n.º 3
0
//*****************************************************************************
//
//! \brief PWM Output.
//!
//! \param None  
//!
//! \return None  
//
//*****************************************************************************
void PWMOutput(void)
{
    S_DRVPWM_TIME_DATA_T sPt;
    int32_t i32Loop = 1;

    UNLOCKREG();
    //
    // P5.1 -> XTAL2, P5.0 -> XTAL1
    //
    GCR->P5_MFP = (GCR->P5_MFP & 0x00FFFCFC) | 0x03;
    CLK->PWRCON_BITS.XTLCLK_EN = 1;

    //
    // Waiting for 12M Xtal stalble
    //
    DrvSYS_Delay(5000);
     
    //
    //Enable PWM clock
    //
    DrvPWM_Open();
	  CLK->CLKSEL1_BITS.PWM23_S = 2;
    
    //
    // Set PWM pin
    //
    DrvGPIO_InitFunction(FUNC_PWM3);

    UNLOCKREG();
    DrvSYS_SelectHCLKSource(0);
    LOCKREG();

    while(i32Loop)
    {

        uint8_t u8ItemOK;

        u8ItemOK = 1;
        g_u16Frequency = 256;


        if (u8ItemOK && g_u8PWMCount == 0)
        {
            s_u32Pulse = 0;
            g_u8PWMCount = 1;
            //
            // PWM Timer property
            //
            sPt.u8Mode = DRVPWM_AUTO_RELOAD_MODE;
            sPt.u32Frequency = g_u16Frequency;
            //
            // High Pulse peroid : Total Pulse peroid = 10 : 90
            //
            sPt.u8HighPulseRatio = 90;
            sPt.i32Inverter = 0;
            
            //
            // Set PWM Timer Configuration 
            //
            DrvPWM_SetTimerClk(DRVPWM_TIMER3, &sPt);

            //
            // Enable Output for PWM Timer */
            //
            DrvPWM_SetTimerIO(DRVPWM_TIMER3, 1);
            
            //
            // Enable Interrupt Sources of PWM Timer and install call back function
            //
            DrvPWM_EnableInt(DRVPWM_TIMER3, PWM_INT_PERIOD, PWMA_IRQHandler, 0);
            
            //
            //Enable the PWM Timer
            //
            DrvPWM_Enable(DRVPWM_TIMER3);

            while (g_u8PWMCount);
            DrvPWM_Disable(DRVPWM_TIMER3);
          }
    }
    DrvPWM_Close();
}