цифровая электроника
вычислительная техника
встраиваемые системы

 

Радиомодуль NRF24LE1 и прерывания

Автор: Mike(admin) от 22-11-2016, 07:05

В нашей повседневной жизни мы отвлекаемся или прерываемся от текущих дел другими людьми или ситуациями много раз. В таком состоянии мы приостанавливаем нашу текущую работу и обращаем внимание на то, что говорят другие, или что происходит вокруг. Мы возобновляем нашу ранее приостановленную работу только после завершения разговора с человеком или разрешения внешней ситуации. Контроллер может работать аналогичным образом, и NRF24LE1 не является исключением.


Радиомодуль NRF24LE1 и прерывания

В этом материале мы рассмотрим работу с прерываниями в рамках радиомодуля NRF24LE1. В примере с интерфейсом UART один раз мы использовали прерывание, здесь же рассмотрим эту тему подробнее.


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


В NRF24LE1 насчитывается 18 источников прерываний, из которых 4 являются аппаратными, а остальные программными. Каждый источник прерываний имеет адрес вектора, по которому будет работать обработчик прерывания. В 32-выводном корпусе есть 2 внешних аппаратных прерывания: INT0 и INT1. Линия INT0 соответствует пятому выводу порта 0 (P0.5), а линия INT1 соответствует шестому выводу порта 0 (P0.6). Прерываними можно управлять с помощью различных регистров, описанных ниже.


IEN0 (Регистр разрешения прерывания 0) – 8-битный регистр, используемый для разрешения / запрета глобальных прерываний, а также индивидуальных прерываний таймеров Timer0, Timer1, Timer2, порта 0 и порта последовательной передачи данных.


IEN1 (Регистр разрешения прерывания 1) – 8-битный регистр, используемый для разрешения / запрета прерываний от SPI, радиочастотного модуля и таймера Timer2.


INTEXP – этот регистр разрешает / запрещает прерывания от двухпроводной передачи данных, ведущего и ведомого SPI. Этот регистр также используется для выбора между INT0, INT1.


IP0 и IP1 (регистры приоритета прерываний) – два 8-разрядных регистра, используемые для установки уровней приоритета среди различных источников.


IRCON (регистр управления запросом прерываний) – 8-битовый регистр, который содержит флаги запроса прерываний.




В данном примере рассмотрим работу с внешним прерыванием на INT0. С помощью следующих шагов мы настроим функционирование источника прерываний INT0. Во-первых, нужно записать 1 в седьмой бит и нулевой бит регистра IEN0, чтобы разрешить глобальные прерывания. Далее следует записать 1 в третий бит регистра INTEXP для выбора INT0. И в конечном итоге мы должны написать обработчик прерываний для INT0. Напишем программу, которая заставляет мигать светодиод всякий раз, когда происходит внешнее прерывание. Схема подключения представлена ниже.


Радиомодуль NRF24LE1 и прерывания

Код программы:



#include"reg24le1.h" // Заголовочный файл для NRF24LE1
#include<stdint.h> // Заголовочный файл со стандартными функциями ввода/вывода
#include"hal_delay.h" // Заголовочный файл с функциями задержки
#include"isrdef24le1.h" // Заголовочный файл с определениями обработчиков прерываний NRF24LE1
 

void main()
{
P0DIR = 0xf0; // 4 старших бита порта 0 на вход
P1DIR = 0;  // порт 1 на выход
P1 = 0x00; // все линии порта 1 в лог. 0
IEN0 = 0x81; // разрешаем прерывания с выводов
INTEXP = 0x08; // разрешаем INT0
while(1); // бесконечный цикл
 
}
 
// обработчик прерываний
EXT_INT0_ISR()
{
P1 = 0xff; // все линии порта 1 в лог. 1
delay_ms(1000); // задержка 1 секунда
P1 = 0x00; // все линии порта 1 в лог. 0
delay_ms(1000);  // задержка 1 секунда
}



© digitrode.ru


Теги: NRF24LE1, прерывания



Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий