Переместить векторы исключения ARM? - PullRequest
2 голосов
/ 23 января 2012

Как бы я переместил векторы исключений ARM ?

По сути, мне нужно иметь возможность переназначить их таким образом, поэтому, когда ядро ​​ARM пытается выполнить вектор, оно должно выполнить пользовательский вектор исключения, который хранится в бите ОЗУ ядра, а не в ROM , что на 0x0.Это возможно?Или я должен направлять прерывания в ядро ​​с ROM ?

По сути, есть ли способ сообщить ядру ARM: « вот новый адрес для вашей векторной таблицы »? Я знаю, что вы можете запуститьПроцессор в режиме высокого вектора, но это не то, что я ищу.Мне нужно иметь возможность динамически устанавливать векторную базу на произвольный адрес.

Ответы [ 4 ]

5 голосов
/ 23 января 2012

Это сильно зависит от ядра, с которым вы работаете.

Чипы Cortex-M3 могут изменять базовый адрес с помощью регистра смещения векторной таблицы (VTOR) в блоке управления системой.Некоторые реализации могут ограничивать возможные адреса.

Из "традиционных" микросхем (ARM7 / 9, Cortex-A / R), я думаю, ни одна из них не позволяет указать произвольную базу, хотя большинство из них могут переключаться между 00000000и FFFF0000, и некоторые позволяют использовать адрес «начала ОЗУ».

Однако, если у чипа есть MMU, вы обычно можете отобразить страницу ОЗУ в FFFF0000 и скопировать туда свои обработчики.Я верю, что это то, что делает Linux.

1 голос
/ 26 октября 2016

Для процессора Cortex-A9 это можно сделать, используя регистр VBAR в регистре сопроцессора Cp15.Целью векторного регистра базовых адресов является хранение базового адреса для вектора исключений монитора.

 MRC p15, 0, <Rd>, c12, c0, 0    ; Read Secure or Non-secure Vector Base Address Register
 MCR p15, 0, <Rd>, c12, c0, 0    ; Write Secure or Non-secure Vector Base Address Register
1 голос
/ 26 марта 2014

Более того, если у вашего процессора есть расширение безопасности, вы можете использовать VBAR (векторный регистр базовых адресов)

MCR p15, 0, <Rt>, c12, c0, 0

См. B4.1.156 в Справочном руководстве по архитектуре ARM..

0 голосов
/ 07 января 2016

Системный регистр VBAR определяет базовый адрес таблицы векторов. VBAR можно изменить с PL1 или выше. Как и большинство системных регистров, VBAR также создается, когда реализовано расширение безопасности (TrustZone).

...