Учебное пособие: Микроконтроллеры AVR

Регистр TIMSK (рис. 3.3), расположенный в области ввода/вывода по адресу 0x0039 (адрес в SRAM – 0x0059), используется для разрешения прерываний от таймеров/счетчиков.

7 6 5 4 3 2 1 0
TOIE1 OCIE1A OCIE1B TICIE1 TOIE0

Рис. 3.3. Структура регистра TIMSK микроконтроллеров AVR

Состояние прерываний, имеющих отношение к таймерам/счетчикам микроконтроллеров AVR, определяется по регистру TIFR (рис. 3.4), который расположен в области ввода/вывода по адресу 0x0038 (адрес SRAM – 0x0058).

7 6 5 4 3 2 1 0
TOV1 OCF1A OCF1B ICF1 TOV0

Рис. 3.4. Структура регистра TIFR микроконтроллеров AVR

Когда разряд TOIE1 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешено прерывание при переполнении Т/С1. В случае переполнения в регистре TIFR устанавливается флаг TOV1.

Если разряд OCIE1A и разряд I в регистре состояния SREG установлены в лог. 1, то разрешено прерывание при совпадении содержимого регистра сравнения А с текущим состоянием Т/С1. В случае совпадения, в регистре TIFR устанавливается флаг OCF1 А.

Если разряд OCIE1B и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при совпадении содержимого регистра сравнения В с текущим состоянием Т/С1. В случае совпадения, в регистре TIFR устанавливается флаг OCF1B.

Если разряд TICIE1 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при выполнении условия захвата. Когда возникает срабатывание по захвату, в регистре TIFR устанавливается флаг ICF1.

Если разряд TOIE0 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при переполнении таймера/счетчика Т/СО. В таком случае, в регистре TIFR устанавливается флаг TOV0.

Установка в лог. 1 одного из флагов в регистре TIFR приводит к переходу по соответствующему вектору прерывания. При входе в подпрограмму обработки прерывания, флаг в регистре TIFR аппаратно сбрасывается в лог. 0.

Управление прерываниями в микроконтроллерах PIC

В микроконтроллерах PIC управление прерываниями реализовано с помощью регистров специальных функций, и отличается от устройства к устройству. К примеру, в микроконтроллерах PIC12C6x, PIC14000, Р1С16х для этой цели используются регистры INTCON (рис. 3.5), PIE и PIR, а программы обработки прерываний всегда начинают исполняться с адреса 0x004.

7 6 5 4 3 2 1 0
GIE PEIE TOIE INTE RBIE TOIF INTF RBIF

Рис. 3.5. Регистр INTCON микроконтроллеров PtC12C6x, PIC14000, Р1С16х

Разряд GIE – это флаг общего разрешения прерываний. Если он установлен в лог. 1, то все немаскированные прерывания разрешены, если же он сброшен в лог. 0, то все прерывания запрещены.

Разряд PEIE регистра INTCON может использоваться в качестве флага разрешения всех прерываний от периферии, определяемых с помощью регистров PIE и PIR.

Флаг TOIE разрешает (лог. 1) или запрещает (лог. 0) прерывания при переполнении таймера TMR0), а флаг TOIF определяет запрос на соответствующее прерывание.

Разряд INTE – флаг разрешения внешнего прерывания по входу INT, а разряд INTF – флаг запроса на прерывания по этому входу. Аналогичное значение, но для порта В имеют разряды RBIE и RBIF.

Регистр PIE содержит флаги разрешения прерываний от периферийных устройств, а регистр PIR – соответствующие флаги запросов на прерывание. Позиции разрядов в этих регистрах для различных микроконтроллеров отличаются.

Сброс

Сброс – это, по сути, одна из форм прерываний, вызывающая перезапуск микроконтроллера (аппаратная инициализация всех регистров управления и периферийных устройств и выполнение программы, начиная с адреса 0x0000). Вектор сброса всегда расположен самым первым.

Возможны следующие варианты сброса:

-сброс при включении питания;

-внешний сброс – сигнал сброса подается на соответствующий вывод микроконтроллера;

-сброс от сторожевого таймера – микроконтроллер сбрасывается по истечению времени, заданного сторожевым таймером, если этот таймер был разрешен.

"Спящие" режимы процессора

Микроконтроллеры AVR и PIC допускают переход в "спящий" режим, когда происходит временное отключение генератора тактовых импульсов. В таком режиме потребление энергии сведено к минимуму, а выход из него осуществляется при получении запроса на прерывание.

Переход в "спящий" режим реализуется по ассемблерной команде sleep. В случае микроконтроллеров AVR, при этом должен быть предварительно установлен в лог. 1 разряд SE (разряд 5) регистра управления MCUCR.

Когда во время режима пониженного энергопотребления происходит прерывание, центральный процессор выходит из "спящего" режима, выполняет подпрограмму обработки прерывания и продолжает выполнение программы с команды, следующей после команды sleep. Если во время режима пониженного энергопотребления поступает сигнал сброса, то центральный процессор выходит из "спящего" режима и продолжает выполнение программы с команды, расположенной по адресу $000 в области команд.

Для микроконтроллеров AVR может быть выбран один из двух "спящих" режимов:

-В ждущем режиме (Idle Mode) работа процессора приостанавливается, но таймер/счетчик, сторожевой таймер, система прерываний и тактирования остаются активными. Благодаря этому, центральный процессор может быть возвращен в обычный режим работы с помощью сторожевого таймера, таймера/счетчика или внешнего прерывания.

-В режиме пониженного энергопотребления (Power Down Mode) системный осциллятор (а значит и весь микроконтроллер) находится в отключенном состоянии. В таком режиме с помощью внутреннего RC-генератора колебаний может включаться лишь сторожевой таймер со своим собственным обеспечением тактовой частотой. Активный сторожевой таймер по истечении времени задержки опять переводит микроконтроллер в нормальное состояние. Если сторожевой таймер также отключен, то в нормальное состояние его может перевести только внешний сигнал сброса или внешнее прерывание.

Выбор одного из "спящих" режимов в микроконтроллерах AVR осуществляется с помощью разряда SM (разряд 4) регистра управления MCUCR. Если разряд SM установлен в лог. 1, то микроконтроллер переводится в режим пониженного энергопотребления последующей командой sleep, если же разряд SM сброшен в лог. 0, то последующей микроконтроллер переводится в ждущий режим в том случае, если ранее в регистре MCUCR был установлен разряд SE.

К-во Просмотров: 680
Бесплатно скачать Учебное пособие: Микроконтроллеры AVR