Прерывания для периферийных устройств: таймеры, модули последовательной связи, АЦП
Рассмотрим прерывания для некоторых знакомых периферийных устройств: таймеры, модули последовательной связи и АЦП.
Данная статья является продолжением разговора о понятиях параллелизма и прерываний в микроконтроллерах.
В предыдущей статье мы говорили о прерываниях GPIO. Здесь мы кратко рассмотрим роль GPIO в микроконтроллерах и рассмотрим концепцию прерываний в некоторых привычных периферийных устройствах. Это позволит нам завершить серию сравнением прерываний трех реальных микроконтроллеров.
Роль GPIO для микроконтроллеров
GPIO обозначает вход/выход общего назначения (general purpose input/output), иногда называемый контроллером цифрового входов/выходов.
Микроконтроллеры взаимодействуют с внешним миром с помощью своих выводов. Эти выводы обычно генерируют или принимают электрические сигналы, которые обрабатываются микроконтроллером.
GPIO – это периферийное устройство, которое подключено к некоторым выводам микроконтроллера.
GPIO позволяет вам настроить вывод в качестве входа или выхода. Когда вывод сконфигурирован в качестве входа, предполагается, что к выводу подключено что-то внешнее, что определяет электрический сигнал на выводе. Например, если я подключу вывод к переключателю, а этот переключатель – к источнику напряжения, я могу использовать этот переключатель для управления электрическим сигналом на выводе, будет ли это напряжение (0 В) или какое-то другое напряжение (зависит от значения напряжения источника питания). Когда вывод сконфигурирован как выход, состояние сигнала на выводе задает микроконтроллер.
Выводы в микроконтроллере соединены с регистрами, которые позволяют вам в своей программе считывать или записывать значение на нужном выводе. Значение на выводе кодируется как бит (0 или 1). 0 обычно означает очень низкое напряжение, а 1 обычно означает высокое напряжение, обычно равное рабочему напряжению микроконтроллера. Например, для STM32L151C6, работающего от 3,3 В, вход читается как 0, когда напряжение меньше 0,99 В, и читается как 1, когда напряжение больше 2,31 В.
Прерывания для других периферийных устройств
Ниже я кратко расскажу о других распространенных периферийных устройствах и видах прерываний, которые они могут предоставлять.
Таймеры
Большинство микроконтроллеров имеют как минимум один таймер. Таймеры содержат счетчики, которые работают с тактовым сигналом для определения прошедшего времени. Счетчик таймера, в дополнение к тому, как быстро счетчик считает, определяет, сколько прошло «реального» времени.
Большинство таймеров могут быть настроены на генерирование прерывания при подсчете определенного значения. Обычно есть прерывания для двух случаев.
Первый случай – переполнение. Если счетчик выполняет прямой отсчет (значение счетчика увеличивается), то переполнение – это, когда он достигает максимального значения. Если счетчик выполняет обратный отсчет (значение счетчика уменьшается), то переполнение – это, когда он достигает минимального значения. У различных микроконтроллеров поведение счетчика после переполнения может различаться. Иногда это поведение настраивается.
Второй случай, когда он считает до значения, заданного пользователем.
Независимо от события, вызвавшего прерывание, обычно один флаг устанавливается внутри таймера, другой – внутри контроллера прерываний. И с прерываниями от таймера связан соответствующий вектор прерывания. У таймера может быть более одного вектора прерывания, каждый из которых связан с отдельным событием.
Модуль последовательной связи
Большинство микроконтроллеров также имеет модуль последовательной связи, который позволяет им отправлять сообщения на другие устройства. Обычно имеются буферы данных (иногда один для отправки и отдельный для приема).
У модуля последовательной связи может быть прерывание, которое служит для того, чтобы процессор (CPU) узнал, что данные были только что получены в приемном буфере. Также может быть прерывание, которое сообщает процессору, что данные, если они помещены в буфер отправки, были успешно отправлены, и поэтому буфер готов к получению новых данных.
В некоторых протоколах связи есть сигнализация, где устройство должно сначала определить, кто может отправить сообщение. В этом случае может быть прерывание, которое сообщает процессору, что другое устройство готово к приему, или что другое устройство намеревается отправить данные.
Аналого-цифровой преобразователь
Некоторые микроконтроллеры оснащены аналого-цифровым преобразователем, который принимает изменяющееся аналоговое напряжение и преобразует его в двоичное представление, которое микроконтроллер может обрабатывать дальше. Процесс преобразования занимает время, поэтому обычно существует прерывание, которое после того, как CPU инициировал преобразование, сообщает процессору, что преобразование было выполнено .
В следующей статье мы завершим наше обсуждение прерываний для микроконтроллеров со сравнением некоторых знакомых микроконтроллеров.