硬汉嵌入式论坛

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

[STM32H7] 中断、DMA访问同一块DTCM发生冲突

[复制链接]

62

主题

99

回帖

285

积分

高级会员

积分
285
发表于 2025-8-22 11:24:56 | 显示全部楼层 |阅读模式
请教:

H7系统中,DMA通过SPI从ADC读取数据到一个环形缓冲区,CPU在时钟中断处理函数中读取该环形缓冲区,DMA是独立永不停歇在工作,此时有可能也在写数据(CPU和DMA没有严格同步),这种情况会不会产生冲突,影响数据的正确性呢(CPU读到旧数据可以接受,但是不能接受错误的随机数据)?

谢谢!
回复

使用道具 举报

5

主题

175

回帖

190

积分

初级会员

积分
190
发表于 2025-8-22 11:28:47 | 显示全部楼层
使用Cache进行回写SRAM,保证一致性。还有一般的DMA是无法访问TDCM的,需要使用MDMA实现搬运DMA的数据到DTCM。
回复

使用道具 举报

62

主题

99

回帖

285

积分

高级会员

积分
285
 楼主| 发表于 2025-8-22 20:35:39 | 显示全部楼层
2859932063 发表于 2025-8-22 11:28
使用Cache进行回写SRAM,保证一致性。还有一般的DMA是无法访问TDCM的,需要使用MDMA实现搬运DMA的数据到DTC ...

谢谢
回复

使用道具 举报

5

主题

291

回帖

306

积分

高级会员

积分
306
发表于 2025-8-23 08:58:50 | 显示全部楼层
mpu配置为write back,内核读缓冲区前,调用InvalidateDCache刷新一下cache就不会读到错误数据了
不过得注意下两种情况
一个是内核读数据速度比dma写数据慢,最差时可能读指针差了写指针一圈,这时dma继续写就会导致旧数据被覆盖
另一个是内核读速度比dma写速度快,内核一下子读20个数据,但dma只更新了10个,这样会导致内核读的后续10个是旧数据
你的环形缓冲区需要处理这些情况
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
118331
QQ
发表于 2025-8-23 09:13:23 | 显示全部楼层
除了前面坛友说的,这里还有一个核心的东西,h7系列是可以配置多个主控优先级的,包括cpu,所以不在冲突问题
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 16:40 , Processed in 0.039257 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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