Категории
Самые читаемые
ChitatKnigi.com » 🟢Справочная литература » Справочники » Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ - Олег Вальпа

Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ - Олег Вальпа

Читать онлайн Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ - Олег Вальпа
1 ... 9 10 11 12 13 14 15 16 17 ... 52
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

 toggle fl2;         { Инвертировать вывод процессора FL2            }

 dm(0) = ar;         { Заполнение ячейки памяти данных с адресом 0   }

 ar = ar + 1;        {  увеличивающимися значениями                  }

 ax0 = dm(PFDATA);   { Читать код клавиш                             }

 dm(1) = ax0;        {  и записать в ячейку памяти данных по адресу 1}

 jump CLR_DM;        { Зациклить программу                           }

.endmod;             { Конец программы                               }

Имя данного файла можно изменить на любое другое, длиной от одного до восьми символов, разрешенных для имен файлов. Расширение «dsp» выбрано не случайно. При трансляции программы, компилятор будет искать файл программы именно с таким расширением. Если он не найдет такой файл, то выведет сообщение Preprocessor failed to open mem_clr.dsp.

Рассмотрим структуру и состав приведенного выше файла. Как видно из примера, в начале файла программы находится описание назначения программы, ее версии и пр. атрибуты, заключенные между символами /* и */ в качестве комментариев. Далее следуют три строки директив с комментариями, описывающими назначение этих директив и заключенными между фигурными скобками. Фигурные скобки также предназначены для вставки комментариев в программу. Файл def2181.h, включаемый в файл программы с помощью директивы #include, состоит из строк, присваивающих символьным именам регистров значение их адресов в области памяти данных процессора.

Использование символьных имен позволяет записывать в программе не конкретные цифровые значения адресов или данных, а их словесные описания, более понятные и легче запоминающиеся. Это делается для придания программе наглядности, предотвращения машинальных ошибок во время ее создания и облегчения ее понимания. Содержимое файла def2181.h приведено ниже.

.const IDMA=                0x3fe0;

.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 ... 9 10 11 12 13 14 15 16 17 ... 52
Перейти на страницу:
Открыть боковую панель
Комментарии
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее
Мприна
Мприна 08.12.2024 - 01:05
Эх, а где же продолжение?
Анна
Анна 07.12.2024 - 00:27
Какая прелестная история! Кратко, ярко, захватывающе.
Любава
Любава 25.11.2024 - 01:44
Редко встретишь большое количество эротических сцен в одной истории. Здесь достаточно 🔥 Прочла с огромным удовольствием 😈