硬汉嵌入式论坛

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

[Cache] 一个很矛盾的问题,希望有高速,又不希望处理cache而造成重大的延迟

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2021-3-19 20:13:58 | 显示全部楼层 |阅读模式
诸位前辈们,最近我最近在搞stm32h7系列,发生了一些问题,希望前辈们能给些建议。
      以下有二个功能都可是独立完成的。
        1、ADC1 12bit 10通道配合DMA中断,当ADC抟换成功时,会触发DMA(dma1)中断。
        2、timer中断(tim3),700ns完成一次中断。
        我将这两功能混合了。
        在透过timer中断来进行计数,在指定次数后,透过timer的中断函数触发ADC转换,之后再发生DMA中断。
        在DMA中断函数中将ADC转换的结果,储存起来,间期timer中断不会停止,直到1000次timer中断后,整体动作才结束。
        5次timer中断,触发一次ADC转换。
        
            
      而一切的动作皆是高速(小于1us)下执行,所以,不可以关闭i-cache和d-cache,
      但如果不关闭cache功能,将需要针对chace内部的资料进行重整(耗时巨大,违背了高速的前提)。
      
      我试过二个方法
      1)在将ADC触发前,执行SCB_DisableDCache();完成DMA中断后,再执行SCB_EnableDCache();耗时巨大
      2)每次在触发ADC转换前,执行SCB_CleanDCache();同样耗时巨大。
      
      
      这是个很矛盾的问题,希望有高速,又不希望因为处理cache而造成重大的延迟。
      有劳诸位前辈们,分享你们宝贵的想法和经验

      
      感谢帮忙。
回复

使用道具 举报

0

主题

215

回帖

215

积分

高级会员

积分
215
发表于 2021-3-19 22:06:38 | 显示全部楼层
把DMA需要的存储器区域设置为不使用cache。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2021-3-20 09:36:36 | 显示全部楼层
1、指令Cache和数据Cache不要关闭,DMA触发前不用调用,而是DMA触发后调用Cache无效化操作,而且仅对这个DMA缓冲地址空间做无效化,速度应该完全处理的过来。这个函数执行时间非常短的。
2、配置DMA所使用区域的空间关闭读Cache和写Cache,就像使用F4那种SRAM一样,随意读写。

对应此贴的最低性能配置:

使用STM32H7的AXI SRAM,SRAM1到SRAM4对应的Cache最高性能和最低性能配置
http://www.armbbs.cn/forum.php?m ... 9322&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2021-3-22 18:14:46 | 显示全部楼层
感谢,前辈的宝贵建议。
我作了二个验证。
1)每次触发ADC转换前,执行SCB_InvalidateDCache_by_Addr,资料完全正常,但这里的DMA缓存,得宣告成32位元的,否则资料存在错误的问题。
2)直接利用MPU进行记忆体的配置,但这一部份,收到的资料,有部份是存在错误的。
速度方面,1) > 2),
资料正确率方面,1) > 2)。
我不清楚是什么原因,而导致有这样的差别。
在此有一些想法分享给各位,若有错还请诸位前辈指正。
1)SCB_InvalidateDCache_by_Addr,可以选择部份较小,于是较不影响D-cache的区域。
2)MPU所影响的范围较大,所以,可能会造成一些不必的动作和减弱cache的快速处理。
感谢指正。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 02:50 , Processed in 0.254904 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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