Можно ли отключить кеширование для указанного диапазона адресов c - PullRequest
0 голосов
/ 07 мая 2020

Я настроил свой модуль ethe rnet для хранения полученных данных в указанном диапазоне адресов c в ОЗУ, например xxxx-yyyy. Когда кеш включен, я не могу получить данные, поскольку данные считываются из кеша, а не из фактических буферов Ethe rnet. Проблема была решена путем отключения кеша, как описано здесь , но мне интересно, есть ли способ отключить кеширование только в этом c диапазоне адресов xxxx-yyyy

Целевой процессор arm cortex r7

Обновление

Я настроил MPU, атрибуты области, содержащей буферы, следующие: Разрешение доступа = FULL, Тип = Совместное устройство

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

И тогда данные Ethe rnet больше не принимаются, Такое ощущение, что конфигурация MPU перезаписывается после включения кеширования

1 Ответ

0 голосов
/ 07 мая 2020

Да, это возможно.

Посмотрите в своем руководстве пользователя MPU, чтобы настроить регионы как кэшируемые, не кэшируемые, а также политики обратной записи. cache, что может быть проще и полезнее, чем просто отключение кеширования. MPU имеет только 16 или около того регионов, которые вы можете указать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...