关于dma传输的问题

inappropriate 2020-05-30 01:55:43
假如adc采样频率很快,用adc+dma的方式将数据送到内存中,而对数据处理的速度较慢,是不是dma的传输也会覆盖上一次没处理完的数据?那这样和直接对adc的数据寄存器操作有什么区别呢?
...全文
15920 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jacky_Lu 2020-07-08
  • 打赏
  • 举报
回复
如果处理不过来 证明不需要这么高的采样速度啊
qq_19531285 2020-07-06
  • 打赏
  • 举报
回复
楼上说的对,合理分配bufer存储数据,动态分配是最 好!
fly 100% 2020-07-06
  • 打赏
  • 举报
回复
dma 可以让出cpu ,动态分配buf 可以解决覆盖问题
Brendon_Tan 2020-07-05
  • 打赏
  • 举报
回复
先回答楼主的问题: 当配置ADC+DMA单缓存器单通道采样时,如果ADC采样速度快,读取速度慢,那么读取的ADC值是最近的值,和上次读取之间时间段的采样值都被刷新了,即丢失。 这种配置方式及读取机制,在功能上确实和直接读寄存器操作没区别;但是在运行机制上是不一样的,直接读取寄存器需要占用系统时钟处理,但是使用DMA就相当于CPU使用双线程,即不影响系统任务的运行,只是在一个内存区读取一个数据而已。 拓展:(仅参考) 如果是测量电压这种类似需要滤波的场景,可以采用 ADC+DMA 多缓存区配置。 以单通道ADC+DMA测量电压为例,配置ADC+ DMA,定义一个缓存BUF[20],每采一次样就把值存入BUF,同时存储地址++,即每次新的值刷新第前20个的历史值,保证BUF中每次都是最新的20个值;读取时,把BUF中的20个值取平均值,即当前电压值。这个方法可以起简单滤波作用。
明月清风旧 2020-07-02
  • 打赏
  • 举报
回复
adc寄存器只能保存一个数据,使用adc+dma可以保存大量数据而不需要cpu参与,这样可以减少cpu查询数据的频率。
worldy 2020-07-02
  • 打赏
  • 举报
回复
使用合适的缓存区
xuyaqi029 2020-05-30
  • 打赏
  • 举报
回复
像这种采样频率很快,数据处理的速度较慢,要想不丢数只能先保存后处理。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧