主题:SysConfig 中讨论的其他器件
工具/软件:
我尝试在 MSPM0 器件上通过 DMA 读取 12 位 ADC 的结果。
ADC 由 Timer0 零事件触发、该事件每秒发生一次(计时器周期= 1000ms)。
在每次触发时、ADC 执行 A 非重复通道序列转换 在 3 个 ADC 通道之间(配置的 MEM0、MEM1、MEM2)。
序列完成后、ADC 会将MEM2_RESULT_LOADED中断置为有效。 然后、这应该会触发 DMA、DMA 配置为将 ADC MEMx 寄存器的结果传输到数组中。
问题:
-
然后进行传输 只是第一次 计时器达到零。
-
每次后续 DMA 传输始终包含相同的第一组值、即使物理输入信号发生变化(例如,通道连接至 GND)也是如此。
-
如果我禁用 DMA 而不是使用 ADC 中断处理程序手动读取 MEMx 结果、则每个触发器的值都会正确更新。
我检查过的内容/观察结果:
-
ADC 序列本身正在工作并产生新的结果(通过 ISR 进行验证)。
-
DMA 通道已准备就绪、中断按预期触发(发生 DMA_DONE)。
-
但是、在第一次触发后、目标缓冲区永远不会使用新的转换进行更新。
-
缓冲区是一个 32 位数组、DMA 配置用于半字传输(可能的宽度不匹配?)。
-
源增量当前已启用(可能是错误的,因为所有结果都来自固定的 ADC MEM 寄存器)。
-
启用 ADC 后初始化 DMA - ADC 启用顺序与 DMA 设置顺序是否相关?
所以它似乎是一个 ADC12 DMA 触发与 DMA 通道设置之间的配置不匹配(宽度,增量,初始化序列) 而不是 ADC 问题。
请确认 针对多通道 ADC 序列的 DMA 的预期配置 (例如 srcIncrement,传输宽度,初始化顺序)?