你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F42X ADC连续采样与DMA传输是否会与CPU读取冲突

[复制链接]
Bug_Mkaer 提问时间:2022-7-23 10:39 / 未解决
若使能ADC的连续采样并使用DMA传递到指定数组,若CPU在进行同一个数据地址的读取时,恰好碰上DMA正在传输,导致此时读取出来的数据出现错误?
收藏 评论5 发布时间:2022-7-23 10:39

举报

5个回答
网络孤客 回答时间:2022-7-23 11:59:20
会,要采取一定措施。
如:DMA后,把数据立即转存;传递前半段,只允许范围后半段,半传递后,则只允许范围前半段。
yklstudent 回答时间:2022-7-24 08:46:30
接收完数据,可以触发中断关闭ADC+DMA,处理数据后再打开ADC+DMA
xmshao 回答时间:2022-7-24 15:18:09
因为CPU和DMA共同访问相关内存区发生访问竞争是正常的,你这里说的读取出来的数据出现错
误 如果是指因为发生访问竞争 导致读取的数据莫名地改变而发生错误是不会的,


但是 有可能发生读到的数据跟最新数据不一致的情况。那就要靠你的程序逻辑来保证了。
butterflyspring 回答时间:2022-7-25 11:21:58
这是个逻辑问题。通常在DMA半完成或完成中断里或中断后去读取数据。 当然如果不这样做,就有可能遇到CPU和DMA去同时访问一个地址,这时候会有仲裁。只是你的软件不会立刻知道当前的数据是新的还是旧的。
Bug_Mkaer 回答时间:2022-7-28 09:34:33
嗯嗯,关于处理数据时暂时关闭DMA这个动作没问题的,我的问题其实不是不知道怎么处理这个问题。主要是文档里没看到明确说明这一块的总线访问竞争机制,所以好奇。例如说原本的旧数据是0x12345678,现在DMA要更新0x9abcdef,如果CPU的读取与DMA的传输刚好撞上,数据总线响应哪一个?如果DMA传输了一般数据后,CPU要求读取数据,是CPU读取挂起等待DMA传完后再读取还是把当前数据读走?同理,DMA要求传输数据时撞上CPU正在读取或者写,那DMA是挂起等待还是直接开始传输?

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版