Таблица 4.1
Сброс и обработка прерываний.
Stack Pointer (SP)
Указатель стека (SP) представляет собой два 8-разрядных регистра с адресами $3E ($5E) и $3D ($5D) (рис.4.6). Для адресации всего SRAM контроллера AT90S8535 необходимо 10 разрядов, так как последний байт SRAM имеет адрес $25F. В регистре SPH биты 2-7 не используются, доступны только для чтения. По умолчанию, в них записаны нули.
Бит $3E($5E) R/W Нач.знач. | SPH | ||||||||
- | - | - | - | - | - | SP9 | SP8 | ||
R | R | R | R | R | R | R/W | R/W | ||
Бит $3D($5D)R/W Нач.знач. | SPL | ||||||||
SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0 | ||
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | ||
Рисунок 4.6 – Указатель стека - SP
Указатель стека указывает на последнюю свободную ячейку стека. Область стека в ОЗУ должна быть задана до того, как произойдет любой вызов подпрограммы или будут разрешены прерывания. Указатель стека уменьшается на 1 при записи данных в стек командой PUSH и уменьшается на 2 при вызове подпрограммы командой CALL или обработке прерывания. Указатель стека увеличивается на 1 при выборе данных из стека командой POP и увеличивается на 2 при выполнении команд возврата из подпрограммы или обработчика прерывания (RET или RETI).
|
|
В AT90S8535 предусмотрено 10 источников прерываний. Эти прерывания и сброс имеют различные векторы в области памяти программ (FLASH). Каждому из прерываний присвоен отдельный бит в определенных регистрах управления. Если бит установлен в «1», и бит I регистра состояния SREG разрешает общее обслуживание прерываний, то данное прерывание будет разрешено. Например, для того, чтобы было разрешено прерывание INT0, необходимо, чтобы был выставлен бит INT0 регистра GIMSK.
Самые младшие адреса памяти программ определены как векторы сброса и прерываний от внешних источников. Полный список векторов прерываний приведен в табл.4.1. Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у RESET, следующий приоритет у INT0 - внешнего запроса прерывания 0 и т.д.
Таблица векторов прерываний.
Номер вектора | Адрес | Источник | Описание прерывания |
$000 | RESET | Вывод сброса. Сброс при подаче питания и сброс от сторожевого таймера | |
$001 | INT0 | Запрос внешнего прерывания 0 | |
$002 | INT1 | Запрос внешнего прерывания 1 | |
$003 | TIMER2COMP | Совпадение таймера/счетчика 2 | |
$004 | TIMER2 OVF | Переполнение таймера/счетчика 2 | |
$005 | TIMER1 CAPT | Захват таймера/счетчика 1 | |
$006 | TIMER1 COMPA | Совпадение A таймера/счетчика 1 | |
$007 | TIMER1 COMPB | Совпадение B таймера/счетчика 1 | |
$008 | TIMER1 OVF | Переполнение таймера/счетчика 1 | |
$009 | TIMER0 OVF | Переполнение таймера/счетчика 0 | |
$00A | SPI, STC | SPI: передача закончена | |
$00B | UART, RX | Последовательный порт: прием закончен | |
$00C | UART, UDRE | Последовательный порт: регистр данных пуст | |
$00D | UART, TX | Последовательный порт: передача закончена | |
$00E | ADC | Окончание преобразования АЦП | |
$00F | EE_RDY | Готовность EEPROM | |
$010 | ANA_COMP | Аналоговый компаратор |
AT90S8535 имеет три источника сброса.
|
|
- Сброс по включению питания. Процессор сбрасывается при подаче питания на выводы VCC и GND.
- Внешний сброс. Процессор сбрасывается при подаче низкого уровня на вывод RESET на время более двух периодов тактовой частоты.
- Сброс от сторожевого таймера. Процессор сбрасывается по окончанию времени сторожевого таймера, если разрешена его работа.
Во время сброса все регистры ввода/вывода устанавливаются в начальные значения, программа начинает выполняться с адреса $000, по этому адресу должна быть записана команда RJMP - относительный переход на программу обработки сброса. Если в программе не разрешаются прерывания и векторы прерываний не используются, в первых адресах памяти может быть записана программа.