完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试使用 DMA 通过 16 位 SPI 对 16 位 ADC 进行采样,并将这些值传输到滤波器。 我的代码还需要访问原始 ADC 数据和过滤后的数据,因此我还使用 DMA 将数值复制到 RAM 中。 我配置了 4 个 DMA 块。
我知道过滤器本身可以工作,因为我可以在软件中使用 Filter_Write16() 和 Filter_Read16()写入和读取数值。 我甚至试过直接向寄存器写入和读出:Filter_STAGEA16_PTR和Filter_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_PTR和Filter _ STAGEA16_PTR。 都不行。 我还需要注意的是,即使在软件中对滤波器进行写入/读取,我也看不到滤波器的 DMA_Req_A 输出有任何脉冲。 这是我的设置。 PWM 组件在 pwm1 上产生一个上升沿以触发 SPI DMA,然后在 pwm2 上产生一个上升沿以触发滤波 DMA。 状态寄存器可用于触发软件在适当的时候写入/读取滤波器。 |
|
相关推荐
1个回答
|
|
要解决 DMA 无法与数字滤波器一起工作的问题,我们可以按照以下步骤进行操作:
1. 确认硬件连接:首先,确保 ADC、SPI 和滤波器之间的硬件连接正确。检查所有接线和接口是否按照数据手册和原理图进行连接。 2. 检查 DMA 配置:确保 DMA 的配置正确。检查通道、源地址、目标地址、传输大小、传输方向等参数是否正确设置。 3. 检查滤波器接口:确保滤波器的接口与 DMA 兼容。检查滤波器的输入和输出接口是否支持 DMA 传输。 4. 更新软件驱动:检查是否有适用于您的硬件平台的最新软件驱动。如果有更新,请安装并重新编译您的项目。 5. 检查中断处理:确保 DMA 传输完成后,中断处理函数能够正确处理数据。检查中断优先级设置,确保 DMA 传输完成后能够及时响应中断。 6. 调试和测试:使用调试工具逐步跟踪代码执行过程,检查 DMA 传输过程中是否有异常。在调试过程中,可以使用示波器或逻辑分析仪观察 SPI 和滤波器的信号,以确保数据传输正常。 7. 优化代码:根据调试结果,优化代码以解决 DMA 与滤波器之间的兼容性问题。可能需要调整 DMA 传输参数、滤波器接口设置或中断处理逻辑。 8. 验证结果:在完成上述步骤后,重新运行您的项目,检查 DMA 与滤波器之间的数据传输是否正常。如果问题仍然存在,请考虑寻求专业人士的帮助或与硬件供应商联系。 通过以上步骤,您应该能够解决 DMA 无法与数字滤波器一起工作的问题。请确保在整个过程中仔细检查每个环节,以确保问题得到妥善解决。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
2722 浏览 2 评论
3978 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3455 浏览 9 评论
1117 浏览 8 评论
3392 浏览 7 评论
276浏览 2评论
124浏览 2评论
242浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
2736浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
269浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-24 08:24 , Processed in 0.634335 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191