HPM6750 定时器与PWM方式 触发 DMA 区别
常规单片机(stm32系列)的 定时器与PWM是深度绑定的,一般定时器是直接分配4个或者多个通道输出PWM波形。而HPM6750是单独分开的,这就导致两者触发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文件。
其分配表如下:

本文来自博客园,作者:求隐,转载请注明原文链接:https://www.cnblogs.com/duguqiuying/articles/17837981.html

浙公网安备 33010602011771号