
- •Часть I. Схемотехника
- •Глава 1. Обзор
- •Глава 2. Архитектура
- •Глава 3. Практические схемы включения
- •Глава 4. Программно-логическая модель
- •Глава 5. Система прерываний
- •Часть II. Программирование
- •Глава 6. Первая программа
- •Глава 7. Порт bdma
- •Глава 8. Порт idma
- •Глава 9. Адаптер lpt-idma
- •Глава 10. Менеджер памяти
- •Глава 11. Директивы ассемблера
- •Глава 12. Форматы данных
- •Глава 13. Система команд
- •Часть III. Вычислительные и аппаратные устройства
- •Глава 14. Устройство алу
- •Глава 15. Устройство mac
- •Глава 16. Устройство сдвига
- •Глава 17. Устройство обмена между шинами
- •Глава 18. Программный автомат
- •Глава 19. Генераторы адресов
- •Глава 20. Таймер
- •Глава 21. Синхронные последовательные порты
- •Глава 22. Установка
- •Глава 26. Программирование на языке си
Глава 18. Программный автомат
В этой главе говорится о программном автомате сигнального процессора и выполняемых с его помощью командах.
Программный автомат управляет последовательностью выполнения программы. Он содержит контроллер прерываний и логическое устройство состояний. Программный автомат позволяет осуществлять последовательное выполнение команд, условные и безусловные переходы в программе, обработку прерываний и подпрограмм. Структурная схема этого устройства приведена на рис. 18.1.
Рис. 18.1. Программный автомат сигнального процессора
Основным блоком программного автомата является программный счетчик (PC-program counter). Он представляет собой 14- разрядный регистр, в котором постоянно содержится адрес текущей выполняемой команды. Это значение инкрементируется (увеличивается на 1) каждый раз при выполнении очередной последовательной команды.
Стек программного счетчика служит для временного хранения адреса очередной команды при переходе на обработку подпрограммы, цикловой операции или прерывания. Он позволяет хранить до шестнадцати 14-разрядных слов. Таким образом, уровень вложенности подпрограмм не должен превышать 16.
Контроллер прерываний формирует адрес подпрограммы обработчика прерывания. Он использует данные регистров статуса и влияет на выбор источника следующего адреса.
Блоки счетчика циклов, стека счетчика, компаратора циклов и стека циклов позволяют организовать цикловые операции в программе, не привлекая для этого другие регистры процессора.
Логика выбора формирует сигнал для выбора источника следующего адреса команды.
Ниже приводится полный список команд, выполняемых программным автоматом в соответствии с принятыми ранее условными сокращениями. Назначение команд приводится в тексте описания этих команд и комментариях для некоторых из команд.
Выполнять цикл до определенного условия:<addr> [UNTIL term];
Условный (безусловный) переход:
[IF cond] JUMP |(I4) |;
|(I5) |
|(I6) |
|(I7) |
|<addr>|
Вызов подпрограммы:
[IF cond] CALL |(I4) |;
|(I5) |
|(I6) |
|(I7) |
|<addr>|
Переход (вызов подпрограммы) по состоянию вывода флага Flag In:
[IF] |FLAG_IN | |JUMP| <addr>;
|IF NOT FLAG_IN | |CALL|
Изменение состояния вывода флагов:
[IF cond] |SET | |FLAG_OUT | [,...]; установка флага
|RESET | |FL0 | сброс флага
|TOGGLE | |FL1 | инверсия флага
|FL2 |
Возврат из подпрограммы:
[IF cond] RTS;
Возврат из подпрограммы прерывания:
[IF cond] RTI;
Ожидание прерываний:;
Команда переводит процессор в режим пониженного потребления на некоторое неопределенное время. Для того, чтобы перевести процессор в этот режим на продолжительное время, необходимо после этой команды вставить команду перехода на IDLE, зациклив тем самым программу. Выход из этого режима произойдет по любому прерыванию процессора.
Допустимые значения <term> и <cond> приведены в табл. 18.1 и табл. 18.2 соответственно. Запись <addr> может быть меткой или числовым значением от 0 до 0x3FFF. Примеры команд управления программой:=100; Заполнить счетчик цикловMet1 UNTIL CE; Выполнить цикл до метки Met1, пока счетчик циклов не пуст= DM(I0,M0); Переслать данные через регистр AX0: DM(I1 ,M1 )=AX0; в новую область памяти(I4); Осуществить переход по адресу в индексном регистре I4(I6); Вызвать подпрограмму по адресу в индексном регистре I6FLAG_OUT; Установить в 1 вывод FLAG_OUTFL2 Сбросить флаг FL2FL0 Инвертировать флаг FL0: IDLE; Режим ожидания прерыванияMet2:
Таблица 18.1 Допустимые значения <term>
Таблица 18.2 Допустимые значения <cond>
*Только для команд JUMP, CALL