В таймере-счетчике Т/СО пересчетная схема ПС делит частоту тактового сигнала на 64, 256 и 1024. Сигнал с трех выходов пересчетной системы поступает в схему управления СУ1, в которую также поступают сигнал с вывода ТО, тактовый сигнал микроконтроллера и сигнал с дополнительного выхода пересчетной схемы модулятора.
Схема управления СУ1 в зависимости от комбинации состояний Разрядов CS00-CS02 регистра TCCR0 (№ $ 04) передает один из сиг-Налов на счетный вход базового счетчика TCNT0 (№ $03) в соответствии с табл.21.
При переполнении базового счетчика устанавливается в единичное состояние разряд TOV0 регистра IFR (№ $05) и при единичном состоянии разряда TOIE0 регистра ICR (№ $06) в блок прерываний Поступает запрос прерывания Т/СО OVF.
Кроме того, сигнал переполнения поступает в схему управления СУ2, которая в зависимости от комбинации состояний разрядов ООМОО и ООМ01 регистра TCCRO изменяет состояние разряда PORT2 регистра PORTA в соответствии с табл.22.
Таблица 21
CS02 | CS01 | CS00 | Сигнал |
0 | 0 | 0 | нет |
0 | 0 | 1 | СК |
0 | 1 | 0 | пcм |
0 | 1 | 1 | СК/64 |
1 | 0 | 0 | СК/256 |
1 | 0 | 1 | СК/1024 |
1 | 1 | 0 | отрицательный фронт на ТО |
1 | 1 | 1 | положительный фронт на ТО |
Таблица 22
ООМ01 | ООМОО | (PORTA2) |
0 | 0 | не изменяется |
0 | 1 | изменяется |
1 | 0 | 0 |
1 | 1 |
При установке в единичное состояние разряда FOV0 регистра TCCRO сбрасывается в пулевое состояние базовый счетчик TCNT0 и поступает сигнал переполнения в схему СУ2.
Запрос прерывания Т/СО OVF при этом не формируется. Разряд FOV0 сбрасывается в нулевое состояние аппаратно.
Блок прерывании принимает запросы прерывания и организует переход к выполнению определенной прерывающей программы. Запросы прерывания поступают из внешних источников и из источников, расположенных в различных устройствах микроконтроллера.
В качестве входов для приема запросов из внешних источников используются выводы параллельных портов ввода-вывода, для которых эта функция является альтернативной. При выполнении альтернативной функции вывод порта имеет альтернативное имя INTx (х = 0, 1,..., 7).
Запрос прерывания из внешнего источника может быть представлен низким уровнем сигнала (L), переходом от высокого уровня к низкому (HL), переходом от низкого уровня к высокому (LH) или переходом любого направления (LH/HL). Выбор способа представления определяется комбинацией состоянии разрядов ISCxO и ISCxl в регистре MCUCR (№ $D5), в микроконтроллере типа ml03 - в регистре EICR (№ $ЗА).
В табл.23 указаны способы представления запроса прерывания при разных комбинациях состояний названных разрядов.
Таблица 23
ISCX1 | ISCX0 | Способ |
0 | 0 | L |
0 | 1 | LH/HL |
1 | 0 | HL |
1 | 1 | LH |
В микроконтроллерах серии ATtiny в качестве запроса прерывания могут использоваться любые изменения значения сигнала (для микроконтроллеров типа t1l, t12, t15) или низкий уровень сигнала (для микроконтроллера типа г28) на любом выводе порта РВ. Запрос прерывания, формируемый при этом, имеет имя I/O PINS, а в микроконтроллере типа t28 - LLI PINS.
В табл.24 указаны выводы параллельных портов, выполняющие альтернативную функцию приема запроса прерывания из внешнего источника, и отмечены особенности представления запроса прерывания у микроконтроллеров разных типов.
Любой запрос прерывания поступает в блок прерываний, если прерывания в микроконтроллере разрешены (I = SREG.7 = 1) и разрешено прерывание по данному запросу. Прерывание по отдельному запросу разрешено, если в единичном состоянии находится маскирующий разряд (MASK) для данного запроса прерывания, расположенный в одном из регистров ввода-вывода.
При появлении запроса прерывания устанавливается в единичное состояние флажковый разряд (FLAG) для данного запроса прерывания, расположенный в одном из регистров ввода-вывода. Состояние флажкового разряда опрашивается аппаратно и, кроме того, может быть опрошено программными средствами.
В табл.25 указаны устройства, в которых расположены источники запросов прерывания, приведены в виде дроби имена маскирующих и флажковых разрядов (в числителе) и регистров ввода-вывода, в которых они расположены, (в знаменателе) у микроконтроллеров разных типов.
Таблица 24
Тип МК | INTO | INT1 | I/O PINS | |
t11, t12 | PB1 | PBO-PB5 (2) | ||
t15 | PB2 | PBO-PB5 (2) | ||
2323, 2343 | PB1 (1) | |||
1200 | PD2 (1) | |||
2313 | PD2 (1) | PD3 (1) | ||
t28 | PB3 | PB4 | PBO-PB7 (3) | |
4433 | PD2 | PD3 | ||
8515 | PD2 (1) | PD3 (1) | ||
8535 | PD2 (1) | PD3 (1) | ||
m163 | PD2 | PD3 | ||
m103 | INTO-INT3 | INT4-INT7 | ||
PDO-PD3 (3) | PE4 - PE7 (1) | |||
(1) - кроме LH/HL, (2) - только LH/HL, (3) - только L |
Таблица 25
Устройство | Запрос прерывания | MASK | FLAG |
CPU, WDT | RESET | ||
Внешние | INT0 INT1 | INT0/GIMSK INT1/GIMSK | INTF0/GIFR INTF1/GIFR |
INT0 - INT3 INT4 - INT7 | INT0 - INT3/EIMSK INT4 - INT7/EIMSK | INTF4 - INTF7/EIFR | |
I/O PINS LLI PINS | PCIE/GIMSK LLIE/ICR | PCIF/GIFR | |
T/C2 | T/C2 COMP T/C2 OVF | OCIE2/TIMSK TOIE2/TIMSK | OCF2/TIFR TOV2/TIFR |
T/C1 | T/C1 CAPT T/C1 COMPA T/C1 COMP B T/C1 OVF | TICIE1/TIMSK OCIE1A/ TIMSK* OCIE1B/ TIMSK TOIE1/ TIMSK | ICF1/TIFR OCF1A/TIFR* OCF1B/TIFR TOV1/TIFR |
T/C0 | T/C0 COMP T/C0 OVF | OCIE0/TIMSK TOIE0/TIMSK | OCF0/TIFR TOV0/TIFR |
SPI | SPI STC | SPIE/SPCR | SPIF/SPSR |
UART | UART RXC UART UDRE UART TXC | RXCIE/UCR** UDRIE/UCR | RXC/USR** UDRE/USR |
ADC | ADC CC | ADIE/ADCSR | ADIF/ADCSR |
EEPROM | EE RDY | EERIE/EECR | |
AC | ANA COMP | ACIE/ACSR | ACI/ACSR |
TWSI | TWSI | TWIE/TWCR | TWINT/TWCR |
* - у МК типа 4433 OCIE1 и OCF1 * - у МК типа 163 UCR = UCSRB USR = UCSRA |
При поступлении запроса блок прерываний организует аппаратный безусловный переход к выполнению команды, адрес которой (вектор прерывания) однозначно связан с именем запроса прерывания. По этому адресу в микроконтроллерах серий ATtiny и АТ90 должна быть записана команда безусловного перехода с мнемокодом RJMP k (№ 85), машинный код который имеет формат "слово", а в микроконтроллерах серии ATmega может быть записана команда безусловного перехода с мнемокодом JMP, и машинный код которой имеет формат "два слова". По этой команде выполняется программный безусловный переход к первой команде соответствующей прерывающей программы, которая может быть расположена в любом месте в Flash ROM.
При одновременном поступлении в блок прерываний нескольких запросов в блоке выделяется запрос с наиболее высоким приоритетом среди всех поступивших и выполняется переход по адресу, соответствующему этому запросу.
В табл.26 и 27 указаны в шестнадцатеричном коде адреса (векторы прерывания), по которым совершается аппаратный переход у микроконтроллеров разных типов. Высший приоритет имеет запрос прерывания RESET. Приоритет других запросов убывает в порядке увеличения адреса, по которому совершается переход. У микроконтроллеров разных типов запросам прерывания с одинаковым именем соответствуют разные векторы перехода.
Таблица 26
Запрос прерывания | Тип | MK | ||||
t11 | t12 | t15 | 2323 | 2343 | 1200 | |
RESET | 000 | 000 | 000 | 000 | 000 | 000 |
INTO | 001 | 001 | 001 | 001 | 001 | 001 |
I/O PINS | 002 | 002 | 002 | |||
T/C1 COMP | 003 | |||||
T/C1 OVF | 004 | |||||
T/CO OVF | 003 | 003 | 005 | 002 | 002 | 002 |
EERDY | 004 | 006 | ||||
ANA COMP | 004 | 005 | 007 | 003 | ||
ADCCC | 008 |
При переходе к выполнению прерывающей программы разряд 1 в регистре SREG аппаратно сбрасывается в нулевое состояние и прерывания по всем запросам оказываются запрещенными. Разряд I устанавливается в единичное состояние при выполнении команды возврата из прерывающей программы с мнемокодом RETI (№ 90). Разряд I может быть установлен в единичное состояние программно по команде SEI в прерывающей программе. Программа, которая выполняется при пуске микроконтроллера и по запросу RESET, не содержит команды RETI и для выполнения прерываний должна содержать команду SEI.
Прерывание по запросу RESET выполняется вне зависимости от состояния разряда I в регистре SREG. Опрос состояния входов блока прерываний выполняется в каждом такте. При обнаружении запроса код из счетчика команд заносится в стек, на что затрачивается 2 такта, и выполняется безусловный переход по команде с мнемокодом RJMP к (2 такта) или JMP k (3 такта). Если при обнаружении запроса прерывания процессор не закончил выполнение текущей многотактовой команды, до перехода к прерывающей программе завершается выполнение этой команды.