应用场景如下:
ePWM1输出10k PWM信号,计数周期100us。希望以40k的开关频率 在0us 25us 50us 75us同步采样。
使用ePWM2 cnt=ZRO时作为ADC触发源。ePWM计数频率40k,ePWM1在cnt=ZRO输出同步信号同步ePWM2,保证两者同步。
实际算法在ePWM1的ISR中执行,即进入到ISR以后,可以访问过去四次ADC转换结果。现在希望用使用DMA,将过去四次ADC转换结果放到一个16x4的buffer中。
应该如何设置DMA呢?主要是Burst、Transfer、Wrap三个函数应该如何设置。
初步想法是一个Burst传输16个16位字,也就是16路ADC转换结果。如何保证4次AD转换DMA过程目标地址每次偏移16呢?
SPRUFB8这个文档看得云里雾里,不是太明白。
// DMA can only access ADC result at 0x0B00-0x0B0F
DMACH1AddrConfig(&AdDmaBuf[0], &AdcMirror.ADCRESULT0);
DMACH1BurstConfig(16-1, 1, 1);
DMACH1TransferConfig(9,-15,(-150 + 1));
DMACH1WrapConfig(100, 100, 100, 100);
DMACH1ModeConfig(
DMA_SEQ1INT,
PERINT_ENABLE,
ONESHOT_DISABLE,
CONT_DISABLE,
SYNC_DISABLE,
SYNC_SRC,
OVRFLOW_DISABLE,
SIXTEEN_BIT,
CHINT_END,
CHINT_ENABLE
);