我在 PWM 模式下使用 Timer5A 来产生一个始终为高电平的信号、除了每833us 生成一个周期性的100ns 低电平脉冲。 它可以正常工作、但不能在开始时工作。
代码:
//使用 Timer5A 在 T5CCP0、PB2上输出脉冲
//将半定时器配置为 PWM (0x0400000A)
MAP_TimerConfigure (TIMER5_base、TIMER_A、TIMER_CFG_A_PWM | TIMER_CFG_SPLIT_PAIR);
//将波形配置为在调试器中 CPU 暂停时暂停
MAP_TimerControlStall (TIMER5_base、TIMER_A、true);
//将输出电平配置为正常(未反相)
MAP_TimerControlLevel (TIMER5_base、TIMER_A、false);
//配置为在上升沿触发中断
MAP_TimerControlEvent (TIMER5_base、TIMER_A、TIMER_EVENT_POS_EDGE);
//设置 PWM 周期:在预分频器寄存器中放置高字节、在间隔加载寄存器中放置低字
MAP_TimerPrescaleSet (TIMER5_base、TIMER_A、(100000 >> 16)& 0xff);
MAP_TimerLoadSet (TIMER5_base、TIMER_A、100000和0xFFFF);
//设置 PWM 占空比:在预分频匹配寄存器中放入高字节、在匹配寄存器中放入低字
MAP_TimerPrescaleMatchSet (TIMER5_base、TIMER_A、(100 >> 16)& 0xff);
MAP_TimerMatchSet (TIMER5_base、TIMER_A、100和0xFFFF);
会发生很多其他事情;很多时间过去、然后:
//启用计时器
MAP_TimerEnable (TIMER5_base、TIMER_A);
该输出信号具有上拉电阻。 因此、在上电时、当引脚处于高阻抗状态时、信号会根据需要处于高电平。
问题是当 MAP_TimerConfigure()执行时,输出变为低电平并保持低电平。 之后,当 MAP_TimerEnable()执行时,输出将保持低电平,直到第一个833us 周期经过+ 100ns 低电平脉冲。 然后、它最终转换为高电平、并从该时刻起根据需要运行。
我需要消除这段较长的低输出周期、因为该信号会触发其他硬件、我需要避免不必要的转换。
在我看来,我应该将该引脚保留为 GPIO 并将其驱动为高电平,直到调用 MAP_TimerEnable()之后。
但这将不起作用、因为一旦焊盘配置为备用功能(计时器)、信号将变为低电平、从而产生不必要的转换、直到计时器在第一个周期内运行。
我是否可以对计时器执行任何操作来避免这种首次出现的现象?