Олег Вальпа - Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
- Название:Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
- Автор:
- Жанр:
- Издательство:Горячая линия — Телеком
- Год:2007
- Город:Москва
- ISBN:5-93517-342-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Олег Вальпа - Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ краткое содержание
Книга предназначена для самостоятельного изучения и применения на практике цифровых сигнальных процессоров DSP (Digital Signal Processor). На примере популярной микросхемы ADSP2181 фирмы Analog Devices рассмотрены устройство, архитектура и технические характеристики цифрового сигнального процессора. Приведено описание вычислительных блоков процессора, средств разработки программного обеспечения, языка программирования и системы команд процессора. Разработанные автором книги практические схемы с применением сигнального процессора, исходные тексты программ и схемы вспомогательных устройств, полезных при отладке программ для процессора помогут получить необходимые практические навыки, с помощью которых читатель легко освоит другие типы сигнальных процессоров. На прилагаемом к книге диске находятся исходные тексты и исполняемые файлы программ, а так же некоторые полезные утилиты и средства разработки программного обеспечения для сигнальных процессоров.
Для специалистов в области разработки цифровой электронной аппаратуры, будет полезна студентам и аспирантам.
Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
.const BDMA_BIAD= 0x3fe1;
.const BDMA_BEAD= 0x3fe2;
.const BDMA_BDMA_Ctrl= 0x3fe3;
.const BDMA_BWCOUNT= 0x3fe4;
.const PFDATA= 0x3fe5;
.const PFTYPE= 0x3fе6;
.const SPORT1_Autobuf= 0x3fef;
.const SPORT1_RFSDIV= 0x3ff0;
.const SPORT1_SCLKDIV= 0x3ff1;
.const SPORT1_Control_Reg= 0x3ff2;
.const SPORT0_Autobuf= 0x3ff3;
.const SPORT0_RFSDIV= 0x3ff4;
.const SPORT0_SCLKDIV= 0x3ff5;
.const SPORT0_Control_Reg= 0x3ff6;
.const SPORT0_TX_Channels0= 0x3ff7;
.const SPORT0_TX_Channels1= 0x3ff8;
.const SPORT0_RX_Channels0= 0x3ff9;
.const SPORT0_RX_Channels1= 0x3ffa;
.const TSCALE= 0x3ffb;
.const TCOUNT= 0x3ffс;
.const TPERIOD= 0x3ffd;
.const DM_Wait_Reg= 0x3ffe;
.const System_Control_Reg= 0x3fff;
Описание этих символьных имен и их соответствие адресам памяти данных процессора приведено в табл. 6.1.
Таблица 6.1 Описание символьных имен регистров управления и состояния процессора ADSP-2181
Имя | Описание | Адрес |
---|---|---|
IDMA | Регистр управления IDMA | 0x3FE0 |
BDMA_BIAD | Регистр внутреннего адреса BDMA | 0x3FE1 |
BDMA_BEAD | Регистр внешнего адреса BDMA | 0x3FE2 |
BDMA_BDMA_Ctrl | Регистр управления BDMA | 0x3FE3 |
BDMA_BWCOUNT | Регистр счетчика слов BDMA | 0x3FE4 |
PFDATA | Регистр данных программируемых флагов | 0x3FE5 |
PFTYPE | Регистр управления программируемыми флагами | 0x3FE6 |
SPORT1_Autobuf | Регистр управления автобуферизацией SPORT1 | 0x3FEF |
SPORT1_RFSDIV | Регистр делителя кадровых импульсов SPORT1 | 0x3FF0 |
SPORT1_SCLKDIV | Регистр делителя тактовых импульсов SPORT1 | 0x3FF1 |
SPORT1_Control_Reg | Регистр управления SPORT1 | 0x3FF2 |
SPORT0_Autobuf | Регистр управления автобуферизацией SPORT0 | 0x3FF3 |
SPORT0_RFSDIV | Регистр делителя кадровых импульсов SPORT0 | 0x3FF4 |
SPORT0_SCLKDIV | Регистр делителя тактовых импульсов SPORT0 | 0x3FF5 |
SPORT0_Control_Reg | Регистр управления SPORT0 | 0x3FF6 |
SPORT0_TX_Channels0 | Регистр младшего слова передатчика SPORT0 | 0x3FF7 |
SPORT0_TX_Channels1 | Регистр старшего слова передатчика SPORT0 | 0x3FF8 |
SPORT0_RX_Channels0 | Регистр младшего слова приемника SPORT0 | 0x3FF9 |
SPORT0_RX_Channels1 | Регистр старшего слова приемника SPORT0 | 0x3FFA |
TSCALE | Регистр масштабирования таймера | 0x3FFB |
TCOUNT | Регистр счетчика таймера | 0x3FFC |
TPERIOD | Регистр периода таймера | 0x3FFD |
DM_Wait_Reg | Регистр тактов ожидания памяти данных | 0x3FFE |
System_Control_Reg | Регистр управления системой | 0x3FFF |
Как видно из содержимого данного файла, в каждой его строке производится директивное назначение определенному символьному имени конкретного числового значения. Символьные имена могут быть произвольными, важно только, чтобы они одинаково записывались в данном файле и в самой программе. В дальнейшем мы часто будем использовать символьное описание регистров, для обращения к ним по записи или чтению из программы. В частности, в нашей программе mem_clr.dsp содержатся строки команд для обращения к регистру конфигурирования PFTYPE и регистру данных PFDATA программируемых флагов PF процессора. Файл def2181.h должен находиться в том же каталоге, в котором будет храниться файл программы во время ее трансляции. Иначе компилятор выдаст сообщение об ошибке во время компиляции программы.
Далее, в файле программы начинается запись команд. Поскольку с нулевого адреса памяти программ должны быть записаны векторы прерываний или их обработчики, первой располагается команда перехода jump BEGIN на начало программы, а затем команды возврата из прерывания rti для каждого из прерываний процессора. Все команды должны заканчиваться точкой с запятой, в соответствии с требованиями синтаксиса ассемблера. Заметьте, что в одной строке присутствует сразу несколько команд. Такая запись допускается компилятором ассемблера. Так как для каждого вектора прерывания в памяти программ отведено по четыре 24-разрядных ячейки памяти, а каждая команда процессора занимает одну 24-разрядную ячейку памяти, то оставшиеся неиспользованные ячейки памяти заполняются пустыми командами пор. Сразу же после метки BEGIN записаны команды инициализации конфигурационного регистра флагов PFTYPE с помощью рабочего регистра ax0 блока ALU процессора. Непосредственная запись константы в память данных не поддерживается процессором. Ниже располагаются строки комментариев с пояснением назначения каждого бита регистра флагов PFTYPE. Подобные записи позволяют хорошо документировать программу и облегчают тем самым ее отладку и последующее сопровождение. Аналогично описанным выше записям, в программе присутствуют строки команд записи в регистр данных PFDATA программируемых флагов слова управления светодиодом. Далее следуют команды инициализации некоторых регистров сигнального процессора. В частности, команда i0 = ^buf_dm; производит инициализацию индексного регистра, входящего в блок DAG сигнального процессора, т.е. присваивает индексному регистру i0 значение адреса начала буфера buf_dm, располагающегося в памяти данных процессора. Аналогично происходит инициализация других регистров этого блока и инициализация регистра ar блока ALU. Я намеренно указал на принадлежность регистров блокам процессора, для того чтобы показать связь между архитектурой процессора и выполняемой программой и тем самым облегчить понимание того, что происходит в самом процессоре при выполнении перечисленных команд программы. Далее в программе организуется циклическое заполнение памяти данных процессора значением регистра ar. После чего организуется цикл, состоящий из команд инвертирования выходного флага FL2 процессора и заполнения нулевой ячейки памяти регулярно увеличивающимся значением из регистра ar. Кроме того, в данном цикле организовано чтение состояния входов PF0-PF3 процессора и запись этих значений в ячейку памяти данных по адресу 1. Это сделано для того, чтобы при работе программы можно было увидеть с помощью осциллографа генерацию сигнала на выводе FL2, а также следить за изменением значений ячеек памяти с помощью симулятора или других аппаратно-программных средств, убеждаясь тем самым в правильной работе программы и нормальном функционировании процессора. Завершает программу директива окончания модуля программы endmod. В общем случае структура файла должна быть следующей:
/* Строки комментариев, описывающие */
/* название и назначение программы */
.Директива начала и названия модуля программы
.Директива 1
.Директива 2
...
.Директива N
Метка1: Команда1 и операторы; /*Комментарии*/
Метка2: Команда2 и операторы; /*Комментарии*/
...
МеткаN: КомандаN и операторы; /*Комментарии*/
.Директива окончания программы
Интервал:
Закладка: