Other Parts Discussed in Thread: MSPM0G3519
器件型号: MSPM0G3519
尊敬的团队:
我们在系统中使用 MSPM0G3519 MCU、总共 14 个 ADC 通道配置如下:
ADC12_0:7 个通道
ADC12_1:7 个通道
目前、使用 ADC_GetRawValue (x、y) API 每 500ms 读取一次 ADC 值。 此实现可正常工作、并且所有通道值均按预期读取。
为了减少 CPU 开销、我们尝试使用 DMA 将 ADC 转换结果直接传输到 RAM 中。 但是、传输的数据不可靠。 一些通道偶尔会包含 0、即使对于恒定输入(例如,固定输入电压)的输入也是如此、在这种情况下、需要零值。
当前的 DMA 配置为:
DMA 样本计数:7.
DMA 触发器:MEM6 结果加载中断
地址模式:固定地址→块地址
自动启用:已禁用
源长度:半字(16 位)
目标长度:半字(16 位)
传输大小:7.
传输模式:重复块
设置: settings.txt
记录的 ADC 数据: DMA_Buffer.csv
INIT、
/*----- ADC0 DMA ---------------- */
DL_DMA_setSrcAddr (DMA、DMA_CH0_CHAN_ID、DL_ADC12_getFIFOAddress (ADC12_0_INST));
DL_DMA_setDestAddr (DMA、DMA_CH0_CHAN_ID、(uint32_t) ADC0_DMA_BUFFER);
DL_DMA_enableChannel (DMA、DMA_CH0_CHAN_ID);
/*----- ADC1 DMA ----------- */
DL_DMA_setSrcAddr (DMA、DMA_CH1_CHAN_ID、DL_ADC12_getFIFOAddress (ADC12_1_INST));
DL_DMA_setDestAddr (DMA、DMA_CH1_CHAN_ID、(uint32_t) ADC1_DMA_BUFFER);
DL_DMA_enableChannel (DMA、DMA_CH1_CHAN_ID);
我们期望在 7 通道转换序列完成后、DMA 将七个 16 位 ADC 结果传输到 RAM 缓冲区中。
我们想澄清以下几点:
- MSPM0G3519 ADC 是否支持将 7 通道转换序列直接传输到 RAM 中?
- 如果是、此用例的建议 DMA 配置是什么?
- MEM6 结果是否加载了正确的 DMA 触发器、或者是否应该使用不同的 ADC 事件?
- 是否需要任何其他 ADC 或 DMA 设置才能可靠地传输重复的多通道转换序列?
此致、
亚伯拉罕