Модель основания ARMv8: переключатели и светодиоды
Я пытаюсь загрузить свое маленькое ядро ARMv7 (которое прекрасно работает с использованием модели qemu vexpress) в ARMv8 Foundation Model v2.1. Модель загружается на уровне EL3 / 64 бита, и мне удалось перейти на уровень EL1 / 32 бита, но я сталкиваюсь с некоторыми проблемами (в двух словах, таймер не тикает, а некоторые kprintf отсутствуют, но это не выпуск здесь).
Для устранения проблемы с UART я хотел использовать светодиодные переключатели, предоставляемые моделью. Я могу легко прочитать их значение из программного обеспечения, но не могу написать новое значение ни одному из них. Ядро вроде зависает. Вот минимальный ассемблерный код, который записывает в регистр коммутаторов:
.global Start
Start:
# we are in EL3 / 64 bits mode
# create the 0x1C010000 + 0x4 address of switches
mov x0, #4
movk x0, #0x1c01, lsl #16
# value to write
mov w1, #0xaa
# actual writing
strb w1, [x0]
Кажется, я застрял на strb
инструкция. Для записи, если я заменю strb
с ldrb
Я могу правильно прочитать и отобразить значение этого регистра (я играл с --switches
флаг, чтобы убедиться, что это сработало).
Кто-нибудь знает, что я здесь делаю не так?
РЕДАКТИРОВАТЬ: благодаря предложениям unixsmurf, я теперь знаю, что получил синхронное исключение прерывания данных без изменения уровня, и причина - "Синхронный внешний прерывание". Я не знаю, как проверить дальше, я думаю, я попробую форум ARM.
Лучший,
V.
1 ответ
Сообщество ARM наконец решило проблему. Полное обсуждение можно найти здесь.