xxxx-yyyy说,我配置了以太网模块,以便将接收到的数据存储在RAM中的特定地址范围内。启用缓存时,我无法接收数据,因为数据是从缓存中读取的,而不是实际的以太网缓冲区。通过禁用这里解释的缓存解决了这个问题,但是我想知道是否有一种方法只在这个特定的地址范围xxxx-yyyy中禁用缓存
目标处理器arm皮层r7
更新
我配置了MPU,包含缓冲区的区域的属性是:访问权限= FULL,Type=共享设备
mov r0, #10 mcr p15, 0, r0, c6, c2, 0 ldr r0, =(0xxxx) //REGION_BASE mcr p15, 0, r0, c6, c1, 0 // DRBAR mcr p15, 0, r0, c6, c1, 1 // IRBAR ldr r0, =(0x18 | 0x1) // REGION_SIZE mcr p15, 0, r0, c6, c1, 2 // DRSR mcr p15, 0, r0, c6, c1, 3 // IRSR ldr r0, =(0x1301) // Shareable Device mcr p15, 0, r0, c6, c1, 4 // DRACR mcr p15, 0, r0, c6, c1, 5 // IRACR
配置MPU之后,我启动缓存,如下所示:
MRC p15, 0, R1, c1, c0, 0 ; Read System Control Register configuration data ORR R1, R1, #0x1 <<12 ; instruction cache enable MCR p15, 0, r0, c7, c5, 0 ; Invalidate entire instruction cache MCR p15, 0, R1, c1, c0, 0 ; enabled instruction cache ISB
然后以太网数据就不再被接收了,我觉得在启用缓存后MPU配置被覆盖了。
发布于 2020-05-07 11:47:08
是的,有可能。
查看您的MPU用户指南,将区域设置为可访问的、不可访问的,再加上写回策略。
您还可以从缓存中使(丢弃)或清理(提交)区域失效,这可能比简单地变得不可持续更容易,也更有用。MPU只有16个左右可以指定的区域。
https://stackoverflow.com/questions/61653762
复制相似问题