Что такое вызов cli(); подпрограмма в подпрограмме обслуживания прерываний для SPI?

isr

Я вижу это в примерах кода ISR, но что это такое?

, 👍1

Обсуждение

cli() отключает прерывания, чтобы не прерывалась сама ISR... sei() снова включает прерывания, @jsotola

хорошо. Спасибо за все ответы. Эту проблему можно закрыть. Я обнаружил проблему с подпрограммой ISR, и незнание того, для чего предназначен cli(), немного замедлило меня., @Martin


1 ответ


2

Прерывания обычно отключаются автоматически при вызове ISR.

Есть две инструкции, которые позволяют программному обеспечению отключать (cli) и включать (sei) прерывания для создания последовательности непрерываемых инструкций, т. е. атомарной операции или критической секции.

В некоторых MCU существует несколько уровней приоритета прерывания, и ISR с более низким приоритетом может быть прервано ISR с более высоким приоритетом. Атомарная операция может также потребоваться в ISR с более низким приоритетом.

Есть также случаи, когда ISR может допускать прерывания (с таким же или более низким приоритетом) после критической секции ISR.

Обычно ISR не должен содержать cli()-sei(), особенно для AVR. Аппаратное обеспечение автоматически отключит прерывания во время выполнения ISR.

Ура!

,

Спасибо вам обоим за разъяснения. Интересно, что ISR, на который я смотрел, использует cli() при запуске, но забыл esi() при закрытии. Но есть и другие проблемы. Что касается Arduino как ведомого SPI, я знаю, что хорошие данные поступают с очень низкой тактовой частотой, проверяя с помощью логического анализатора, но Arduino (UNO или Mega) показывает мусор (все '?'). Он никогда не видит '\n', и я могу остановить его, только подсчитав символы, чтобы установить флаг Received_Data перед завершением ISR. Странный. Не могу понять, почему., @Martin

Опубликуйте эскиз или ISR в новом вопросе, если вы довольны ответом на исходный вопрос. Мы стараемся поддерживать четкую сессию вопросов и ответов, чтобы другие могли найти и подписаться. Расширение дополнительными вопросами не способствует повторному использованию., @Mikael Patel