HPM6750 定时器与PWM方式 触发 DMA 区别

常规单片机(stm32系列)的 定时器与PWM是深度绑定的,一般定时器是直接分配4个或者多个通道输出PWM波形。而HPM6750是单独分开的,这就导致两者触发DMA传输时存在区别。

官方参考例子:

HPM6000系列PWM波尽在掌握(上)

HPM6000系列PWM波尽在掌握(下)

PWM+互联定时器 方式 实现DMA推GPIO指南

DMA助力实时控制

1. HPM6750常规定时器触发DMA方式,数据手册是这样描述的:

对应寄存器描述:

这样设计的结果,意味着在触发DMA传输时,定时器的单个通道只能共享DMA传输中断,不能按照CMP0、CMP1、RLD、捕获功能进行区分触发。要想按照功能区分触发,必须将定时器下辖的4个通道进行同步触发,并且重载值要设置相同才可行。

2. HPM6750内置的PWM触发DMA方式,数据手册是这样描述的:

对应寄存器描述:

分析看PWM工作模式下,是支持单个通道触发多种DMA功能,内部库函数看到了实现代码如下:

 1 /**
 2  * @brief enable pwm dma request
 3  *
 4  * @param[in] pwm_x PWM base address, HPM_PWMx(x=0..n)
 5  * @param[in] mask :
 6  *  @arg        PWM_IRQ_FAULT: fault condition DMA request enable
 7  *  @arg        PWM_IRQ_EX_RELOAD: extended reload flag DMA request enable
 8  *  @arg        PWM_IRQ_HALF_RELOAD: half reload flag DMA request enable
 9  *  @arg        PWM_IRQ_RELOAD: reload flag DMA request enable
10  *  @arg        PWM_IRQ_CMP(x)(x=0...n): comparator output compare or input capture flag DMA request enable
11  *
12  */
13 static inline void pwm_enable_dma_request(PWM_Type *pwm_x, uint32_t mask)
14 {
15     pwm_x->DMAEN |= mask;
16 }

但是没有看到官方实现的例子,具体怎么实现这个触发功能有待研究。而其中PWM功能框图如下:

分析看要想触发PWM部分的 DMA 需要通过其内部互联管理器,连接到DMAMUX才行,在手册中确实找到了对应的描述:

综上分析看,PWM模块也是单个通道共享DMA传输中断的方式,意味着其绑定DMA时可以绑定如下几个(在hpm_dmamux_src.h文件中定义):

 1 #define HPM_DMA_SRC_MOT0_0                                 (0x30UL)
 2 #define HPM_DMA_SRC_MOT0_1                                 (0x31UL)
 3 #define HPM_DMA_SRC_MOT0_2                                 (0x32UL)
 4 #define HPM_DMA_SRC_MOT0_3                                 (0x33UL)
 5 #define HPM_DMA_SRC_MOT1_0                                 (0x34UL)
 6 #define HPM_DMA_SRC_MOT1_1                                 (0x35UL)
 7 #define HPM_DMA_SRC_MOT1_2                                 (0x36UL)
 8 #define HPM_DMA_SRC_MOT1_3                                 (0x37UL)
 9 #define HPM_DMA_SRC_MOT2_0                                 (0x38UL)
10 #define HPM_DMA_SRC_MOT2_1                                 (0x39UL)
11 #define HPM_DMA_SRC_MOT2_2                                 (0x3AUL)
12 #define HPM_DMA_SRC_MOT2_3                                 (0x3BUL)
13 #define HPM_DMA_SRC_MOT3_0                                 (0x3CUL)
14 #define HPM_DMA_SRC_MOT3_1                                 (0x3DUL)
15 #define HPM_DMA_SRC_MOT3_2                                 (0x3EUL)
16 #define HPM_DMA_SRC_MOT3_3                                 (0x3FUL)

互联管理器TRGM的DMA管理方式的详细描述:

按照上述描述:1个互联管理器可以支持 4 个 DMA 请求,那么要想实现单个通道下多个捕获通道分开触发DMA,并识别发送完成中断是可以实现的,不过最多只能识别其中的4个通道DMA发送完整中断。 关于互联定时器的详细定义与使用,需要参考库函数:hpm_trgm_drv.h,该文件没有对应的 c文件。

其分配表如下:

 

posted @ 2023-11-17 09:48  求隐  阅读(1025)  评论(0)    收藏  举报