Я настроил свой модуль 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 перезаписывается после включения кеширования