Избежание вложенности прерываний CortexM - PullRequest
0 голосов
/ 19 октября 2018

Я хочу избежать вложенных прерываний в записи прерываний в микроконтроллере на базе CortexM.

Для этого у меня есть файл сборки, содержащий векторы прерываний, и первая инструкция каждого вектора - это инструкция (CPSID I)отключить прерывания глобально.После каждого отдельного обработчика прерываний (записанного на C) выполнение возвращается к общей процедуре сборки, которая повторно разрешает прерывания с помощью инструкции CPSIE I, а возврат из процесса прерывания / исключения запускается с помощью инструкции BX LR.

При вводе прерывания CortexM автоматически суммирует кадр исключения, содержащий изменчивый контекст (сохраненный контекст вызывающего абонента) и переходит к первой команде вектора исключения / прерывания.

Согласно ARMИнфоцентр требуется не менее 12 циклов для завершения процесса суммирования и извлечения адреса первой команды целевого вектора из NVIC (Nested Vectored Interrupt Controller).Если во время процесса суммирования поступает другое прерывание с более высоким приоритетом (это случай позднего прибытия), процесс стека продолжается, но процесс с более высоким приоритетом будет обслуживаться первым.

Мой первый вопрос: рассматривается ли этот случай позднего прибытиякак сценарий вложенного прерывания, т. е. регистр LR будет 0xFFFF FFF1 (с учетом только базового кадра)?

Во-вторых, возможно ли принятие исключения между завершением процесса суммирования и до CPSID Iисполняется?

1 Ответ

0 голосов
/ 19 октября 2018

Простой способ избежать вложения - это иметь все прерывания с одинаковым приоритетом.

Вы можете по-прежнему расставлять приоритеты, используя суб-приоритеты, если хотите, но я не уверен, что это даст вам какую-то выгоду.

Позднее поступление немного похоже на вложение, за исключением того, что прерывание с более высоким приоритетом будет выполняться до прерывания с более низким приоритетом.Прерывание с более низким приоритетом будет привязывать цепочку к прерыванию с более высоким приоритетом.

Да, возможно, что прерывание с более высоким приоритетом может быть принято до выполнения CPSID I. В зависимости от времени вы либо получите позднее прибытие, либо вложитесценарий.

...