搜索
查看: 3144|回复: 5

[讨论] 关于DMA搬运和CPU运行是否冲突

[复制链接]

该用户从未签到

2

主题

2

帖子

0

蝴蝶豆

新手上路

最后登录
2023-7-28
发表于 2019-7-21 12:49:29 | 显示全部楼层 |阅读模式
现在设计程序,习惯主程序里面一直运行AD,dma运行搬运到数组;每隔一段时间读取ad值;另外还有串口收发也是dma
如果是dma在一直传输数据,cpu执行其他代码有影响吗?比如dma在写ram的同时,cpu也读该ram;并且是cpu先读了一半(比如16位数据的前8位),此时dam写该ram;怎么保证读到的数据不会出错


回复

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2019-7-22 14:39:08 | 显示全部楼层
    本帖最后由 toofree 于 2019-7-22 14:40 编辑

    对于只有一组系统总线的,CPU运行和DMA搬运的确有冲突。CPU操作系统总线时,DMA是不能操作的,但是系统总线也是有仲裁机制的,使得CPU和DMA分时复用系统总线。
    以STM32F103系列为例,DMA占用的总线周期最大不能超过总带宽的一半;换句话说,留给CPU的占用系统总线的时候至少超过一半。
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    20

    主题

    1628

    帖子

    5

    蝴蝶豆

    论坛元老

    最后登录
    2022-6-7
    发表于 2019-7-22 13:50:54 | 显示全部楼层
    DMA搬运完了会有标志位或者中断,等DMA搬运完成了再去读值就行了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    74

    主题

    3420

    帖子

    82

    蝴蝶豆

    社区小助手

    最后登录
    2023-11-12
    发表于 2019-7-22 13:52:03 | 显示全部楼层
    等待DMA传输结束标志位到来了再读
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    185

    帖子

    8

    蝴蝶豆

    金牌会员

    最后登录
    2021-12-10
    发表于 2019-7-22 14:41:29 | 显示全部楼层
    CPU和DMA使用公共资源的时候是有仲裁机制的,这都做到MCU内部了,具体机理是不清楚的也不需要管的,这都涉及到另外的领域了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    331

    帖子

    43

    蝴蝶豆

    金牌会员

    最后登录
    2021-2-3
    发表于 2019-7-22 16:32:21 | 显示全部楼层
    搬运的过程与CPU没有关系,运行完毕产生中断是硬件出发,CPU才去动作
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-27 06:07 , Processed in 0.182840 second(s), 38 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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