- •Встраиваемые микроконтроллеры avr-8
- •Санкт-Петербург 2013 Содержание
- •Часть 1. Архитектура мк (л2, л3)
- •Понятия мк для встраиваемых приложений и семейства мк. Семейство avr-8
- •Структура и архитектура мк
- •Тактирование, процессор и арифметико-логическая группа команд
- •Структура и адресация памяти программ. Ветвления, циклы, подпрограммы, и группа команд передачи управления
- •Структура и адресация памяти данных. Группа команд передачи данных
- •Порты ввода/вывода. Типовая схема включения мк. Структура управляющей программы, поллинг.
- •Часть 2. Процесс проектирования устройств на мк (л4, л5)
- •2.1. Этапы процесса проектирования устройств на мк
- •2.2.Техническое задание и разработка алгоритма (блок-схемы)
- •2.3. Языки программирования и синтаксическая проверка проекта
- •2.4. Средства загрузки кодов программ и данных (программаторы)
- •2.5. Средства отладки для выявления логических и схемотехнических ошибок
- •2.6. Подключение индикаторов и клавиатуры
- •Часть 3. Ввод/вывод в мпу
- •3.1. Понятие и характеристики интерфейса
- •3.2. Внутрисистемные интерфейсы в мпу
- •3.3 Параллельный порт avr
- •3.4. Внешняя магистраль памяти данных avr мк
- •3.5. Принцип и средства ввода/вывода по прерываниям.
- •3.6. Принцип прямого доступа к памяти
- •Часть 4. Прерывания (л8)
- •4.1. Механизм прерываний в avr и его программирование
- •4.2. Входы прерываний inTx и pcinTx.
- •Часть 5. Таймеры/счетчики
- •5.1. Задачи формирования и измерения временных интервалов
- •5.2. Принципы программного формирования/измерения временного интервала
- •5.3. Таймер/счетчик с прерыванием по переполнению
- •5.4. Таймер/счетчик с дополнительными узлами захвата и сравнения
- •Часть 6. Задачи и устройства аналогового ввода/вывода (л12, л13)
- •6.1. Задачи аналогового ввода и вывода
- •6.2. Встроенный аналоговый компаратор
- •6.3. Встроенный многоканальный ацп
- •6.4. Встроенный цап
- •Часть 7. Задачи и устройства последовательного интерфейса (л14, л15)
- •7.1. Принципы и преимущества последовательного интерфейса
- •7.2. Функции встроенного контроллера последовательного интерфейса
- •7.3. Протокол и контроллер трехпроводного синхронного пи (spi)
- •7.4. Устройство контроллера i2c и его применение
- •7.5 Цап с последовательным интерфейсом
- •7.6. Устройство контроллера u(s)art и его применение
- •7.7. Сетевые протоколы и их стандартизация
- •7.8. Открытый протокол Modbus
- •История
- •Введение
- •Категории кодов функций
- •Модель данных
- •Стандартные функции протокола Modbus
- •Запись одного значения
- •Запись нескольких значений
- •Контроль ошибок в протоколе Modbus rtu
- •Rtu фрейм
- •Логические ошибки
- •Стандартные коды ошибок
3.5. Принцип и средства ввода/вывода по прерываниям.
Показания к применению: уменьшение времени реакции и выполнение действий, асинхронных к периоду и фазе основного цикла.
Основные этапы обработки прерывания, формирование запроса и вектора (адрес в таблице векторов), сохранение и восстановление контекста, временные затраты – задержка реакции и задержка фоновой программы. Флаги прерывания, маскирование общее и индивидуальное, система приоритетов – аппаратная (жесткая) и программная (гибкая), вложенные прерывания. Контроллер прерываний, аппаратные и программные прерывания, внутренние и внешние прерывания.
Входы прерываний: событие (переход и уровень), регистры управления и состояния, структура ПО (пример).
Сторожевой таймер: аппаратная структура, регистры управления и состояния, пример расчета времени и использования команд (обратить внимание на IS\R и циклы ожидания готовности).
Механизм прерываний
Механизм прерываний [interrupt] удобен для быстрой программной реакции на события (сигналы) асинхронные с основным циклом управляющей программы. По запросу прерывания [interrupt inquiry] приостанавливается выполнение текущей программы (фоновой программы), выполняется короткая подпрограмма обслуживания данного запроса, далее продолжается выполнение фоновой программы.
Применение прерываний оправдано, когда время выполнения всех подпрограмм обслуживания прерываний много меньше периода основного цикла. Основным критерием эффективности механизма прерываний является снижение максимального времени реакции на событие, породившее запрос. При этом не должно быть заметного роста времени реакции остальных задач.
В конце каждого машинного цикла при наличии общего разрешения прерываний процессор проверяет наличие запросов прерывания. Если данное прерывание разрешено, процессор выполняет действия аналогичные вызову подпрограммы с заранее определенным адресом (вектором), и сохраняет в стеке адрес прерванной программы. В конце подпрограммы обслуживания прерывания [Interrupt SubRoutine - ISR] должна находиться команда возврата из прерывания [Return Interrupt]. При ее выполнении происходит возврат в точку прерывания фоновой программы.
Выполнение подпрограммы обслуживания прерывания должно быть «прозрачным», т. е. незаметным для прерываемой (фоновой программы) – не должно нарушаться содержимое регистра состояния (флаги процессора) и тех РОН, которые используются фоновой программой. Названные ресурсы называются контекстом. Если ISR вынуждена делить ресурсы с другими программами, требуется при входе в подпрограмму сохранять содержимое используемых ресурсов в стеке, а перед выходом из ISR – восстанавливать из стека в обратном порядке. В высокопроизводительных процессорных устройствах слово состояния процессора сохраняется аппаратно контроллером прерываний, в 8-разрядных это забота программиста.
Общим правилом является стремление к минимизации времени выполнения ISR. Поэтому непосредственно в ISR выполняются только самые необходимые быстрые действия, а выполнение долгих переносится в подпрограммы основного цикла за счет взаимодействия через общие (глобальные) переменные. По возможности следует избегать арифметических и логических действий в ISR, они изменяют содержимое флагов процессора.
Прерывания бывают внешние – формируются сигналами определенного вида на внешних входах МК и внутренние – формируются внутренними, в том числе периферийными узлами МК. Каждый источник прерывания имеет индивидуальные вектор, флаг, маску и уровень приоритета.
Вектором называется фиксированный адрес начала ISR. Обычно область ISR размещается в начале памяти программ, сразу после ячейки с адресом 0 прерывания по пуску/перезапуску МК.
Флагом запроса прерывания называется бит в РСФ, устанавливаемый в «1» аппаратурой МК при формировании условия прерывания. Сброс этого бита обычно выполняется автоматически при вызове ISR или программно, если прерывание не разрешено.
Маской называется бит в РСФ, служащий для разрешения индивидуального прерывания. ISR начнет выполняться тогда и только тогда, когда будут установлены биты флага, маски и бит глобального (общего) разрешения прерывания.
При одновременном поступлении более чем одного разрешенного запроса прерывания вступает в действие механизм приоритетов, который выбирает для обслуживания только один запрос. В простых 8-разрядных МК система приоритетов ограничена аппаратным распределением уровней – чем меньше численное значение вектора (адреса), тем выше уровень приоритета.
В более сложных МК в дополнение к аппаратным существуют программные уровни приоритета. Они позволяют объединять прерывания в группы, внутри которых действует аппаратный механизм распределения приоритетов.
Прерывание, не получившее права обслуживания (по приоритету, по маске, по общему запрету), сохраняет в высоком состоянии бит флага запроса до разрешения или до принудительного программного сброса.
Работа с прерываниями на языке С/С++ имеет ряд особенностей, связанных с оформлением вызова ISR и обмена данными.
Механизм прерываний не входил в стандарт языка С/С++, поэтому в разных трансляторах встречаются отличия в оформлении механизмов прерывания. Общим правилом является обозначение ISR как функции с пустыми [void] списками входных и выходного параметров и объявление вектора прерывания (адреса) как символьной константы (как правило, после служебного слова interrupt). Закрывающая фигурная скобка данной функции заставляет транслятор завершать текст подпрограммы командой возврата из прерывания [reti для AVR].
Для обмена данными используется механизм глобальных переменных.
Сохранение и восстановление контекста (как и вообще работа с РОН) выполняется транслятором без участия программиста. Но это не избавляет программиста от заботы по сокращению времени выполнения ISR за счет отказа или минимизации вычислительных процедур в теле ISR.
Генерация команд общего разрешения/запрещения прерываний выполняется либо с использованием механизма ассемблерных вставок [#asm("sei") в CodeVisionAVR], либо в виде специальных функций [__enable_interrupt(); в IAR-C/C++].
