- •Цифровые сигнальные процессоры
- •Содержание
- •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.12.5. Автобуферизация
В обычных условиях SPORT формирует запрос на прерывание, когда он получил или начал выдавать слово данных. Автобуферизация обеспечивает механизм приема/передачи целого блока последовательных данных прежде чем сформируется запрос на прерывание. Это уменьшает частоту прерываний, что ведет к увеличению производительности системы.
Автобуферизация использует способность DAG1, DAG2 поддерживать адресацию кольцевых буферов. При передаче слово данных из кольцевого буфера (по указателю, содержащегося в одном из индексных регистров Ix) пересылается в регистр ТХ0 или ТХ1, из которых передается в канал связи. После выполнения пересылки индексный регистр Ix модифицируется с помощью соответствующего регистра модификации Мх, как и при обычных пересылках. Каждая передача слова данных в канал связи не формирует запроса на прерывание. Такой запрос формируется только после записи в ТХ0 или ТХ1 последнего слова данных кольцевого буфера, когда в индексном регистре формируется адрес первого слова кольцевого буфера.
При приеме данных из канала связи принятое слово записывается в кольцевой буфер по указателю, содержащегося в одном из индексных регистров Ix. После выполнения пересылки индексный регистр Ix модифицируется с помощью соответствующего регистра модификации Мх, как и при обычных пересылках. Запрос на прерывание формируется после приема в кольцевой буфер последнего слова данных, когда в индексном регистре формируется адрес первого слова кольцевого буфера.
Режим автобуферизации может быть независимо разрешен для приема и передачи с помощью регистров управления автобуферизацией (см. пп. П1.3, П1.5).
Номера xIREG в регистрах управления автобуферизацией могут быть в диапазоне 0-3 для DAG1 и в диапазоне 4-7 для DAG2. Номера xMREG (там же) могут быть любыми в диапазоне 0-3. Предполагается, что они принадлежат тому DAGx, в котором определен соответствующий xIREG.
После сброса процессора (а также после очередной загрузки программы) биты TBUF, RBUF обнуляются, что соответствует запрещению автобуферизации.
1.12.6. Пример программирования автобуферизации
Программа конфигурирует SPORT1 на выполнение операций с автобуферизацией. Предполагается, что Fclkin = 12.288 МГц. SPORT1 будет автоматически передавать данные из кольцевого буфера с именем tx_buffer. Он также будет принимать данные из канала связи и автоматически записывать их в кольцевой буфер с именем rx_buffer.
Запрос на прерывание по передаче будет сформирован после передачи всех данных буфера tx_buffer в регистр ТХ1, но перед перезаписью последнего данного в сдвиговый регистр передачи. Запрос на прерывание по приему будет сформирован после заполнения буфера rx_buffer.
.MODULE/RAM code_to_init_Auto_Buff_SPORT1;
{Объявление переменных и точки входа в программу}
.VAR /DM/CIRC tx_buffer[10];
.VAR /DM/CIRC rx_buffer[10];
.ENTRY sport1_inits;
{Инициализация I, M и L регистров}
sport1_inits: I0 = ^tx_buffer; {I0 содержит начальный адрес tx_buffer}
M0 = 1; {используем каждый адрес буферов}
L0 = %tx_buffer; {L0 содержит длину буфера tx_buffer}
I1 = ^rx_buffer; {I1 содержит начальный адрес rx_buffer}
L1 = %rx_buffer; {L1 содержит длину буфера rx_buffer}
{Инициализация SPORT1 на автобуферизацию}
AX0 = 0x0013; {ТХ использ. I0, M0; RX использ. I1, M0}
DM(0x3FEF) = AX0; {автобуферизация разрешена}
{Инициализация SPORT1 на Frfs = 8 КГц, Fsclk = 2.048 МГц}
AX0 = 255; {RFSDIV = 255 для Frfs = 8 КГц}
DM(0x3FF0) = AX0;
AX0 = 2; {SCLKDIV = 2 для Fsclk = 2.048 МГц}
DM(0x3FF5) = AX0;
{Разрешение в SPORT1 нормального фрейминга и внутреннего SCLK}
AX0 = 0x6B27; {нормальный фрейминг, 8-бит -закон}
DM(0x3FF2) = AX0; {внутренняя байтовая синхронизация }
{Инициализация прерываний}
IFC = 6; {очистка всех внешних SPORT запросов}
ICNTL = 0; {запрет вложенных прерываний}
IMASK = 6; {разрешение прерываний от SPORT1}
{Передача первого слова данных в ТХ1}
AX0 = DM(0xI0, M0);
TX1 = AX0;
RTS;
.ENDMOD;
