Обработка мульти и приоритетного прерывания на msp430fr5969 - PullRequest
0 голосов
/ 06 октября 2018

В настоящее время работает на msp430fr5969.У меня есть несколько прерываний, таких как SPI, I2C, Таймер, и требование протокола SPI является наивысшим приоритетом.Однако, согласно данным, приоритет I2C (eUSCI_B0) выше, чем SPI (eUSCI_A1), и он не может изменить приоритет прерывания.

Ссылка: http://mikrokontroler.pl/wp-content/uploads/pliki/msp430fr5969.pdf (стр. 21).

Как я могу получить прерывания SPI как можно быстрее во время процесса I2C?

Я застрял во время чтения I2C, и в нем есть данные, отправленные из другого MCU.MCU уведомляет тайм-аут в этом случае.Это редко, но я хочу это исправить.

Примечание: используйте SPI для связи с другим MCU, поэтому данные о его важности.Используйте I2C для считывания информации с датчика.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Технически можно включить gie с другими прерываниями, чтобы включить вложенность прерываний.Таким образом, вы можете управлять порядком выполнения прерываний, добавляя некоторую логику в качестве преамбулы к прерываниям.Лично я предпочел бы избежать этого и оставить его в крайнем случае.Постарайтесь, чтобы код других прерываний был коротким, управляйте логикой за пределами прерываний, и, если этого недостаточно, попробуйте отключить другие прерывания, ожидая наступления критического прерывания (если это возможно).

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

Приоритеты прерываний имеют значение только в том случае, если два * флага прерывания установлены перед , когда ЦП может обрабатывать один из них, и ЦПУ должен решить, какой из них обрабатывать первым.На практике это почти никогда не происходит.

Когда выполняется обработчик прерываний, все другие прерывания блокируются (GIE очищается по умолчанию), независимо от приоритета.Это означает, что, когда в настоящее время выполняется обработчик прерывания I²C и происходит прерывание SPI, обработчик SPI начинает выполнение только после завершения обработчика I²C.

Чтобы выполнить обработчик SPI с высоким приоритетом, необходимо убедиться, чточто все остальные прерывания не блокируют его, по крайней мере, на долгое время.Обычно это делается теми обработчиками прерываний, которые просто устанавливают флаг, указывающий, что устройству требуется внимание, а затем обрабатывают эти условия в основном цикле вашего приложения.

...