Tool/software: Code Composer Studio
Dear team
My customer used Timer PWM and PWM module to generate 250KHZ square wave.
He tested with an oscilloscope and found that the square wave frequency of the PWM module is very accurate, but the square wave generated by the Timer PWM jumps between 249.8~250.2 KHZ.
What is the problem? Please help because i do not have TM4C129 board.
uint32_t g_cpuFrequency = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); // timer ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); ROM_GPIOPinConfigure(GPIO_PD3_T1CCP1); ROM_GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_3); ROM_TimerConfigure(TIMER1_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PWM); ROM_TimerLoadSet(TIMER1_BASE, TIMER_B, 480); ROM_TimerMatchSet(TIMER1_BASE, TIMER_B, ROM_TimerLoadGet(TIMER1_BASE, TIMER_B) / 2); ROM_TimerEnable(TIMER1_BASE, TIMER_B); //PWM ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); ROM_GPIOPinConfigure(GPIO_PF0_M0PWM0); ROM_GPIOPinConfigure(GPIO_PF2_M0PWM2); ROM_GPIOPinConfigure(GPIO_PK4_M0PWM6); ROM_GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_2); ROM_GPIOPinTypePWM(GPIO_PORTK_BASE, GPIO_PIN_4); ROM_PWMClockSet(PWM0_BASE,PWM_SYSCLK_DIV_2); ROM_PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); ROM_PWMGenConfigure(PWM0_BASE, PWM_GEN_1, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); ROM_PWMGenConfigure(PWM0_BASE, PWM_GEN_3, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); ROM_PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 240); // 120M/2/240 = 250K ROM_PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, 240); ROM_PWMGenPeriodSet(PWM0_BASE, PWM_GEN_3, 480); ROM_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, ROM_PWMGenPeriodGet(PWM0_BASE, PWM_GEN_0) / 2); ROM_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, ROM_PWMGenPeriodGet(PWM0_BASE, PWM_GEN_1) / 2); ROM_PWMPulseWidthSet(PWM0_BASE, PWM_OUT_6, ROM_PWMGenPeriodGet(PWM0_BASE, PWM_GEN_3) / 2); ROM_PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true); ROM_PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, true); ROM_PWMOutputState(PWM0_BASE, PWM_OUT_6_BIT, true);