Thread 中讨论的其他器件:MSPM0G3507
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
> IF ((temp2 & DL_TIMER_IIDX_CC0_UP)== DL_TIMER_IIDX_CC0_UP)
IIDX 是一个小整数、而不是位矢量[Ref TRM (SLAU846B) 表 27-38]。 具体而言、CCU0 为 0x09、CCD0 为 0x05。 这会意外地工作、因为(我想)您只启用了两个中断。 这应该是:
> IF (temp2 =DL_TIMER_IIDX_CC0_UP)
-----
> DL_TimerG_clearInterruptStatus (TIMER_HALL_C_INST、DL_TIMER_IIDX_CC0_UP);
该函数需要一个位矢量、而不是 IIDX 值[参考 TRM 表 27-56]、因此这会清除一些其他条件。 如果您想执行此操作、结果如下所示:
> DL_TimerG_clearInterruptStatus (TIMER_HALL_C_INST、DL_TIMER_INTERRUPT_CC0_UP_EVENT);
但是、读取 IIDX 寄存器会自动清除中断条件、因此您根本不需要此行。
(例如) “组合脉宽和周期时间“用例[TRM (SLAU846B) 第 27.2.3.1.2.4]节对此进行了介绍。 关键在于步骤 (6) 中设置 IFCTL:ISEL 以将两个计时器通道分配到同一输入引脚[参考 TRM 表 27-80];以及在步骤 (5) 中、其中两个通道的 CCCTL:CCOND 设置为 相反的(上升沿与下降沿)彼此相反[参考 TRM 表 27-73]。
此处的示例“timx_timer_mode_capture_duty_and_period"对此“对此进行了说明:
https://dev.ti.com/tirex/explore/node?node=A__ACdsrKl.4hX4Pw9rSp1lsA__MSPM0-SDK__a3PaaoK__LATEST
计时器设置是使用合成的计时器“模式“(DL_TIMER_CAPTURED_END_MODE_PULSE_WIDTH_AND_PERIOD) 完成的、因此大多数设置都在 Driverlib 代码中。
[遗憾的是、论坛似乎已丢失您的原始帖子、因此我猜 您正在使用 MSPM0G3507(或类似器件)。]
【编辑:更正了拼写错误。】