пятница, 1 октября 2010 г.

Лекция 2. Окончание.

Небольшая лекция про таймеры и прерывания. Дополнительной инфы очень много, поэтому только мысли.



1. Механизм прерываний.
- цель : добавить некоторый параллелизм в выполнение программы,
- по наступления некоторого события обычное выполнение программы может быть приостановлено и произведен безусловный переход к специальной процедуре -- обработчику прерываний,
- обработчик прерывания осуществляет : сохранение в памяти всех рабочих переменных от прерванной процедуры -- т.н. сохранение контекста (это делается автоматически компилятором), пользовательский код и восстановление всех рабочих переменных прерванной процедуры -- т.н. восстановление контекста (это делается автоматически компилятором)
- почти каждый периферийный модуль микроконтроллера может являться источником соответствующих прерываний (для конкретики -- смотрите документацию),
- типовыми источниками прерываний являются : изменение уровня на ножках порта, переполнение таймера, окончание приема байта по последовательному интерфейсу и т.д.
- обычно с каждым событием, которое может может вызвать прерывание, связаны два бита (в разных регистрах) : бит разрешения данного прерывания и бит срабатывания прерывания
- обычно существует также бит разрешения всех прерываний
- необходимы осторожности при обработке прерываний
- обработчик прерываний необходимо сделать как можно более коротким
- интенсивность периодических прерываний должна быть ограничена (чтобы не допустить деградации производительности)
- корректное выполнение некоторых функции микроконтроллера требует полного запрета прерываний (например, запись в EEPROM)

2. Таймеры
- таймер -- это счетчик, который увеличивает свое значение либо от тактового сигнала микропроцессора, либо от внешнего тактового сигнала,
- между счетчиком таймера и генератором может быть подключен предделитель (который делит частоту, в большинстве случаев на степень 2 -- 2, 4, 16, 256 и т.д.),
- функционально, таймер может работать либо для счета внешних импульсов, либо для формирования временных интервалов, либо для генерирования импульсов на специальных выводах,
- когда таймер переполняется (т.е. его значение переходит из 11..1 в 00..0), то такое событие может обработано с помощью механизма прерываний,
- также существует прерывание по сравнению -- если значение таймера сравнивается с заданным, то таймер обновляется и срабатывает прерывание (это предпочтительный метод)
- типичный таймер микроконтроллера AVR (таймер T0)


- типичный таймер микроконтроллера ARM (таймер Real-time Timer)


- что важно для правильной настройки таймера : распределить коэффициент деления между предделителем, таймером и программой (например, если необходимо получить из 8 МГц частоту 1 Гц, то это может быть сделано настройкой предделителя на 256, счетом таймера до 250, и программным подсчетом числа прерываний до 125 -- в результате получается 256*250*125 = 8000000),
- поскольку прерывания от таймера являются периодическими, то необходимо сделать так, чтобы они вызывались как можно реже (стремиться выбрать максимальный коэффициент предделителя и максимальное число, до которого досчитывает таймер перед прерыванием),
- Time Stamp Timer -- таймер, который срабатывает каждые 1 мс (может чаще или реже) и инкрементирует целочисленную переменную -- время работы устройства от начала включения.

Дополнительные материалы:
про таймеры (правда с программированием на ассемблере)
http://easyelectronics.ru/avr-uchebnyj-kurs-tajmery.html
про таймер в Code Vision AVR
http://my-avr.at.ua/publ/1-1-0-17

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

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