Аппаратные прерывания могут быть вызваны внешними источниками, такими как, например, устройства ввода/вывода. Каждое такое устройство использует один из 32 входов запросов прерывания процессора. Прерывания происходят при выполнении следующих условий:
· бит PIE регистра status установлен в единичное состояние;
· один из входов запросов прерывания (irqk) процессора активирован;
· соответствующий бит регистра разрешения прерываний ienable содержитединичное значение.
Содержимое регистра ipending отражает прерывания, требующие обработки. Обработчик прерываний определяет, какие из них имеют наибольший приоритет, и передает управление в соответствующую подпрограмму. Возврат из обработчика прерывания в основную программу осуществляется с помощью команды eret, описанной выше. Следует отметить, что перед выполнением этой команды необходимо модифицировать регистр ea. Модификация состоит в вычитании 4 из его содержимого. Это необходимо сделать, так как при возникновении сигнала прерывания выполнение текущей инструкции прекращается, а в регистр ea записывается адрес следующей команды.
Нереализованные инструкции
Такое исключение возникает, когда процессор в ходе своей работы обнаруживает инструкцию, которая не реализована аппаратно. Такая ситуация может произойти, например, в случае использования инструкций mul или div в процессоре Nios II/е. Обработчик исключений, выяснив причину исключения, может вызвать подпрограмму, эмулирующую выполнение этой инструкции. Следует напомнить, что в экономичной версии процессора не поддерживается аппаратное выполнение умножения и деления.
Определение типа исключения.
В случае возникновения исключения, обработчик исключений должен определить его тип. Для этого он выполняет следующие действия.
1. Считывает регистр ipending и по его содержимому определяет, было ли вызвано исключение аппаратным прерыванием. Если да, то управление передается соответствующей подпрограмме.
2. Считывает инструкцию, во время выполнения которой возникло прерывание. Если это инструкция trap, то управление передается соответствующему обработчику.
3. Если первые 2 условия не выполняются, тогда исключение было вызвано нереализованной инструкцией.