Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на 6 лабу.docx
Скачиваний:
2
Добавлен:
19.01.2023
Размер:
20.04 Кб
Скачать

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 лет. Для увеличения срока службы можно снизить частоту сигнала прерывания или использовать модуль Таймера А. В любом случае, частота прерывания полностью программируема и может быть отрегулирована в соответствии с требованиями к системе.