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 }
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; }