Назначение остальных регистров управления и состояния блока программного автомата процессора, приводится в табл. 4.1. Обращение к этим регистрам из программы производится по их логическим именам, совпадающим с именами, приведенными на рис. 4.1 и в табл. 4.1.
Таблица 4.1а
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 7 | 0 | Флаг знака ввода в устройство сдвига SHIFTER (SS) |
| 6 | 0 | Флаг переполнения в умножителе-накопителе MAC (MV) |
| 5 | 0 | Флаг частного АЛУ (AQ) |
| 4 | 0 | Флаг знака ввода порта X в АЛУ (AS) |
| 3 | 0 | Флаг переноса бита в АЛУ (АС) |
| 2 | 0 | Флаг переполнения АЛУ (AV) |
| 1 | 0 | Флаг отрицательного результата в АЛУ (AN) |
| 0 | 0 | Флаг нулевого значения в АЛУ (AZ) |
Таблица 4.1б
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 6 | 0 | Разрешение режима GO |
| 5 | 0 | Разрешение работы таймера |
| 4 | 0 | Результаты умножителя: 0 — дробные, 1 — целые |
| 3 | 0 | Разрешение режима насыщения регистра AR АЛУ |
| 2 | 0 | Разрешение режима фиксации переполнения АЛУ |
| 1 | 0 | Разрешение бит-реверсивной адресации DAG1 |
| 0 | 0 | Выбор банка регистров данных: 0 — главный, 1 — теневой |
Таблица 4.1в
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 15…10 | 0 | Не используются |
| 9 | 0 | -IRQ2 |
| 8 | 0 | -IRQL1 |
| 7 | 0 | -IRQL0 |
| 6 | 0 | Передатчик SPORT0 |
| 5 | 0 | Приемник SPORT0 |
| 4 | 0 | -IRQE |
| 3 | 0 | BDMA |
| 2 | 0 | Передатчик SPORT1 или -IRQ1 |
| 1 | 0 | Приемник SPORT0 или -IRQ0 |
| 0 | 0 | Таймер |
Таблица 4.1г
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 7 | 0 | Стек циклов переполнен |
| 6 | 1 | Стек циклов пуст |
| 5 | 0 | Стек состояний переполнен |
| 4 | 1 | Стек состояний пуст |
| 3 | 0 | Стек счетчика переполнен |
| 2 | 1 | Стек счетчика пуст |
| 1 | 0 | Стек счетчика команд переполнен |
| 0 | 1 | Стек счетчика команд пуст |
Таблица 4.1д
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 4 | X | Вложенность прерываний: 0 — запрещена, 1 — разрешена |
| 3 | 0 | Не используется |
| 2 | X | Чувствительность -IRQ2: 0 — уровень, 1 — фронт |
| 1 | X | Чувствительность -IRQ1: 0 — уровень, 1 — фронт |
| 0 | X | Чувствительность -IRQ0: 0 — уровень, 1 — фронт |
Таблица 4.1е
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 15 | 0 | Принудительная установка прерывания -IRQ2 |
| 14 | 0 | Принудительная установка прерывания передатчика SPORT0 |
| 13 | 0 | Принудительная установка прерывания приемника SPORT0 |
| 12 | 0 | Принудительная установка прерывания -IRQE |
| 11 | 0 | Принудительная установка прерывания BDMA |
| 10 | 0 | Принудительная установка прерывания передатчика SPORT1 или -IRQ1 |
| 9 | 0 | Принудительная установка прерывания приемника SPORT0 или -IRQ0 |
| 8 | 0 | Принудительная установка прерывания таймера |
| 7 | 0 | Сброс прерывания -IRQ2 |
| 6 | 0 | Сброс прерывания передатчика SPORT0 |
| 5 | 0 | Сброс прерывания приемника SPORT0 |
| 4 | 0 | Сброс прерывания -IRQE |
| 3 | 0 | Сброс прерывания BDMA |
| 2 | 0 | Сброс прерывания передатчика SPORT1 или -IRQ1 |
| 1 | 0 | Сброс прерывания приемника SPORT0 или -IRQ0 |
| 0 | 0 | Сброс прерывания таймера |
X — произвольное состояние после сброса.
Блок арифметико-логического устройства ALU включает в себя:
• два 16-разрядных регистра операндов AX0 и AX1;
• два 16-разрядных регистра операндов AY0 и AY1;
• один 16-разрядный регистр результата AR;
• один 16-разрядный регистр обратной связи AF.
Все эти регистры имеют своих двойников — теневые регистры, изображенные на рисунке программно-логической модели процессора в виде теней. Переключение между основными и теневыми регистрами производится программно. Блок умножителя MAC включает в себя:
• два 16-разрядных регистра операндов MX0 и MX1;
• два 16-разрядных регистра операндов MY0 и MY1;
• два 16-разрядных регистра результата MR0 и MR1;
• один 8-разрядный регистра результата MR2;
• один 16-разрядный регистр обратной связи AMF.
Блок устройства сдвига SHIFTER включает в себя:
• два 16-разрядных регистра результата SR0 и SR1;
• один 5-разрядный регистр блочных операций SB;
• один 8-разрядный регистр экспоненты SE;
• один 16-разрядный регистр операнда SI.
Так же как и в ALU, в блоках MAC и SHIFTER все регистры имеют своих двойников — теневые регистры.
Устройство обмена между шинами представляет собой 8-разрядный регистр PX, участвующий в пересылках между шинами адреса и данных.
Остальные регистры процессора распределены между блоками таймера, интерфейсной памяти, портов SPORT0 и SPORT1, портов IDMA и BDMA и блоком программируемых флагов.
Все эти регистры процессора доступны как ячейки памяти данных, т.е. отображены на память данных процессора. Для таких регистров, на рисунке программно-логической модели приведен адрес каждого регистра в шестнадцатеричном виде, слева от его обозначения.
Всего в процессоре отведено тридцать две ячейки 16-разрядных слов с адреса 0x3FE0 по адрес 0x3FFF для регистров такого типа. Часть ячеек памяти для таких регистров не используется в рассматриваемом процессоре ADSP-2181, но используется в других процессорах семейства ADSP-21XX.
В табл. 4.2 приведено назначение разрядов всех регистров, отображенных на память процессора.
Таблица 4.2а
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 15…13 | 0 | Не используются |
| 12 | 0 | Разрешение порта SPORT0: 0=порт запрещен, 1=порт разрешен |
| 11 | 0 | Разрешение порта SPORT1: 0=порт запрещен, 1=порт разрешен |
| 10 | 0 | Конфигурация режима работы порта SPORT1: 0=сигналы FI FO IRQ0 IRQ1 SCLK, 1=последовательный порт SPORT1 |
| 9…3 | 0 | Не используются |
| 2…0 | 1 | Циклы ожидания памяти программ от 0 до 7 |
Таблица 4.2б
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 15 | 0 | Не используется |
| 14…12 | 1 | Циклы ожидания памяти данных от 0 до 7 |
| 11…9 | 1 | Циклы ожидания 3-й группы портов ввода-вывода от 0 до 7 |
| 8…6 | 1 | Циклы ожидания 2-й группы портов ввода-вывода от 0 до 7 |
| 5…3 | 1 | Циклы ожидания 1-й группы портов ввода-вывода от 0 до 7 |
| 2…0 | 1 | Циклы ожидания 0-й группы портов ввода-вывода от 0 до 7 |
Таблица 4.2в
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| Регистр периода таймера TPERIOD, адрес памяти данных=0x3FFD | ||
| 15…0 | X | Период таймера от 0 до 0xFFFF |
| Регистр счетчика таймера TCOUNT, адрес памяти данных=0x3FFC | ||
| 15…0 | X | Счетчик таймера от 0 до 0xFFFF |
| Регистр масштабирования таймера TSCALE, адрес памяти данных=0x3FFB | ||
| 15…8 | 0 | Не используются |
| 7…0 | X | Масштабирование таймера от 0 до 0xFF |
Таблица 4.2г
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| Регистр разрешения многоканального приема S0RW1, адрес памяти данных = 0x3FFA | ||
| 15…0 | X | Разрешение приема канала 31…16 |
| Регистр разрешения многоканального приема S0RW0, адрес памяти данных = 0x3FF9 | ||
| 15…0 | X | Разрешение приема канала 15…0 |
| Регистр разрешения многоканальной передачи S0TW1, адрес памяти данных=0x3FF8 | ||
| 15…0 | X | Разрешение передачи канала 31…16 |
| Регистр разрешения многоканальной передачи S0TW0, адрес памяти данных=0x3FF7 | ||
| 15…0 | X | Разрешение передачи канала 15…0 |
| Регистр управления S0CR, адрес памяти данных=0x3FF6 | ||
| 15 | 0 | Разрешение многоканальности: 0 — запрещено, 1 — разрешено |
| 14 | 0 | Разрешение внутреннего тактового генератора: 0 — запрещен, 1 — разрешен |
| 13 | 0 | Требование кадровой синхронизации приема: 0 — не требуется, 1 — требуется (в многоканальном режиме — задержка) |
| 12 | 0 | Требование широкого кадрового импульса приемника: 0 — не требуется, 1 — требуется (в многоканальном режиме — задержка) |
| 11 | 0 | Требование кадровой синхронизации передатчика: 0 — не требуется, 1 — требуется (в многоканальном режиме — задержка) |
| 10 | 0 | Требование широкого кадрового импульса передатчика: 0 — не требуется, 1 — требуется (в многоканальном режиме — задержка) |
| 9 | 0 | Разрешение внутреннего тактового генератора передатчика: 0 — запрещен, 1 — разрешен (в многоканальном режиме — число каналов: 0 — 24 канала, 1 — 32 канала) |
| 8 | 0 | Разрешение внутреннего кадрового генератора приемника: 0 — запрещено, 1 — разрешено |
| 7 | 0 | Разрешение инвертирования кадрового генератора передатчика: 0 — запрещено, 1 — разрешено (только в многоканальном режиме) |
| 6 | 0 | Разрешение инвертирования кадрового генератора приемника: 0 — запрещено, 1 — разрешено |
| 5, 4 | 0 | Формат данных: 00 — выравнивание по правому краю, старшие биты=0, 01 — выравнивание по правому краю, старшие биты=знаку, 10 — компандирование по МЮ закону, 11 — компандирование по А закону |
| 3…0 | 0 | Длина слова минус 1 |
| Регистр делителя тактовых импульсов S0CLKDIV, адрес памяти данных = 0x3FF5 | ||
| 15…0 | 0 | Делитель частоты тактовых импульсов = (CLKOUT/2*SCLK)-1 |
| Регистр делителя кадровых импульсов приемника S0RFDIV, адрес памяти данных=0x3FF4 | ||
| 15...0 | 0 | Делитель частоты тактовых импульсов = (SCLK/RFS)-1 |
| Регистр управления авто буферизацией S0ABUF, адрес памяти данных = 0x3FF3 | ||
| 15 | 0 | Не используется |
| 14 | 0 | Бит разрешения CLKOUT |
| 13 | 0 | Не используется |
| 12 | 0 | Бит управления округлением со смещением |
| 11…9 | 0 | Номер индексного регистра передатчика |
| 8, 7 | 0 | Номер регистра модификатора передатчика |
| 6…4 | 0 | Номер индексного регистра приемника |
| 3, 2 | 0 | Номер регистра модификатора приемника |
| 1 | 0 | Разрешение автобуферизации передатчика |
| 0 | 0 | Разрешение автобуферизации приемника |
Таблица 4.2д
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| Регистр управления S1CR, адрес памяти данных=0x3FF2 | ||
| 15 | 0 | Флаг FO (только чтение) |
| 14 | 0 | Разрешение внутреннего тактового генератора: 0 — запрещен, 1 — разрешен |
| 13 | 0 | Требование кадровой синхронизации приема: 0 — не требуется, 1 — требуется |
| 12 | 0 | Требование широкого кадрового импульса приемника: 0 — не требуется, 1 — требуется |
| 11 | 0 | Требование кадровой синхронизации передатчика: 0 — не требуется, 1 — требуется |
| 10 | 0 | Требование широкого кадрового импульса передатчика: 0 — не требуется, 1 — требуется |
| 9 | 0 | Разрешение внутреннего тактового генератора передатчика: 0 — запрещен, 1 — разрешен |
| 8 | 0 | Разрешение внутреннего кадрового генератора приемника: 0 — запрещено, 1 — разрешено |
| 7 | 0 | Разрешение инвертирования кадрового генератора передатчика: 0 — запрещено, 1 — разрешено |
| 6 | 0 | Разрешение инвертирования кадрового генератора приемника: 0 — запрещено, 1 — разрешено |
| 5, 4 | 0 | Формат данных: 00 — выравнивание по правому краю, старшие биты=0, 01 — выравнивание по правому краю, старшие биты=знаку, 10 — компандирование по МЮ закону, 11 — компандирование по А закону |
| 3…0 | 0 | Длина слова минус 1 |
| Регистр делителя тактовых импульсов S1CLKDIV, адрес памяти данных=0x3FF1 | ||
| 15…0 | 0 | Делитель частоты тактовых импульсов = (CLKOUT/2*SCLK)-1 |
| Регистр делителя кадровых импульсов приемника S1RFDIV, адрес памяти данных=0x3FF0 | ||
| 15…0 | 0 | Делитель частоты тактовых импульсов = (SCLK/RFS)-1 |
| Регистр управления автобуферизацией S1ABUF, адрес памяти данных=0x3FEF | ||
| 15 | 0 | Блокирование вывода XTAL в режиме пониженной мощности: 0 — активен, 1 — блокирован (этот вывод должен быть блокирован, если к процессору подключен генератор, а не кварцевый резонатор) |
| 14 | 0 | Разрешение задержки запуска процессора из режима пониженной мощности на 4096 циклов: 0 — запрещено, 1 — разрешено |
| 13 | 0 | Принудительный вход в режим пониженной мощности: 0 — нормальный режим, 1 — режим пониженной мощности (осуществляется переход на вектор прерывания пониженной мощности) |
| 12 | 0 | Принудительный перезапуск процессора при подаче питания: 0 — нормальный режим, 1 — программный перезапуск |
| 11…9 | 0 | Номер индексного регистра передатчика |
| 8, 7 | 0 | Номер регистра модификатора передатчика |
| 6…4 | 0 | Номер индексного регистра приемника |
| 3, 2 | 0 | Номер регистра модификатора приемника |
| 1 | 0 | Разрешение автобуферизации передатчика |
| 0 | 0 | Разрешение автобуферизации приемника |
Таблица 4.2е
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| Регистр управления программируемыми флагами PFTYPE, адрес памяти данных=0x3FE6 | ||
| 15 | 0 | Не используется |
| 14…12 | 1 | Циклы ожидания байтовой памяти данных BDMA от 0 до 7 |
| 11 | 1 | Разрешение выборки портов ввода-вывода сигналом -CMS: 0 — запрещено, 1 — разрешено |
| 10 | 0 | Разрешение выборки байтовой памяти данных BDMA сигналом -CMS: 0 — запрещено, 1 — разрешено |
| 9 | 1 | Разрешение выборки памяти данных сигналом -CMS: 0 — запрещено, 1 — разрешено |
| 8 | 1 | Разрешение выборки памяти программ сигналом -CMS: 0 — запрещено, 1 — разрешено |
| 7…0 | 0 | Режим работы программируемых выводов флагов PF7…PF0: 0 — выход, 1 — вход |
| Регистр управления программируемыми флагами PFDATA, адрес памяти данных=0x3FE5 | ||
| 15…8 | X | Не используются |
| 7…0 | X | Данные программируемых выводов флагов PF7…PF0 (чтение/запись) |
Таблица 4.2ж
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| Регистр-счетчик слов BWCOUNT, адрес памяти данных=0x3FE4 | ||
| 15, 14 | 0 | Не используются |
| 14…0 | 0x20/0 | Значение счетчика (когда MMAP=0 и BMODE=0 значение счетчика = 0x20, когда MMAP=1 или BMODE=1 значение счетчика = 0) |
| Регистр управления BDMACR, адрес памяти данных = 0x3FE3 | ||
| 15…8 | 0 | Номер страницы BDMA от 0 до 0xFFFF |
| 7…4 | 0 | Не используются |
| 3 | 1 | Режим работы процессора при выполнении циклов BDMA: 0 — работа, 1 — останов |
| 2 | 0 | Направление передачи данных: 0 — чтение из BDMA, 1 — запись в BDMA |
| 1, 0 | 0 | Тип данных: 00 — память программ 24 разрядов, 01 — память данных 16 разрядов, 10 — память данных 8 старших разрядов, 11 — память данных 8 младших разрядов |
| Регистр внешнего адреса BEAD, адрес памяти данных = 0x3FE2 | ||
| 15, 14 | 0 | Не используются |
| 13…0 | 0 | Значение внешнего адреса на шине процессора, при обмене через BDMA (от 0 до 0x3FFF) |
| Регистр внутреннего адреса BIAD, адрес памяти данных = 0x3FE1 | ||
| 15, 14 | 0 | Не используются |
| 13…0 | 0 | Значение внутреннего адреса памяти процессора при обмене через BDMA (от 0 до 0x3FFF) |
Таблица 4.2з
| Разряд | Исходное состояние | Назначение |
|---|---|---|
| 15 | 0 | Не используется |
| 14 | 0 | Указатель типа памяти: 0 = память программ РМ, 1 = память данных DM |
| 13...0 | 0 | Значение начального адреса памяти процессора при обмене через IDMA (от 0 до 0x3FFF) |
X — произвольное состояние после сброса.
Условные обозначения регистров в таблицах соответствуют их названиям на программно-логической модели, изображенной на рис. 4.1.
Все перечисленные выше регистры позволяют осуществлять полный контроль и управление над процессором со стороны программы.
Глава 5. Система прерываний
В этой главе описывается система прерываний процессора, позволяющая процессору оперативно реагировать на различные события.
Диспетчер прерываний позволяет процессору реагировать на одиннадцать возможных прерываний и сброс. Все векторы прерываний процессора ADSP-2181 представлены в табл. 5.1.
Таблица 5.1
| Приоритет | Источник прерывания | Адрес (HEX) |
|---|---|---|
| Высший приоритет 0 | Сброс (или выход из режима пониженной мощности при установке 12-го разряда регистра S1ABUF=1) | 0000 |
| 1 | Снижение потребляемой мощности (немаскируемое прерывание) | 002C |
| 2 | IRQ2 | 0004 |
| 3 | IRQL1 | 0008 |
| 4 | IRQL0 | 000C |
| 5 | SPORT0 Передатчик | 0010 |
| 6 | SPORT0 Приемник | 0014 |
| 7 | IRQE | 0018 |
| 8 | BDMA прерывание | 001C |
| 9 | SPORT1 Передатчик или IRQ1 | 0020 |
| 10 | SPORT1 Приемник или IRQ0 | 0024 |
| 11 Низший приоритет | Таймер | 0028 |
Прерывания в процессоре имеют различную приоритетность, от 0 до 11. При возникновении любого из прерываний, процессор выполняет переход на подпрограмму обработки соответствующего прерывания, адрес которой заложен в векторе данного прерывания. Адреса векторов прерываний расположены в самом начале программной памяти процессора через четыре 24-разрядных слова команды, что позволяет производить простую обработку или выход из прерывания на месте, без перехода на подпрограмму обработчика прерывания. В противном случае может быть выполнен безусловный переход на подпрограмму обработчика прерывания командой jump.
Процессор ADSP-2181 имеет четыре вывода для поддержки внешних прерываний: IRQ2, IRQL0, IRQL1 и IRQE. Кроме того, благодаря возможности SPORT1 быть переконфигурированным на выводы флагов FLAG_IN, FLAG_OUT и прерываний IRQ0, IRQ1, процессор может иметь еще два входа внешних прерываний вместо внутренних прерываний SPORT1. В результате, в общей сложности процессор может иметь шесть внешних прерываний.
Помимо внешних прерываний, процессор имеет и внутренние источники прерываний. Источниками внутренних прерываний являются таймер, байтовый порт BDMA, два последовательных порта SPORT1 и SPORT2, программное прерывание сброса и прерывание, вызываемое снижением напряжения питания.
Все прерывания, кроме немаскируемого и сброса, можно запретить с помощью регистра IMASK (см. табл.1). Кроме того, можно программно сгенерировать или сбросить некоторые прерывания с помощью регистра IFC.
Процессор реагирует на уровень сигналов на выводах прерываний IRQL0 и IRQL1. Прерывание IRQE возникает по фронту изменения сигнала на этом выводе. Чувствительность процессора к сигналам IRQ0, IRQ1 и IRQ2 определяется программно, с помощью регистра ICNTL.
В следующей главе будет рассмотрена система команд процессора, с помощью которой осуществляются запись и чтение всех перечисленных здесь регистров и ячеек памяти самого процессора, а также операции сложения, умножения, ввода-вывода, управления программируемыми флагами и др.
Часть II. Программирование
В этой части книги описывается создание первой рабочей программы для сигнального процессора и ее трансляции для получения исполняемого кода. Дается описание процедуры загрузки и портов, через которые возможна данная операция. Приводится описание разработанного автором устройства для загрузки программ, просмотра и редактирования памяти процессора с помощью компьютера. Описываются назначение и работа специальной программы менеджера памяти. Дается описание директив ассемблера, формата данных и система команд для сигнального процессора.
Глава 6. Первая программа
В этой главе говорится о создании программ для сигнального процессора, инструментальном программном обеспечении, отладке и способах загрузки программ в сигнальный процессор.
Начнем изучение программирования сигнального процессора с конкретного примера программы, приведенной ниже. Эта программа поможет нам в изучении структуры программы, системы команд процессора и средств разработки, а также позволит на практике освоить процедуру отладки и загрузки программы в память процессора.
Введите текст этой программы в компьютер с помощью любого текстового редактора и сохраните в файле с именем mem_clr.dsp или скопируйте с компакт-диска, прилагаемого к данной книге.
/***********************************************************/
/* Программа mem_clr загружается в память программ и после */
/* запуска заполняет память данных сигнального процессора */
/* с адреса 0x0000 по адрес 0x3fdf числовыми значениями */
/* */
/* Версия: 1.0 */
/* Автор: О.Д.Вальпа */
/***********************************************************/
.module/RAM/ABS=0 mem_clr; { Модуль памяти mem_clr с адреса 0 }
.include <def2181.h>; { Включить файл определений }
.var/dm/ram/circ buf_dm[0x3fdf]; { Циклический буфер в памяти данных }