- •Цифровые сигнальные процессоры
- •Содержание
- •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. Цепи синхронизации и запуска процессора
Допустимые условия cond см. П. 1.17.8.А.
Пример: IF AV CALL scale_down;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит переход на указанный а команде адрес, но предварительно сохраняет в стеке РС адрес возврата. Это делает удобным вызов подпрограмм.
Метод адресации перехода может быть прямым или косвенным регистровым. Прямой адрес <addr> (задается непосредственным операндом или меткой) располагается в 14-битном поле внутри команды. При косвенной регистровой адресации в команде задается один из I регистров. После выполнения перехода пост-модификации этого регистра не производится.
Если команда CALL является последней командой цикла DO UNTIL, то необходимо корректировать состояния стеков цикла.
Флаги состояния: не изменяются.
В) КОМАНДЫ JUMP И CALL С ФЛАГОМ FLAG_IN
IF
FLAG_IN
JUMP
<addr>;
NOT FLAG_IN
CALL
Синтаксис:
Пример: IF FLAG_IN JUMP service_proc_three;
Описание: Процессор проверяет состояние своего входа FI и, если оно соответствует заявленному в команде условию, то выполняются обычные JUMP или CALL (см. пп. 1.17.8.А, 1.17.8.Б) с прямым методом адресации переходов.
Флаги состояния: не изменяются.
Г) МОДИФИКАЦИЯ ВЫХОДНЫХ ФЛАГОВ ПРОЦЕССОРА
[IF cond]
SET
FLAG_OUT
[, …];
RESET
FL0
TOGGLE
FL1
FL2
Синтаксис:
Допустимые условия cond см. п. 1.17.8.А.
Пример: IF MV SET FLAF_OUT, RESET FL1;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит модификацию сигналов на своих выходах FO, FL0-FL2 (см. п. 1.1). Упомянутый в команде сигнал, может быть установлен (SET), сброшен (RESET) или инвертирован (TOGGLE).
В одной команде можно модифицировать множество флагов, которые записываются через запятые (см. пример).
Флаги состояния: не изменяются.
Д) ВОЗВРАТ ИЗ ПОДПРОГРАММ
Синтаксис: [IF cond] RTS;
Допустимые условия cond см. п. 1.17.8.А.
Пример: IF LE RTS;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит считывание с вершины стека РС адреса возврата из подпрограммы, который он пересылает в РС. Указатель стека РС при этом соответственно корректируется.
Если RTS является последней командой внутри цикла DO UNTIL, то необходимо корректировать состояния стеков цикла.
Флаги состояния: не изменяются.
Е) ВОЗВРАТ ИЗ ПРЕРЫВАНИЙ
Синтаксис: [IF cond] RTI;
Допустимые условия cond см. п. 1.17.8.А.
Пример: IF MV RTI;
Описание: Если команда выполняется (условие отсутствует или вернуло TRUE), то процессор производит считывание с вершины стека РС адреса возврата из обработчика прерываний, который он пересылает в РС. Указатель стека РС при этом соответственно корректируется. Происходит также считывание с вершин стеков арифметического состояния (код пересылается в ASTAT), состояния режима (код пересылается в MSTAT) и маски прерывания (код пересылается в IMASK). Указатели этих стеков при этом соответственно корректируются.
Если RTI является последней командой внутри цикла DO UNTIL, то необходимо корректировать состояния стеков цикла.
Флаги состояния: не изменяются.
Ж) ЦИКЛ DO UNTIL
Синтаксис: DO <addr> [UNTIL term];
Допустимые term см. табл. 1.7
Пример: DO loop_label UNTIL CE; {CNTR декрементируется при каждом прохождении цикла}
Описание: Цикл DO UNTIL организует повторное (циклическое) выполнение фрагмента программы, который называется телом цикла. Тело цикла начинается командой, которая непосредственно следует за командой цикла. Концом тела цикла является команда, которая отмечена прямым адресом <addr> (непосредственный операнд или метка).
Выполнение тела цикла повторяется до тех пор, пока выполняется, записанное в команде цикла условие выхода из цикла. Если условие отсутствует, то цикл становится бесконечным. Условие (сформированное предыдущими командами) проверяется при выполнении последней команды. Если условием является СЕ, то содержимое регистра CNTR декрементируется при каждом прохождении тела цикла.
Во время выполнения цикла DO адрес последней команды тела цикла (совместно с кодом условия выхода из цикла) хранится в вершине LOOP стека (см. п. 1.8), а адрес первой команды тела цикла – в вершине РС стека.
Любое вложение DO циклов продолжает запись в LOOP и РС стеки до их предельных уровней (4 уровня для LOOP стека и 16 уровней для РС стека). Попытка нового вложения цикла DO (записи в любой из перечисленных стеков) за пределами указанных уровней вызовет установку битов переполнения соответствующих стеков и выполнение команды NOP.
Флаги состояния ASTAT: не изменяются.
Флаги состояния SSTAT:
SSTAT: |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
LSO |
LSE |
SSO |
SSE |
CSO |
CSE |
PSO |
PSE |
|
* |
0 |
- |
- |
- |
- |
* |
0 |
LSO – переполнение LOOP стека: устанавливается при переполнении LOOP стека, а противном случае не изменяется.
LSE – LOOP стек пуст: всегда очищается, что говорит о заполнении LOOP стека.
PSO – переполнение РС стека: устанавливается при переполнении РС стека, а противном случае не изменяется.
PSE – РС стек пуст: всегда очищается, что говорит о заполнении РС стека.
З) ЭНЕРГОСБЕРЕЖЕНИЕ
Синтаксис: IDLE;
IDLE(n);
Описание: Команда IDLE вызывает переход процессора в режим энергосбережения. Только прерывания могут вывести его из этого режима. Если прерывание случилось, то оно обрабатывается (осуществляется переход на соответствующий обработчик) и выполнение программы продолжается с команды, которая следует за командой IDLE. Обычно такой командой является команда перехода на IDLE, чтобы опять перевести процессор в режим энергосбережения. Если команда IDLE является последней внутри тела цикла DO UNTIL, то необходимо предусмотреть предосторожности, которые описаны в п. 1.8.
IDLE(n) является специальной версией команды IDLE, которая уменьшает частоту внутренней синхронизации процессора для уменьшения энергопотребления. Коэффициент деления частоты синхронизации задается параметром n = 16, 32, 64 или 128. После выполнения команды IDLE(n) процессор остается в рабочем состоянии, но с уменьшенной частотой синхронизации. Пока процессор находится в таком состоянии частота всех внутренних и внешних синхросигналов уменьшается в n раз.
Прерывания также выводят процессор из состояния IDLE(n), но восстановление нормальной частоты происходит по прошествии промежутка времени не менее n тактов.
Если процессор находится в состоянии IDLE(n) и использует внешнюю синхронизацию последовательного порта, то частота внутренней синхронизации процессора может быть меньше частоты внешней синхронизации. Это может создать проблемы, поскольку запросы на прерывания от последовательного порта с прежней интенсивностью процессор обрабатывать не в состоянии по причине сниженной частоты внутренней синхронизации.
Флаги состояния: не изменяются.
