如果CPU要读取的SRAM区数据在Cache中已经加载好,就可以直接从Cache里面读取。如果没有,就用到配置read allocate了,意思就是在Cache里面开辟区域,将SRAM区数据加载进来,后续的操作,CPU可以直接从Cache里面读取,从而时间加速。安全隐患,如果Cache命中的情况下,DMA写操作也更新了SRAM区的数据,CPU直接从Cache里面读取...
*/voidbsp_Init(void){/* 配置MPU */MPU_Config();/* 使能L1 Cache */CPU_CACHE_Enable();/* STM32H7xx HAL 库初始化,此时系统用的还是H7自带的64MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。 - 设置NVIV优先级分组为4。 */HAL_Init();/* 配置系统时钟到400MHz - 切换使用HSE。
MPU配置和Cache配置: 数据Cache和指令Cache都开启。 AXI SRAM的MPU属性: Write back, Read allocate,Write allocate。 FMC的扩展IO的MPU属性: 必须Device或者Strongly Ordered。 D2 SRAM1,SRAM2和SRAM3的MPU属性: Write through, read allocate,no write allocate。 D3 SRAM4的MPU属性: Write through, read alloc...
指令Cache开启。配置了AXI SRAM区(本例子未用AXI SRAM,FMC的扩展IO区。 代码语言:javascript 代码运行次数0 运行 AI代码解释 /* *** * 函数名: MPU_Config* 功能说明: 配置MPU * 形 : 无 * 返回值: 无 *** */ static voidMPU_Config( void ) { MPURegion_InitTypeDef MPUInitStruct; /* 禁止...
五、配置注意事项 1.Cache一致性 使用D-Cache时需手动维护数据一致性,可通过 SCB_InvalidateDCache_by_Addr() 清除缓存 ;2.传输方向限制 存储器到存储器模式不支持循环传输,且必须启用FIFO ;3.中断优先级 高频率DMA传输需设置合理的中断优先级,避免阻塞关键任务;4.资源冲突检测 同一DMA流的多个通道需通过仲裁...
方法一:不启动或关闭 D-Cache。 方法二:Core访问SRAM前invalidate cache。 4.2 通过内存保护单元配置Cache 4.2.1 MPU简介 MPU 可以将 memory map内存映射区分为多个具有一定访问规则的区域,通过这些规则可以实现如下功能:[4] 防止不受信任的应用程序访问受保护的内存区域。 防止用户应用程序破坏操作系统使用的数据。
IsShareable:设定配置的内存区域是否可以共享,可设置为1:MPU_ACCESS_BUFFERABLE和0:MPU_ACCESS_NOT_BUFFERABLE。这个参数在多用在总线和多核访问时的访问控制,一般情况下,除非使用STM32H745/H747,否则基本不用在乎此参数。 IsCacheable:设定cache策略,可设置为1:MPU_ACCESS_CACHEABLE和0:MPU_ACCESS_NOT_CACHEABLE ...
MPU可以配置保护16个内存区域(这16个内存域是独立配置的),每个区域最小要求256字节,每个区域还可以配置为8个子区域。由于子区域一般都相同大小,这样每个子区域的大小就是32字节,正好跟Cache的Cache Line大小一样。 MPU可以配置的16个内存区的序号范围是0到15,还有默认区 default region,也叫作背景区,序号-1。由于...
/* 配置MPU */ MPU_Config(); /* 使能L1 Cache */ CPU_CACHE_Enable(); /* STM32H7xx HAL 库初始化,此时系统用的还是H7自带的64MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。 - 设置NVIV优先级分组为4。 */ HAL_Init(); ...
{/*配置MPU*/MPU_Config();/*使能L1 Cache*/CPU_CACHE_Enable();/*STM32H7xx HAL 库初始化,此时系统用的还是H7自带的64MHz,HSI时钟: - 调用函数HAL_InitTick,初始化滴答时钟中断1ms。 - 设置NVIV优先级分组为4。*/HAL_Init();/*配置系统时钟到400MHz ...