- •10.1. Для чего предназначены таймеры микроконтроллеров msp430?
- •10.2. Какие режимы работы имеют таймеры микроконтроллеров msp430?
- •10.3. Каково назначение и режимы работы модуля последовательного интерфейса в микроконтроллерах msp430?
- •10.4. Как осуществляется программирование обмена по последовательному интерфейсу для микроконтроллеров msp430?
- •10.9. Как производится обработка прерывания?
- •10.10. Как назначаются векторы прерываний в микроконтроллерах msp430?
- •10.11. Какие функции языка Arduino Wiring используются при обработке прерываний?
- •10.12. Какие функции языка Arduino Wiring используются для работы с температурным датчиком микроконтроллеров msp430?
- •10.13. Каков принцип измерения расстояния с помощью ультразвукового дальномера?
- •10.14. Как программируется процесс измерения расстояния с помощью ультразвукового модуля hc-sr04?
10.9. Как производится обработка прерывания?
При возникновении запроса прерывания от периферийного устройства, если установлены бит разрешения прерывания от этого устройства и бит общего разрешения прерываний GIE, вызывается процедура обработки прерывания. Для вызова обработчика немаскируемого прерывания достаточно установленного индивидуального бита разрешения конкретного прерывания.
10.10. Как назначаются векторы прерываний в микроконтроллерах msp430?
Обработка запроса на прерывание производится в следующей последовательности:
Ожидается завершение команды, исполняемой в данный момент.
Содержимое счётчика команд PC, указывающего на следующую команду, помещается в стек.
Содержимое регистра состояния SR помещается в стек.
Если за время выполнения последней команды было сформировано несколько запросов на прерывание, то выбирается прерывание с наибольшим приоритетом.
Если прерывание имеет один источник, то флаг прерывания автоматически сбрасывается. Если прерывание может генерироваться несколькими источниками, то флаги прерывания остаются установленными для последующей обработки в программе.
Регистр состояния SR очищается. В результате процессор переходит из режима пониженного потребления в активный режим. Поскольку бит GIE сбрасывается, последующие прерывания запрещаются.
Содержимое вектора прерывания загружается в счётчик команд PC и начинается выполнение процедуры обработки прерывания, расположенной по этому адресу.
10.11. Какие функции языка Arduino Wiring используются при обработке прерываний?
Функции языка Arduino Wiring для работы с прерываниями
attachInterrupt (interrupt, function, mode) Описание: Определяет функцию, которая будет вызвана при срабатывании внешнего прерывания. Заменяет привязанную ранее функцию. Большинство платформ имеют два внешних прерывания: с номерами 0 (на цифровом выводе 2) и 1 (на цифровом выводе 5 – P1_3, PUSH2).
detachInterrupt(interrupt) Описание: Выключает объявленное ранее прерывание
noInterrupts() Описание: Деактивирует прерывания. Их можно после снова активировать функцией interrupts(). Прерывания обычно решают важные задачи, и по умолчанию активированы. Однако, некоторые функции не могут работать, пока прерывания активированы, и входные данные могут быть проигнорированы. Прерывания могут повлиять на время-зависимые функции, вы можете деактивировать прерывания при выполнении критически важных функций.
interrupts() Описание: реактивирует прерывание (после того, как оно было деактивировано функцией noInterrupts()).
10.12. Какие функции языка Arduino Wiring используются для работы с температурным датчиком микроконтроллеров msp430?
I2C интерфейс с TMP100 реализован полностью программно и использует всего две линии ввода/вывода портов общего назначения MSP430.
При любых запросах к TMP100 сначала необходимо послать адрес (7 бит + бит записи WR), а потом 8 битный указатель адреса. Указатель адреса определяет один из трех обновляемых микроконтроллером регистров.
Запрос на считывание данных из TMP100, как и в режиме записи, начинается с передачи 16 битных данных. Сначала передается адрес датчика, а потом 8 битный указатель регистра TMP100. Потом снова передается адрес датчика, после чего считываются данные. При второй передаче адреса бит RD/WR в байте адреса должен быть установлен, что указывает на предстоящее считывание данных.
Результат преобразования передается в виде 16 битных данных.
Для универсального измерителя температуры разрешающая способность в 1°C вполне достаточна. В этом случае можно не считывать второй байт. Но тогда не осуществляется преобразования градусов Цельсия в градусы Фаренгейта с приемлемой точностью, зато снижается время работы системы в активном режиме.
После принятия данных от TMP100, MSP430 выполняет их преобразование и отображает измеренную температуру на ЖКИ. При этом осуществляется обработка СЗБ, несущего информацию о знаке измеренной температуры, и преобразование двоичного кода в двоично-десятичный, который и отображается на ЖКИ.
По окончании обработки данных MSP430 переходит в дежурный режим LPM3, ток потребления в котором снижается до 2.0 мкА. Через 6 секунд формируется прерывание по переполнению таймера, которое выводит микроконтроллер из дежурного режима и основная программа начинает выполняться с начала. Для генерации 2 секундного сигнала прерывания используется модуль основного таймера, который потребляет 3.55 мкА, что позволит системе работать от 3 В батарейки всего 7.5 лет. Для увеличения срока службы можно снизить частоту сигнала прерывания или использовать модуль Таймера А. В любом случае, частота прерывания полностью программируема и может быть отрегулирована в соответствии с требованиями к системе.