Указатель стека (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 и т.д.
Таблица 4.1
Таблица векторов прерываний.
Номер вектора | Адрес | Источник | Описание прерывания |
$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 | Аналоговый компаратор |
|
|