您好!
我们希望使用 Tiva TM4C1294NCPDT uC 为我们的项目生成范围(1-1KHz)内的频率输出、固定为50%。
我已经在16位 PWM 模式中配置了通用定时器。 在使用预分频器时、我在调整计时器周期方面遇到问题。 我已将预分频器设置为4、从而允许最大加载值为327679 (0x4FFFF)。 对于50%占空比、最大匹配值为163839、因此我将预分频器匹配值设置为2。 只有当加载值高于262143 (0x3FFFF)(即预分频器3的最大值)时、PWM 输出才正确。 当装载值小于262144时、周期和半周期都为 false。
这是否意味着在使用预分频器4时、我只能写入范围为[327679、262144]且不小于262144的加载值? 我是否正确设置了预分频器? 或者是否有任何关于为加载和匹配值设置预分频器的系统详细信息?
#include <stdbool.h>
#include <stdint.h>
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_timer.h"
#include "inc/hw_types.h"
int main(void) {
SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120E6);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
while (!SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER3)) {}
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
while (!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOA)) {}
GPIOPinConfigure(GPIO_PA6_T3CCP0);
GPIOPinTypeTimer(GPIO_PORTA_BASE, GPIO_PIN_6);
TimerClockSourceSet(TIMER3_BASE, TIMER_CLOCK_PIOSC);
TimerPrescaleSet(TIMER3_BASE, TIMER_A, 4);
TimerPrescaleMatchSet(TIMER3_BASE, TIMER_A, 2);
TimerConfigure(TIMER3_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PWM);
uint32_t per= 327679;// 4FFFF
TimerLoadSet(TIMER3_BASE, TIMER_A, per);// Load Value
TimerMatchSet(TIMER3_BASE, TIMER_A, per / 2);// Match value
TimerEnable(TIMER3_BASE, TIMER_A);
while (1) {
}
}