硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2539|回复: 4
收起左侧

[求助]关于DMA双缓存区的一些思考

[复制链接]

5

主题

24

回帖

39

积分

新手上路

积分
39
发表于 2022-1-1 16:45:46 | 显示全部楼层 |阅读模式
由于想要使用DAC+DMA实时对串口发过来的波形进行产生,我想到了硬汉之前的AD7606的双缓冲,如果我可以一边进行DAC转换,一边进行数据的填充,这样就很好。看了硬汉在V7板子上的例子,思路是用一个BUFFER,然后在半传输和传输的时候进行中断。产生如下几个问题。
1.SCB_InvalidateDCache_by_Addr((uint32_t *)(&ADCxValues[64]), 128);,此函数根据硬汉的描述“由于 STM32H7 Cache 的存在,凡是 CPU 和 DMA 都会操作到的存储器,我们都要注意数据一致性问题。对于本章节要实现的功能,要注意读 Cache 问题,防止 DMA 已经更新了缓冲区的数据,而我们读取的却是 Cache 里面缓存的。”是否在F4的情况下是不必要的。
2.stm32f4xx_hal_dma_ex.c中提供了HAL_DMAEx_MultiBufferStart函数,可以开启硬件自带的双缓冲模式,为何不采用?
3.我们的目的是用双缓冲一个进行操作一个由DMA与硬件交互,那么双缓冲模式下填满一个区之后是产生半传输中断还是传输中断呢?
4.如果仅仅是把地址可以调节成不连续的,那么STM32的双缓冲模式是否相较于硬汉的做法差别不大,从设计的角度来讲,如果双缓冲模式能够直接读取到现在在操作哪个区域则不需要中断,个人感觉会提高响应速度。但是如果用了这个模式还要开启中断,是否意义并不大。
除了有两个存储器指针之外,双缓冲区数据流的工作方式与常规(单缓冲区)数据流的一样。使能双缓冲区模式时,将自动使能循环模式(DMA_SxCR 中的 CIRC 位的状态是“无关”),并在每次事务结束时交换存储器指针。在此模式下,每次事务结束时,DMA 控制器都从一个存储器目标交换为另一个存储器目标。这样,软件在处理一个存储器区域的同时,DMA 传输还可以填充/使用第二个存储器区域。
————这个是手册原文。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115666
QQ
发表于 2022-1-1 21:51:11 | 显示全部楼层
1、F4不用,F4没有Cache。
2、一样,半缓冲更简单
3、都需要。
4、开中断的意义很大,需要发送中断消息给任务,在任务里面做信号处理等工作。
回复

使用道具 举报

3

主题

383

回帖

392

积分

高级会员

积分
392
发表于 2022-1-2 00:12:29 | 显示全部楼层
最近刚折腾完,DMA和空闲中断搜搜就行了很简单的
HAL_UARTEx_ReceiveToIdle_DMA()
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
回复

使用道具 举报

5

主题

24

回帖

39

积分

新手上路

积分
39
 楼主| 发表于 2022-1-2 08:21:24 | 显示全部楼层
cctv180 发表于 2022-1-2 00:12
最近刚折腾完,DMA和空闲中断搜搜就行了很简单的
HAL_UARTEx_ReceiveToIdle_DMA()
void HAL_UARTEx_RxEv ...

您说的是串口的DMA吧,有兴趣讨论一下这个东西吗,我现在的思路是,DAC用DMA双缓冲,串口使用中断接收数据然后DMA中断的时候填充到DAC里面。您如果擅长于串口DMA,我i现在想了一个思路,能不能让串口的接收时间比DAC转换时间短的这个情况下实现帧同步,就是串口的DMA也是双缓冲,DAC的DMA也是双缓冲,串口接收到数据之后根据DAC的情况区填充另一个区
回复

使用道具 举报

5

主题

24

回帖

39

积分

新手上路

积分
39
 楼主| 发表于 2022-1-3 12:07:04 | 显示全部楼层
eric2013 发表于 2022-1-1 21:51
1、F4不用,F4没有Cache。
2、一样,半缓冲更简单
3、都需要。

基本上功能都实现了,但是存在一个问题,就是我打开DMA中断之后,如果把TIM6的速度调到128*1000以上程序就会卡死(F4),也就是波形的频率达到1000HZ以上,调试的时候是卡死在DMA中断里边。这个有什么办法解决吗,之前我的思路是调高BUFFER的长度一次发多个周期的数据过去,去解决这个问题,这样半传输中断的时间就会长一点就不会那么着急进入中断,想问问我这个思路有错吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-10 15:24 , Processed in 0.233163 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表