Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микроконтроллеры семейства MCS-196.DOC
Скачиваний:
67
Добавлен:
02.05.2014
Размер:
1.09 Mб
Скачать

2.2.2. Подпрограммы обработки прерывания

Все программы обработки прерываний 8XC196KC/KD работают следующим образом.

1. После аппаратного детектирования и определения приоритетов запроса прерывания генерируется и выполняется вызов специального прерывания. Он помещает PC в стек и затем загружает его значением вектора прерывания, соответствующего наибольшему приоритету, если нет немаскируемого прерывания. Аппаратное обеспечение не может вызвать следующее прерывание, пока не выполнится первая команда подпрограммы обработки прерывания.

2. Команда PUSHA, которая гарантированно выполняется, сохраняет значение PSW, INT_MASK1 и WSR в стеке, а затем очищает PSW и INT_MASK1. Дополнительно к арифметическим флагам, PSW содержит регистр INT_MASK, бит глобального разрешения прерываний (I) и бит разрешения PTS (PSE). Обнуление регистров PSW и INT_MASK1 маскирует все маскируемые прерывания, запрещает обработку стандартных прерываний и запрещает PTS. Команда PUSHA препятствует вызову прерывания, пока не выполнится следующая команда.

3. Команда LDB INT_MASK1 разрешает те прерывания, которые вы выбрали в программе обработки прерывания. В приведенном примере только EXTINT может прерывать программу обработки прерывания по приему информации. Разрешением и запрещением прерываний программное обеспечение устанавливает свои приоритеты обработки прерываний.

4. Команда EI разрешает обработку прерываний после выполнения следующей за ней команды.

5. Действующая программа обработки прерываний выполняется в соответствии со структурой приоритетов, установленной программным обеспечением.

6. В конце программы обработки команда POPA восстанавливает исходное содержимое регистров PSW, INT_MASK1 и WSR. Так как вызов прерывания не может произойти сразу же за командой POPA, то последняя команда RET будет выполнена до того, как произойдет другой вызов прерывания. Рассмотрим что будет, если команда POPA разрешает прерывания. Если контроллер прерываний отработал принятое прерывание, прежде чем команда RET выполнена, то адрес возврата в прерванную программу, которая выполнялась до того, как случилось данное прерывание, останется в стеке. Несмотря на то, что это не является проблемой для выполнения программы, всё же это может привести к переполнению стека, если прерывания происходят на большой частоте.

Заметим, что описанные прoлог и эпилог не сохраняют и не восстанавливают регистры RAM. Для программ обработки прерываний принято сохранять установки регистров пользователя из нижнего Регистрового Файла. Это возможно благодаря доступности 232 байт RAM в нижнем Регистровом Файле. В дополнение к этому RAM из верхнего Регистрового Файла доступно через режим вертикальных окон (см. ниже).

2.3. Регистры специальных функций

2.3.1. Карта памяти

В процессорах 8XC196KC и 8XC196KD распределение адресного пространства показано на рисунке 2:

Рисунок 2

2.3.2. Специальные функциональные регистры (sfr)

Ячейки 00h-17h обеспечивают доступ к специальным функциональным регистрам (SFR) CPU через три горизонтальных окна (HWindow 0, 1 и 15). RALU осуществляет прямое управление всеми периферийными модулями, кроме портов 3 и 4, через SFR. При использовании SFR в качестве базового или индексного регистра при косвенной или индексной адресациях отдавайте себе отчёт в том, что содержимое SFR непредсказуемо. Внешние события могут менять содержимое SFR, и некоторые SFR очищаются при считывании.

Функции многих SFR различны в зависимости от того, считывается ли из них или записывается в них информация. По этой причине никогда не используйте SFR в качестве операнда в команде чтение-модификация-запись. Не используйте зарезервированные SFR; запишите в них 0 или оставьте их в исходном состоянии. При считывании зарезервированные биты и SFR могут возвращать неопределённые значения.