DMA 功能
EPWM 支持 DMA 的功能,使能 DMA 后,DMA 的请求信号可以通过寄存器配置,选择 EPWM_CNT_Z、EPWM_CNT_PRD、EPWM_CNT_UA、EPWM_CNT_DA、EPWM_CNT_UB、EPWM_CNT_DB、EPWM_CNT_UC、EPWM_CNT_DC、EPWM_CNT_UD、EPWM_CNT_DD、PUL_CNT_ZRO。
DMA 的搬运支持单次对一个寄存器进行写入,或者单次对多个寄存器写入的模式。
- 单次对一个寄存器写入,在 DMA 请求信号到来,DMA 根据 DMA 通道的配置,将 SRAM 的数据写到 EPWM 的某一寄存器地址中。下图举例为在 EPWM_CNT_UB 的时刻触发 DMA,对寄存器 EPWM_CNT_AV 的数值进行修改。

- 单次对多个寄存器写入,这里需要配置 EPWM 的寄存器 DMA_MAP_EN = 0x1,使能 DMA 的映射功能,并且通过寄存器 DMA_CYC_NUM
配置单次写入寄存器的数量,最多支持 8 个寄存器的写入。另外 DMA 的映射功能使能后,通过寄存器 EPWM_DMA_MAP0 和 EPWM_DMA_MAP1
进行映射表的设置。
现在假设需要进行单次对两个寄存器的写入(分别是 EPWM_CNT_PRD 和 EPWM_CNT_AV),那么初始化的配置如下:
1、DMA_MAP_EN= 0x1,使能 DMA 的寄存器映射功能;
2、DMA_CYC_NUM= 0x1,设置 DMA 单次写入的寄存器的数量为 2;
3、设置 EPWM_DMA_MAP0 字段的 DMA_CNT0_MAP 和 DMA_CNT1_MAP ,DMA_CNT0_MAP 代表的是 DMA 写入第一个寄存器的偏移地址,这里设置 EPWM_CNT_PRD 的偏移地址 0x00,而 DMA_CNT1_MAP 代表的是第二个寄存器的偏移地址,这里设置 EPWM_CNT_AV 的偏移地址 0x14;
4、需要写入寄存器的数值,可以对寄存器地址 EPWM_DMA_ENTRY 依次写入;
5、通过上述的配置后,在 DMA 请求触发 DMA 动作后,DMA 会按照映射表将 EPWM_DMA_ENTRY 的内容依次写入到目标地址。