我正在尝试获取一个 PWM 脉冲序列、这些脉冲通过使用单次触发 PWM 模式以菊花链方式连接计时器1和2的 A 和 B 计时器生成。 如果我将 PHASE_PERIOD 设置为适合16位的任何值、则以下代码正常工作。 如果我将 PHASE_PERIOD 设置为超过16位、则看起来计时器会递减计数、直到第一次计时器1A 的16个最低有效位到达零、计时器1A 使能被清除、然后一切都停止。 即使我尝试重新启用计时器1A、使能看起来会立即被清除、计时器也会立即停止。
该文档并未讨论使用单触发 PWM 模式、TI 库本身也不支持该模式。 我必须为它定义自己的配置。 它是有效的工作模式吗?
#define PHASE_PERIOD (65536U)
#define TIMER_CFG_A_ONE_SHOT_PWM (0x009)
#define TIMER_CFG_B_ONE_SHOT_PWM (0x900)
uint32_t load;
TimerConfigure (Timer1_base、timer_CFG_SPLIT_PAIR | timer_CFG_A_ONE_SHOT_PWM | timer_CFG_B_ONE_SHOT_PWM);
/*相位 C PWM */
GPIOPinConfigure( GPIO_PS0_T2CCP0 );
GPIOPinTypeTimer( GPIO_PORTS_BASE,GPIO_PIN_0 );
/*相位 D PWM */
GPIOPinConfigure( GPIO_PS1_T2CCP1 );
GPIOPinTypeTimer( GPIO_PORTS_BASE,GPIO_PIN_1 );
TimerConfigure (TIMER2_base、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT_PWM | TIMER_CFG_B_ONE_SHOT_PWM);
负载= PHASE_PERIOD;
// A 相和 B 相 PWM 控制。
TimerLoadSet (Timer1_base、timer_both、load 和0xFFFF);
TimerPrescaleSet (Timer1_base、timer_both、load >> 16);
//相位 C 和 D PWM 控制。
TimerLoadSet (TIMER2_base、timer_both、load & 0xFFFF);
TimerPrescaleSet (TIMER2_base、timer_both、load >> 16);
///相 B-D 在开始前等待前一个定时器超时。
TimerControlWaitOnTrigger (Timer1_base、timer_B、true);
TimerControlWaitOnTrigger (TIMER2_base、timer_both、true);
load /= 2;
TimerMatchSet (Timer1_base、timer_both、load 和0xFFFF);
TimerPrescaleMatchSet (Timer1_base、timer_both、load >> 16);
TimerMatchSet (TIMER2_base、timer_both、load & 0xFFFF);
TimerPrescaleMatchSet (TIMER2_base、timer_both、load >> 16);
while (true)
{
if ((HWREG (TIMER2_base + TIMER_O_CTL)& TIMER_CTL_TBEN)=0)
{
// TODO:设置加热器相位占空比
//首先启用2,因为它在计时器1完成后才会启动。
TimerEnable( TIMER2_base,timer_both );
TimerEnable( Timer1_base,timer_both );
}
}
}
感谢你的帮助。

