- •Цифровые сигнальные процессоры
- •Содержание
- •1. Архитектура adsp-2181
- •1.1. Описание выводов процессора
- •1.2. Структурная схема adsp-2181
- •Генераторы адресов данных dag1 и dag2, регистр команд instruction register и программный конвейер program sequencer.
- •1.3. Память программ
- •1.4. Память данных
- •1.5. Функциональная схема alu
- •1.6. Функциональная схема мас
- •1.7. Функциональная схема shifter
- •Значения выходного кода сдвигателя при различных значениях
- •1.8. Функциональная схема программного конвейера
- •1.9. Система прерываний
- •1.9.3. Конфигурирование прерываний.
- •1.10. Регистры состояния и стек состояния
- •1.11. Передача данных
- •1.11.1. Генераторы адресов
- •1.11.2. Узел обмена данными
- •1.12. Последовательные порты
- •1.12.1. Общие сведения
- •1.12.2. Программирование sport
- •Функциональное назначение конфигурационных регистров
- •1.12.3. Пример конфигурирования последовательных портов
- •{Программа инициализации sport0, sport1}
- •1.12.4. Сжатие данных
- •1.12.5. Автобуферизация
- •1.12.6. Пример программирования автобуферизации
- •1.12.7. Многоканальность
- •1.13. Таймер
- •1.14. Системный интерфейс
- •1.14.1. Сигналы синхронизации
- •Состояние регистров процессора после сброса и перезагрузки
- •Состояние регистров bdma после сброса и перезагрузки
- •1.14.2. Внешние прерывания
- •1.14.3. Флажковые биты
- •1.14.4. Режим энергосбережения
- •1.15. Контроллер прямого доступа к байтовой памяти (bdma)
- •1.15.1. Общие сведения
- •1.15.2. Регистры управления bdma
- •1.15.3. Функционирование bdma
- •1.15.4. Загрузка программ с помощью bdma
- •1.16. Порт idma
- •1.16.1. Сигналы idma
- •1.16.2. Функционирование idma
- •1.16.3. Загрузка программ с помощью idma
- •1.17. Система команд
- •1.17.1. Общие сведения
- •1.17.2. Методы адресации
- •1.17.3. Условные обозначения
- •1.17.4. Команды пересылки данных
- •1.17.5. Команды alu
- •Б) вычитание X-y/вычитание X-y с заемом
- •1.17.6. Команды мас
- •1.17.7. Команды shifter
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop см. П. 1.17.7.А.
- •Допустимые регистры xop см. П. 1.17.7.А.
- •1.17.8. Команды управления потоком программы
- •Допустимые условия cond:
- •Допустимые условия cond см. П. 1.17.8.А.
- •1.17.9. Многофункциональные команды
- •1.17.10. Прочие команды
- •1.18. Инструментальные средства разработки программного обеспечения
- •1.18.1. Инструментальные средства для dos
- •1.18.2. Инструментальные средства для windows
- •1.18.3. Создание проекта в VisualDsp
- •1.18.4. Загрузка программы в ez-kit Lite
- •1.19. Примеры программирования в среде VisualDsp
- •1.19.1. Формирование эхо-сигнала
- •Architecture(adsp-2181) // определение типа процессора
- •1.19.2. Эмуляция интерфейса rs-232
- •1.19.3. Эмуляция интерфейса rs-232 (смешанный вариант)
- •Architecture(adsp-2181) // определение типа процессора
- •2. Архитектура системы на основе adsp-2181
- •2.1. Структурная схема вычислительной (управляющей)
- •2.2. Цепи синхронизации и запуска процессора
1.17.4. Команды пересылки данных
А) ПЕРЕСЫЛКА РЕГИСТР – РЕГИСТР
Синтаксис: reg = reg;
Допустимые регистры:
AX0 MX0 SI SB CNTR
AX1 MX1 SE PX OWRCNTR (только запись)
AY0 MY0 SR1 ASTAT RX0
AY1 MY1 SR0 MSTAT RX1
AR MR2 I0-I7 SSTAT (только чтение) ТХ0
MR1 M0-M7 IMASK TX1
MR0 L0-L7 ICNTL IFC (только запись)
Пример: I7 = AR;
Описание: Содержимое регистра источника (справа от знака равенства) пересылается в регистр назначения (слева от знака равенства). После пересылки содержимое регистра назначения всегда с правым выравниванием.
Правое выравнивание подразумевает заполнение старшего байта регистра назначения нулем или распространением знака содержимого регистра источника, когда в большой регистр (например, 16-битный) пересылается содержимое малого регистра (например, 8-битного).
В этом случае процессор поступает следующим образом: если источником являются беззнаковые регистры (I0-I7, L0-L7, CNTR, PX, ASTAT, MSTAT, SSTAT, IMASK и ICNTL), то старший байт регистра назначения заполняется нулем; если источником являются знаковые регистры (все оставшиеся из разрешенных), то старший бай заполняется знаком операнда источника.
Когда содержимое большого регистра записывается в малый (например, 16-битный в 14-битный), то отбрасываются два старших бита операнда источника.
Следует помнить, что при загрузке регистра MR1 знак загружаемого операнда распространяется в регистр MR2.
Флаги состояния: не изменяются.
Б) ЗАГРУЗКА РЕГИСТРА НЕПОСРЕДСТВЕННЫМИ
ДАННЫМИ
Синтаксис: reg = <data>
dreg = <data>
data: <константа>
'%' <имя переменной/буфера>
'^' <имя переменной/буфера>
(в среде VisualDSP <имя переменной/буфера> и
length(<имя переменной/буфера>) соответственно)
Допустимые регистры:
dreg (16-битные) reg (максимум 14-битные)
AX0 MX0 SI SB CNTR
AX1 MX1 SE PX OWRCNTR (только запись)
AY0 MY0 SR1 ASTAT RX0
AY1 MY1 SR0 MSTAT RX1
AR MR2 IMASK ТХ0
MR1 ICNTL TX1
MR0 I0-I7 IFC (только запись)
M0-M7
L0-L7
Примеры: I0 = ^data_buffer; (I0 = data_buffer;)
L0 =% data_buffer; (L0 = length(data_buffer);)
Описание: Непосредственное данное data загружается в регистр назначение. Данным может быть константа, а также имя любой переменной/буфера, перед которой стоят операторы длины (%) или указателя (^). В среде VisualDSP символ (^) необходимо опускать, а символ (%) заменять словом length.
Данное должно быть длиной 16 бит для загрузки регистров данных (dreg) и не более 14 бит для всех оставшихся регистров (reg). В регистре назначении данное всегда располагается с правым выравниваем. Если длина данного меньше длины регистра назначения, то старшие разряды регистра заполняются знаком данного.
При загрузке регистра MR1 знак загружаемого операнда распространяется в регистр MR2.
Особенность команды является то, что с ее помощью 16-битные регистры RX и ТХ можно загрузить только 14-битной константой. Для полного использования возможностей этих регистров следует применять команды регистр-регистр (см. п. 1.17.4.А) или ПД-регистр (см. п. 1.17.4.В).
Флаги состояния: не изменяются.
В) ЧТЕНИЕ ПД (ПРЯМАЯ АДРЕСАЦИЯ)
Синтаксис: reg = DM(<addr>);
Допустимые регистры: см. п. 1.17.4.А за исключением регистра SSTAT, который работает только на чтение и не может быть записан.
Пример: SI = DM(0x1234);
Описание: Команда чтения ПД с прямым методом адресации пересылает содержимое ячейки ПД с адресом addr в регистр назначение. Поскольку метод адресации – прямой, то адрес (заданный константой или меткой) запоминается в самой команде как 14-битное поле. Операнд в регистр назначение загружается с правым выравниваем. При загрузке регистра MR1 знак загружаемого операнда распространяется в регистр MR2.
Флаги состояния: не изменяются.
Г) ЧТЕНИЕ ПД (КОСВЕННАЯ АДРЕСАЦИЯ)
dreg = DM (
I0
,
M0
);
I1
M1
I2
M2
I3
M3
I4
M4
I5
M5
I6
M6
I7
M7
Синтаксис:
Допустимые регистры dreg:
AX0 MX0 SI
AX1 MX1 SE
AY0 MY0 SR1
AY1 MY1 SR0
AR MR2
MR1
MR0
Пример: AY0 = DM(I3, M1);
Описание: Команда чтения ПД с косвенным методом адресации пересылает содержимое ячейки ПД, адрес которой находится в индексном регистре Ix, в регистр назначение. После пересылки содержимое индексного регистра модифицируется (инкрементируется) содержимым регистра модификации Мх. Для линейной косвенной адресации необходимо, чтобы регистр длины Lх, соответствующий индексному регистру был обнулен. Операнд в регистр назначение загружается с правым выравниваем.
Флаги состояния: не изменяются.
Д) ЧТЕНИЕ ПП (КОСВЕННАЯ АДРЕСАЦИЯ)
dreg = PM (
I4
,
M4
);
I5
M5
I6
M6
I7
M7
Синтаксис:
Допустимые регистры dreg: см. п. 1.17.4.Г.
Пример: MX1 = PM(I6, M5);
Описание: Команда чтения ПП с косвенным методом адресации пересылает содержимое ячейки ПП, адрес которой находится в индексном регистре Ix, в регистр назначение. После пересылки содержимое индексного регистра модифицируется (инкрементируется) содержимым регистра модификации Мх. Для линейной косвенной адресации необходимо, чтобы регистр длины Lх, соответствующий индексному регистру был обнулен.
В регистр назначение пересылается содержимое битов 23-8 (самые значащие) указанной ячейки ПП. Причем, бит 8 источника попадает в бит 0 назначения (правое выравнивание). Если регистр назначение короче 16 битов, то лишние старшие разряды отбрасываются. Младший байт источника (биты 7-0) всегда загружаются в РХ регистр. Их можно игнорировать. Если они нужны, то могут быть прочитаны в следующем цикле.
Флаги состояния: не изменяются.
Е) ЗАПИСЬ В ПД (ПРЯМАЯ АДРЕСАЦИЯ)
Синтаксис: DM(<addr>) = reg;
Допустимые регистры: см. п. 1.17.4.А за исключением регистров OWRCNTR и IFC, которые работают только на запись и поэтому не могут быть считаны.
Пример: DM(0x2345) = AR;
Описание: Команда записи ПД с прямым методом адресации пересылает содержимое регистра источника (справа от знака равенства) в ячейку ПД с адресом addr. Поскольку метод адресации – прямой, то адрес (заданный константой или меткой) запоминается в самой команде как 14-битное поле.
Операнд в ячейку памяти загружается с правым выравниваем. Это означает, что если длина регистра источника меньше 16 бит, то старшие разряды ячейки памяти заполняются либо нулем, либо знаком пересылаемого операнда.
Процессор поступает следующим образом. Если регистр источник беззнаковый (I0-I7, L0-L7, CNTR, PX, ASTAT, MSTAT, SSTAT, IMASK и ICNTL), то старшие биты ячейки памяти заполняются нулем, в противном случае (любой другой допустимый регистр кроме перечисленных) – знаком пересылаемого операнда.
При загрузке регистра MR1 знак загружаемого операнда распространяется в регистр MR2.
Флаги состояния: не изменяются.
Ж) ЗАПИСЬ В ПД (КОСВЕННАЯ АДРЕСАЦИЯ)
С
DM (
I0
,
M0
) =
dreg
;
I1
M1
<data>
I2
M2
I3
M3
I4
M4
I5
M5
I6
M6
I7
M7
data: <константа>
'%' <имя переменной/буфера>
'^' <имя переменной/буфера>
см., также, п. 1.17.4.Б
Допустимые регистры dreg: см. п. 1.17.4.Г.
Пример: DM(I2, M0) = MR1;
Описание: Команда записи в ПД с косвенным методом адресации пересылает содержимое регистра источника или непосредственное данное в ячейку ПД, адрес которой находится в индексном регистре Ix. После пересылки содержимое индексного регистра модифицируется (инкрементируется) содержимым регистра модификации Мх. Данным может быть константа, а также имя любой переменной/буфера, перед которой стоят операторы длины (%) или указателя (^),см., также, п. 1.17.4.Б.
Для линейной косвенной адресации необходимо, чтобы регистр длины Lх, соответствующий индексному регистру был обнулен. Операнд в ячейку ПД загружается с правым выравниваем. Если длина регистра источника меньше 16 бит, то в ячейке ПД происходит распространение знака операнда влево.
Флаги состояния: не изменяются.
З) ЗАПИСЬ В ПП (КОСВЕННАЯ АДРЕСАЦИЯ)
PM (
I4
,
M4
) =
dreg;
I5
M5
I6
M6
I7
M7
Синтаксис:
data: <константа>
'%' <имя переменной/буфера>
'^' <имя переменной/буфера>
см., также, п. 1.17.4.Б
Допустимые регистры dreg: см. п. 1.17.4.Г.
Пример: PM(I6, M5) = AR;
Описание: Команда записи в ПП с косвенным методом адресации пересылает содержимое регистра источника в ячейку ПП, адрес которой находится в индексном регистре Ix. После пересылки содержимое индексного регистра модифицируется (инкрементируется) содержимым регистра модификации Мх. Для линейной косвенной адресации необходимо, чтобы регистр длины Lх, соответствующий индексному регистру был обнулен.
Содержимое регистра источника загружается в старшие 16 бит ячейки ПП, т.е. бит 0 операнда загружается в бит 8 ячейки памяти (правое выравнивание). Восемь младших бит ячейки памяти загружаются из регистра РХ. Если длина регистра источника меньше 16 бит, то в ячейке ПП происходит распространение знака операнда влево.
Флаги состояния: не изменяются.
И) ЧТЕНИЕ/ЗАПИСЬ ПРОСТРАНСТВА ВВОДА/ВЫВОДА
Синтаксис: IO(<addr>) = dreg; { запись в порт}
dreg = IO(<addr>); {чтение порта}
<addr> - 11 – битный прямой адрес от 0 до 2047
Допустимые регистры dreg: см. п. 1.17.4.Г.
Описание: Команды записи/чтения пространства ввода/вывода используются для доступа к пространству памяти ввода/вывода. Только эти команды формируют сигнал IOMS# (см. п. 1.1).
Флаги состояния: не изменяются.
