

我的死区配置如图所示。通道1为ECAP生成的APWM,其脉宽为死区值,通过DMA触发的中断来读取PWM5B的死区寄存器数据,并且不是shadow模式。通道2和通道4分别为PWM4A和PWM5B。死区会通过DMA在cnt = prd的时候进行装载。死区配置使用immediately模式,现在发现死区对于PWM4A而言会立刻生效,对于PWM5b而言,会延迟生效。通道1的上升沿代表DMA传输完成的时刻。
为什么死区的下降沿延时不会立刻生效,上升沿却可以?


我的死区配置如图所示。通道1为ECAP生成的APWM,其脉宽为死区值,通过DMA触发的中断来读取PWM5B的死区寄存器数据,并且不是shadow模式。通道2和通道4分别为PWM4A和PWM5B。死区会通过DMA在cnt = prd的时候进行装载。死区配置使用immediately模式,现在发现死区对于PWM4A而言会立刻生效,对于PWM5b而言,会延迟生效。通道1的上升沿代表DMA传输完成的时刻。
为什么死区的下降沿延时不会立刻生效,上升沿却可以?
几个注意事项:
DMA本身一次只能服务于一个DMA通道,并且默认情况下会执行循环方案来服务于每个通道。除了CH4和CH5之外,还有其他DMA通道使能吗?CH4和CH5是否由相同的条件(同时)触发?
对于这两种情况,您是否在传输结束ISR开始时切换GPIO(示波器截图的黄色通道)?
我也不建议使用DMA单次触发模式,除非您希望在每个触发条件下都进行完整的传输。如果在两个DMA通道上都禁用此设置,是否可以解决您的问题?
最诚挚的问候,
我还是有点困惑。为了澄清,在我上面提到CH4和CH5的回答中,我说的是DMA通道。您提到的延迟是PWM线路上的延迟(意外)还是DMA传输结束ISR中的延迟?请单独回答我的上述问题,以便我能更好地理解。
根据我当时的理解,您看到的延迟似乎是由于我提到的DMA通道循环造成的,尤其是在您配置了5个不同通道的情况下。请参见TRM的相关文档。
对所有DMA通道的传输结束ISR进行分析,以查看是否有不同的通道阻碍了DMA CH5传输,这将很有帮助。例如,如果CH4传输被服务,并且通道1的触发在CH5触发进入之后但之前进入,则该传输将在CH5之前由DMA服务。