英飞凌
直播中

刘波

7年用户 937经验值
私信 关注

DMA无法与数字滤波器一起工作怎么解决?

我正在尝试使用 DMA 通过 16 位 SPI 对 16 位 ADC 进行采样,并将这些值传输到滤波器。 我的代码还需要访问原始 ADC 数据和过滤后的数据,因此我还使用 DMA 将数值复制到 RAM 中。 我配置了 4 个 DMA 块。

  • RAM -> SPI
  • SPI -> RAM
  • RAM -> 过滤器
  • 过滤器 -> RAM
进出 SPI 的 DMA 运行良好,我的代码可以看到 ADC 读数。 但是,DMA 进出过滤器似乎不起作用。 我阅读了文档,甚至尝试了 DMA 向导,我相当肯定我的设置是正确的。
我知道过滤器本身可以工作,因为我可以在软件中使用 Filter_Write16() 和 Filter_Read16()写入和读取数值。 我甚至试过直接向寄存器写入和读出:Filter_STAGEA16_PTRFilter_HOLDA16_PTR。 这样就成功了,我可以看到过滤后的数据。
不工作的是 DMA 到/从过滤器。 这就是我为过滤器配置 DMA 的方法:
#define DMA_To_Filter_BYTES_PER_BURST 2#define DMA_To_Filter_REQUEST_PER_BURST 1#define DMA_To_Filter_SRC_BASE (CYDEV_SRAM_BASE)#define DMA_To_Filter_DST_BASE (CYDEV_PERIPH_BASE)uint16 adc_result;uint8 DMA_To_Filter_Chan;uint8 DMA_To_Filter_TD;DMA_To_Filter_Chan = DMA_To_Filter_DmaInitialize(DMA_To_Filter_BYTES_PER_BURST, DMA_To_Filter_REQUEST_PER_BURST, HI16(DMA_To_Filter_SRC_BASE), HI16(DMA_To_Filter_DST_BASE));DMA_To_Filter_TD   = CyDmaTdAllocate();CyDmaTdSetConfiguration(DMA_To_Filter_TD, 2, DMA_To_Filter_TD, DMA_To_Filter__TD_TERMOUT_EN);CyDmaTdSetAddress(DMA_To_Filter_TD, LO16((uint32) adc_result), LO16((uint32)Filter_STAGEA16_PTR));CyDmaChSetInitialTd(DMA_To_Filter_Chan, DMA_To_Filter_TD);CyDmaChEnable(DMA_To_Filter_Chan, 1);
对于目标地址,我尝试了Filter_STAGEA_PTRFilter _ STAGEA16_PTR。 都不行。
我还需要注意的是,即使在软件中对滤波器进行写入/读取,我也看不到滤波器的 DMA_Req_A 输出有任何脉冲。
这是我的设置。 PWM 组件在 pwm1 上产生一个上升沿以触发 SPI DMA,然后在 pwm2 上产生一个上升沿以触发滤波 DMA。 状态寄存器可用于触发软件在适当的时候写入/读取滤波器。




回帖(1)

张玲

2024-7-17 11:32:12
要解决 DMA 无法与数字滤波器一起工作的问题,我们可以按照以下步骤进行操作:

1. 确认硬件连接:首先,确保 ADC、SPI 和滤波器之间的硬件连接正确。检查所有接线和接口是否按照数据手册和原理图进行连接。

2. 检查 DMA 配置:确保 DMA 的配置正确。检查通道、源地址、目标地址、传输大小、传输方向等参数是否正确设置。

3. 检查滤波器接口:确保滤波器的接口与 DMA 兼容。检查滤波器的输入和输出接口是否支持 DMA 传输。

4. 更新软件驱动:检查是否有适用于您的硬件平台的最新软件驱动。如果有更新,请安装并重新编译您的项目。

5. 检查中断处理:确保 DMA 传输完成后,中断处理函数能够正确处理数据。检查中断优先级设置,确保 DMA 传输完成后能够及时响应中断。

6. 调试和测试:使用调试工具逐步跟踪代码执行过程,检查 DMA 传输过程中是否有异常。在调试过程中,可以使用示波器或逻辑分析仪观察 SPI 和滤波器的信号,以确保数据传输正常。

7. 优化代码:根据调试结果,优化代码以解决 DMA 与滤波器之间的兼容性问题。可能需要调整 DMA 传输参数、滤波器接口设置或中断处理逻辑。

8. 验证结果:在完成上述步骤后,重新运行您的项目,检查 DMA 与滤波器之间的数据传输是否正常。如果问题仍然存在,请考虑寻求专业人士的帮助或与硬件供应商联系。

通过以上步骤,您应该能够解决 DMA 无法与数字滤波器一起工作的问题。请确保在整个过程中仔细检查每个环节,以确保问题得到妥善解决。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分