Последовательность выполняемых при этом переходов: сигнал на входе
контроллера → вектор на выходе контроллера → таблица → адрес начала под-
программы. Для каждого сигнала контроллера в таблице зарезервировано 4
ячейки памяти и определен вектор. Вектор – это число, соответствующее по-
рядковому номеру сигнала и передаваемое контроллером процессору по внут-
ренней шине с той целью, чтобы процессор смог определить источник преры-
вания. Прерывания могут вызываться как внешними устройствами по отноше-
нию к процессору, так и внутренними. Для определения вектора необходимо
адрес, указанный в таблице, разделить на четыре (каждому источнику в памяти
отведено четыре ячейки памяти).
Если, например, периодические прерывания вызывает сигнал внутренне-
го таймера, то контроллер передает процессору вектор 0х000А. Умножением на
четыре процессор рассчитывает первый адрес 0х0028 четырех ячеек памяти и
записывает его в программный счетчик. Поскольку разместить реальную под-
программу обработки в четырех ячейках памяти невозможно, то здесь обычно
записывают команду безусловного перехода на начало подпрограммы обработ-
ки прерывания таймера. В программах пользователя на языке ассемблера при
заполнении таблицы векторов указывается имя подпрограммы в строке, соот-
ветствующей вектору 0х000А.
Выполнив подпрограмму обработки прерывания, процессор после коман-
ды завершения RTI автоматически восстанавливает системные регистры, читая
их содержимое из стека, записывает в программный счетчик адрес команды
n+1 и продолжает выполнение основной программы с той точки, в которой
произошел выход на подпрограмму. Поэтому приведенная в листинге 1 про-
грамма расчета выходного сигнала КИХ-фильтра должна находиться не в ос-
новной программе, а в подпрограмме обработки прерывания таймера или по-
следовательного порта, к которому подключены АЦП и ЦАП.
Регистр маскирования IMASK разрешает или запрещает прерывания ин-
дивидуально по каждому внешнему сигналу или встроенному устройству (табл.