#include "SWM320.h" void PWMInit(void) { PWM_InitStructure PWM_initStruct; PWM_initStruct.clk_div = PWM_CLKDIV_8; //F_PWM = 20M/8 = 2.5M PWM_initStruct.mode = PWM_MODE_INDEP; //A路和B路独立输出 PWM_initStruct.cycleA = 10000; //2.5M/10000 = 250Hz PWM_initStruct.hdutyA = 2500; //2500/10000 = 25% PWM_initStruct.initLevelA = 1; PWM_initStruct.cycleB = 10000; PWM_initStruct.hdutyB = 5000; //5000/10000 = 50% PWM_initStruct.initLevelB = 1; PWM_initStruct.HEndAIEn = 0; PWM_initStruct.NCycleAIEn = 0; PWM_initStruct.HEndBIEn = 0; PWM_initStruct.NCycleBIEn = 0; PWM_Init(PWM0, &PWM_initStruct); PWM_Init(PWM1, &PWM_initStruct); PORT_Init(PORTA, PIN4, FUNMUX0_PWM0A_OUT, 0); PORT_Init(PORTA, PIN6, FUNMUX0_PWM0B_OUT, 0); PORT_Init(PORTA, PIN5, FUNMUX1_PWM1A_OUT, 0); PORT_Init(PORTA, PIN7, FUNMUX1_PWM1B_OUT, 0); PWM_Start(PWM0, 1, 1); PWM_Start(PWM1, 1, 1); } void SPKInit(void) { PWM_InitStructure PWM_initStruct; PWM_initStruct.clk_div = PWM_CLKDIV_8; //F_PWM = 120M/8 = 15M PWM_initStruct.mode = PWM_MODE_INDEP; //A路和B路独立输出 PWM_initStruct.cycleA = 24000; //24M/24000 = 1KHz PWM_initStruct.hdutyA = 12000; //12/24 = 50%, PWM_initStruct.initLevelA = 1; PWM_initStruct.cycleB = 12000; //24000K/120 = 200KHZ PWM_initStruct.hdutyB = 6000; //60/120 = 50% PWM_initStruct.initLevelB = 1; PWM_initStruct.HEndAIEn = 0; PWM_initStruct.NCycleAIEn = 0; PWM_initStruct.HEndBIEn = 0; PWM_initStruct.NCycleBIEn = 0; PWM_Init(PWM0, &PWM_initStruct); PORT_Init(PORTB, PIN0, FUNMUX0_PWM0A_OUT, 0);//SPK } void SPKSet(uint8_t on, uint32_t frq) { int d = 7500000 / frq, t = 15000000 / frq; PWM_SetHDuty(PWM0, PWM_CH_A, d); PWM_SetCycle(PWM0, PWM_CH_A, t); if(on) { PWM_Start(PWM0, 1, 0); } else { PWM_Stop(PWM0, 1, 0); } }