- •Цифровые сигнальные процессоры
- •Содержание
- •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.2. Программирование sport
Для программиста SPORT представляется двумя группами регистров: конфигурационными и данных. Конфигурационные регистры располагаются в ПД и служат для задания режима работы SPORT. Перед первым использованием порта они должны быть обязательно проинициализированы. Регистры данных (RX и TX) используются для приема/передачи данных через порт.
Адреса и функциональное назначение конфигурационных регистров приведены в табл. 1.13.
Таблица 1.13
Функциональное назначение конфигурационных регистров
Адрес |
Назначение |
0x3FFA |
Разрешение многоканального приема слова SPORT0 (31-16) |
0x3FF9 |
Разрешение многоканального приема слова SPORT0 (15-0) |
0x3FF8 |
Разрешение многоканальной передачи слова SPORT0 (31-16) |
0x3FF7 |
Разрешение многоканальной передачи слова SPORT0 (15-0) |
0x3FF6 |
Регистр управления SPORT0: управление многоканальным режимом, выбор источника битовой синхронизации, управление фреймовой синхронизацией, выбор длины слова данных |
0x3FF5 |
Делитель частоты битовой синхронизации SPORT0 |
0x3FF4 |
Делитель частоты приемного фрейма SPORT0 |
0x3FF3 |
Регистр управления автобуферизацией SPORT0 |
0x3FF2 |
Регистр управления SPORT1: значение выходного флага, выбор источника битовой синхронизации, управление фреймовой синхронизацией, режим сжатия данных, выбор длины слова данных |
0x3FF1 |
Делитель частоты битовой синхронизации SPORT1 |
0x3FF0 |
Делитель частоты приемного фрейма SPORT1 |
0x3FЕF |
Регистр управления автобуферизацией SPORT1 |
Работа с регистрами данных проста. Например, для выдачи содержимого регистра АХ0 через SPORT1 достаточно написать ТХ1 = АХ0;. А для считывания принятых данных из SPORT0 – AY0 = RX0;. Обычно эта пересылка осуществляется в обработчике прерывания по приему последовательного порта.
Перед первым использованием последовательных портов кроме регистров, упомянутых в табл. 1.13, необходимо проинициализировать биты 12-10 регистра управления системой System Control Register (см. п. П1.1), расположенного по адресу 0x3FFF. Бит 12 разрешает работу SPORT0, а бит 11 – SPORT1, если они установлены. После сброса процессора эти биты обнулены, поэтому для работы с соответствующими последовательными портами они должны быть программно установлены.
Бит 10 регистра управления системой определяет конфигурацию SPORT1. Если бит 10 установлен, то SPORT1 работает в режиме последовательного порта, в противном случае – в альтернативном режиме в соответствии с табл. 1.14.
Таблица 1.14.
Альтернативная конфигурация SPORT1
Имя контакта |
Альтернативное имя |
Альтернативная функция |
RFS1 |
IRQ0# |
Внешнее прерывание 0 |
TFS1 |
IRQ1# |
Внешнее прерывание 1 |
DR1 |
FI |
Входной флаг |
DT1 |
FO |
Выходной флаг |
SCLK1 |
SCLK1 |
Та же самая |
Источник битовой синхронизации (внутренний или внешний) SPORT0 и SPORT1 может быть выбран с помощью бита 14 (ISCLK) регистров управления соответственно SPORT0 и SPORT1 (см. пп. П1.4, П1.6).
Если бит ISCLK установлен, то процессор генерирует собственный сигнал SCLK, в противном случае – использует внешний сигнал SCLK. Очевидно, что выход SCLK двунаправленный. После сброса процессора ISCLK = 0, поэтому после сброса процессора оба порта работают в режиме внешнего сигнала SCLK.
Частота внешнего сигнала битовой синхронизации может иметь значение до Fclkout, где Fclkout – частота синхронизации процессора (частота сигнала на выходе CLKOUT (см. рис. 1.1) процессора). Частота внутреннего сигнала битовой синхронизации не может иметь значение более Fclkout/2 и устанавливается с помощью регистров SCLKDIV (0x3FF5 для SPORT0 и 0x3FF1 для SPORT1, см. табл. 1.13):
Fsclk = Fclkout / (2 * (SCLKDIV + 1)) (1.1)
где: Fsclk - частота битовой синхронизации (частота сигнала на выходе SCLK процессора), SCLKDIV - содержимое соответствующих регистров.
Формула (1.1) позволяет определить делитель частоты SCLKDIV для достижения необходимой скорости обмена данными (частоты битовой синхронизации). Например, максимальная частота обмена имеет место при SCLKDIV = 0 и равна Fclkout/2. Формула (1.1) справедлива и для случая, когда SPORT1 используется в альтернативном режиме, поскольку функция выхода SCLK1 при этом не изменяется (см. табл. 1.14).
Длину посылки можно устанавливать независимо для каждого последовательного порта с помощь битовых полей SLEN (Serial Length – длина последовательных данных) регистров управления SPORT0 и SPORT1 (см. пп. П1.4, П1.6). Битовые поля SLEN занимают биты 3-0 соответствующих регистров управления.
Поля занимают четыре бита, поэтому можно задать длину посылки в пределах 16-3 битов. Если длина посылки меньше 16 бит, то посылка располагается в младших битах регистров данных последовательных портов.
Фреймовая синхронизация используется для обозначения начала каждого передаваемого слова. Последовательные порты множеством способов и независимо (при приеме и передаче) могут управлять сигналами фреймовой синхронизации. Все фреймовые сигналы изменяют состояния по срезу импульсов битовой синхронизации (SCLK).
Тип фреймовой синхронизации определяется битами 13 (RFSR) и 11 (TFSR) регистров управления портами (см. пп. П1.4, П1.6). Если RFSR = 0, то RFS требуется только для первого слова фрейма данных (фреймовая при приеме синхронизация отсутствует), в противном случае RFS требуется для каждого слова фрейма данных. Если TFSR = 0, то TFS требуется только для первого слова фрейма данных (фреймовая синхронизация пр передаче отсутствует), в противном случае TFS требуется для каждого слова фрейма данных.
После сброса процессора RFSR = 0 и TFSR = 0, поэтому связь в обоих направлениях осуществляется без фреймовой синхронизации. Для ее инициализации необходимо программно установить биты RFSR и/или TFSR.
Источник фреймовой синхронизации определяется битами 9 (ITFS) и 8 (IRFS) регистров управления портами (см. пп. П1.4, П1.6). Если ITFS = 0, то используется внешний сигнал TFS, в противном случае сигнал TFS является внутренним. Если IRFS = 0, то используется внешний сигнал RFS, в противном случае сигнал RFS является внутренним.
Если используются внешние фреймовые сигналы, то RFS и TFS являются входами и внешнее устройство управляет передачей и приемом данных. Для порта это означает, что перед выдачей в канал данных он должен дождаться сигнала TFS, а перед приемом – сигнала RFS.
Если фреймовые сигналы формируются портом, то RFS и TFS являются выходами и временные параметры обмена определяются процессором. В этом случае сигнал TFS формируется при загрузке любого регистра передаваемых данных ТХ0 или ТХ1. Сигнал RFS формируется периодически в соответствии с содержимым регистра делителя частоты приемного фрейма RFSDIV (0x3FF4 для SPORT0 и 0x3FF0 для SPORT1, см. табл. 1.13).
Содержимое RFSDIV трактуется портом как число импульсов SCLK (уменьшенное на единицу), между двумя импульсами RFS. Например, для того чтобы импульс RFS выдавался на каждый 256-ой импульс SCLK необходимо в RFSDIV записать число 255. Значение RFSDIV + 1 не должно быть меньше SLEN. После получения импульса RFS внешнее устройство должно выдать слово данных.
Следует отметить, что фреймовые сигналы формируются даже тогда, когда сигнал SCLK является внешним. Это дает возможность для различных применений делить частоту входной синхропоследовательности. Кроме этого, для обеспечения одновременной передачи и приема данных можно использовать один фреймовый сигнал. Для этого необходимо подать выходной сигнал RFS на вход TFS, запрограммированный на прием внешнего сигнала синхронизации.
Последовательные порты могут работать в нормальном или альтернативном фреймовых режимах. В нормальном режиме фреймовый сигнал проверяется на срезе SCLK. Если фреймовый сигнал распознан, то принимаемые данные защелкиваются на срезе SCLK, начиная со следующего импульса, а выдаваемые данные появляются после фронта SCLK, также начиная со следующего импульса. Далее фреймовые сигналы не проверяются до полного приема или полной передачи слова данных. Если передача/прием слов непрерывны, т.е. за последним битом предыдущего слова следует первый бит следующего слова, то фреймовый сигнал формируется во время передачи последнего бита предыдущего слова.
В альтернативном режиме фреймовый сигнал активизируется при передаче первого бита текущего слова. Принимаемые биты защелкиваются на срезе SCLK, а выдаваемые - появляются после фронта SCLK. Внутренний сигнал фрейма остается активным до конца передачи текущего слова. Внешний сигнал фрейма проверяется только во время первого бита.
Выбор фреймового режима определяется значениями битов ширины фреймовых сигналов – RFSW (RFS Width - ширина RFS) и TFSW (TFS Width – ширина TFS). RFSW располагается в бите 12, а TFSW – в бите 10 регистров управления портами (см. пп. П1.4, П1.6). Причем нулевое значение этих битов определяет нормальный режим, а единичное – альтернативный. После сброса процессора все эти биты обнулены, что создает нормальный фреймовый режим для приема и передачи.
Программно можно также выбрать уровни активности фреймовых сигналов. Для этого необходимо определить биты инверсии фреймовых сигналов – INVTFS (INVerse TFS) и INVRFS (INVerse RFS). INVTFS располагается в бите 7, а INVRFS – в бите 6 регистров управления портами (см. пп. П1.4, П1.6). Причем нулевое значение этих битов определяет высокий уровень активных фреймовых сигналов, а единичное – низкий. После сброса процессора все эти биты обнулены, что устанавливает высокий уровень активных фреймовых сигналов.
