Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
razrabotka_ustroystv_na_osnove_tsifrovyih_signa...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.57 Mб
Скачать

Глава 9. Адаптер lpt-idma

Теперь, после знакомства с портом IDMA, можно приступить к рассмотрению устройства, позволяющего загружать программы и редактировать данные памяти сигнального процессора через интерфейсный порт IDMA.

Для этих целей был разработан небольшой адаптер LPT-IDMA, который позволяет подключить порт IDMA сигнального процессора к LPT порту персонального компьютера. Схема этого адаптера приведена на рис. 9.1.

Рис. 9.1. Схема адаптера (начало)

Рис. 9.1. Схема адаптера (продолжение)

Рис. 9.1. Схема адаптера (окончание)

Адаптер выполнен на базе одной программируемой логической микросхемы D1 типа XC9536-15VQ44C фирмы XILINX. Схема внутреннего содержимого этой микросхемы представлена на рис. 9.2.

Рис. 9.2. Функциональная схема микросхемы (начало)

Рис. 9.2. Функциональная схема микросхемы (окончание)

Данная схема обеспечивает формирование 16-разрядной шины адреса и управляющих сигналов для порта IDMA с помощью 8-разрядной шины данных LPT порта. Чтение 16-разрядных данных из порта IDMA осуществляется через сигналы состояния LPT порта с использованием мультиплексоров M2_1, запрограммированных в схеме ПЛИС.

Прошивка для программирования данной ПЛИС в виде файла lpt_idma.jed находится на диске, прилагаемом к книге. Программирование ПЛИС осуществляется через соединитель J1 с помощью программатора, описываемого в приложении.

Все элементы адаптера можно распаять на небольшой макетной плате или изготовить для этих целей специальную печатную плату. Адаптер подключается к LPT порту компьютера с помощью ленточного 25-жильного кабеля, через разъем X1 «LPT». Чертеж такого кабеля изображен на рис. 9.3, а в табл. 9.1 приведено назначение цепей и соответствие контактов разъемов.

Рис. 9.3. Ленточный 25-жильный кабель

Таблица 9.1 Назначение цепей кабеля LPT

С помощью разъемов XU и XP адаптер подключается непосредственно к устройству с сигнальным процессором через интерфейсный порт IDMA.

Питание адаптера осуществляется от источника питания напряжением +5 В самого устройства. В качестве такого устройства с сигнальным процессором можно использовать тестовую плату, описанную ранее. Эта плата имеет все необходимое для подключения адаптера LPT-IDMA без всяких переделок.

Все схемы и проект прошивки для ПЛИС прилагаются в виде соответствующих файлов на компакт-диске этой книги.

Глава 10. Менеджер памяти

В этой главе описывается программа под названием «Менеджер памяти», разработанная автором книги для загрузки в сигнальный процессор программ и их отладки.

Для того чтобы можно было использовать адаптер LPT-IDMA для загрузки программ и данных в сигнальный процессор, а также иметь возможность редактировать содержимое памяти сигнального процессора во время его работы, мною была написана программа менеджера памяти цифрового сигнального процессора «mngdsp». Эта программа является приложением DOS и может работать в режиме DOS под Windows95/98/Me. Данная программа в составе проекта для Borland С++ 3.1, с исходными текстами программы находится на диске, прилагаемом к книге.

После запуска программы mngdsp.exe на экране монитора должно появиться окно, изображенное на рис. 10.1.

Рис. 10.1. Экран монитора после запуска программы mngdsp.exe

Данное окно отображает содержимое памяти сигнального процессора в шестнадцатеричном формате. Внизу этого окна приведены команды управления программой. При перемещении маркера по окну с помощью клавиш управления, можно выбрать любую доступную ячейку памяти процессора, для записи в нее произвольных данных. Адрес выбранной ячейки памяти отображается слева вверху. Переключение между памятью данных и памятью программ процессора производится с помощью клавиши TAB клавиатуры. Адаптер позволяет подключаться параллельно к двум портам IDMA разных процессоров. Например, к мультипроцессорному устройству. Для этого он использует сигнал -SEL, подключаемый к выводу - IS порта IDMA. Поскольку при пассивном состоянии данного сигнала порт IDMA не активизируется, допускается запараллеливание всех сигналов IDMA двух процессоров, за исключением сигнала -IS, который позволит выбирать один из двух процессоров. При такой схеме включения необходимо к выводу -IS одного из двух процессоров подключать сигнал -SEL непосредственно, а к выводу -IS второго процессора через инвертор. Выбор процессора из программы производится клавишами F1 и F2. С помощью клавиши F3 можно заполнить всю память данных процессора произвольным числовым значением. Клавиша F4 позволяет очистить память данных процессора путем записи во всю область памяти нулевого значения. Клавиша F8 производит принудительный сброс процессора путем формирования сигнала сброса -INIT для процессора. Кроме того, программа менеджер позволяет загрузить программу в память процессора и запустить ее. Для этого используется клавиша F9. После нажатия этой клавиши, программа запросит имя загружаемого файла, а также предложит загрузить файл с именем dsp.lda, используемым в программе по умолчанию. Поэтому перед запуском программы можно переименовать файл, который должен загружаться в процессор, в файл с именем dsp.lda либо ввести имя загружаемого файла по запросу программы. О формате данного файла и о том, как получить такой файл, было рассказано ранее.

Таким образом, используя программу менеджера памяти DSP, можно загружать и отлаживать программы для сигнального процессора, пользуясь при этом многократными итерациями, высокой скоростью и удобством интерфейса программы.

Приведу еще один пример использования порта IDMA, который можно использовать в мультипроцессорных системах. При разработке таких систем часто возникает необходимость загрузки программы или данных в один из ведомых процессоров с помощью ведущего процессора. Для этих целей также хорошо подходит порт IDMA. Структурная схема подключения двух процессоров между собой через порт IDMA показана на рис. 10.2.

Рис. 10.2. Структурная схема подключения двух процессоров

Как видно из схемы, ведущий процессор подключен к порту IDMA ведомого процессора с использованием сигнала обращения к портам ввода-вывода -IOMS, сигнала записи -IWR, двух сигналов программируемых флагов PF0 и PF2, адресного сигнала A0, шины данных D8–D23 и сигнала синхронизации тактовой частоты CLKOUT. Такая схема включения позволяет выполнять операцию записи данных через порт IDMA ведомого процессора с помощью одной команды записи данных в порт ввода-вывода io(address)=data. Сигнал CLKOUT обеспечивает маскирование адресной линии A0 при формировании сигнала защелки адреса IAL. Такое маскирование необходимо для блокировки переходных процессов на линии А0 при установке адреса. Это хорошо видно из временной диаграммы цикла записи данных процессором в порт ввода-вывода, приведенной на рис. 10.3.

Рис. 10.3. Временная диаграмма цикла записи

Сигнальные цепи PF2 и PF0 используются ведущим процессором для активизации схемы защелки адреса в порт IDMA и для анализа состояния готовности порта IDMA ведомого процессора.

Ниже приведен исходный текст программы idmaidma.dsp для ведущего процессора данной схемы, позволяющей ему загрузить в память программ ведомого процессора массив данных, размещенных в файле idmaidma.dat, являющихся программой для ведомого процессора.

/*********************************************************************/

/* Эта программа транслирует данные от ведущего процессора ADSP-2181 */

/* к ведомому процессору ADSP-2181 через IDMA порт                   */

/*********************************************************************/

.module/abs=0x0000 idma_transfer;

.include <def2181.h>;          Включить файл определений        

.const length=68;              Десятичное значение длины вектора

.var/pm/ram x_input[length];   Описание массива данных          

.init x_input: <idmaidma.dat>; Файл передаваемых данных          start; nop; nop; nop;     Таблица векторов прерываний       ; NOP; NOP; NOP;            Прерывания не используются        ; NOP; NOP; NOP;; NOP; NOP; NOP;; NOP; NOP; NOP;; NOP; NOP; NOP;; NOP; NOP; NOP;; NOP; NOP; NOP;; NOP; NOP; NOP;; NOP; NOP; NOP;; NOP; NOP; NOP;

/*** Начало программы ***/:=0x0000;(System_Control_Reg)=ax0; Такты ожидания PM отключить     (PFTYPE)=ax0;             Все флаги PF назначить выходами (DM_Wait_Reg)=ax0; Такты ожидания DM и портов ввода-вывода отключить=0;          Длина буфера данных                      =^x_input;   Адрес начала буфера транслируемых данных =1;          Приращение = 1                           (i6,m6); Модификация адреса                      

/*** Защелкнуть адрес 0x0001 ***/check_ack; Проверить готовность к приему                       =0x0001;     Стартовый адрес для записи в ведомый процессор      (0x0001)=ах0; Запись этого адреса с переключением линий -IS и IAL

/*** Запись всех данных начиная с адреса 0x0001 ***/=length-1;      Установить счетчик транслируемых слов        loop1 until се; Организовать цикл записи                    

 call check_ack;   Проверить готовность к приему               

 call format;      Форматировать данные                        

 io(0x0100)=ay0;   -IWR и IS записывают старшие 16 бит IAD 0-15

 call check_ack;   Проверить готовность к приему               

 io(0x0100)=ay1;   -IWR и IS записывают младшие 8 бит IAD 0-15  : nop;

/*** Защелкнуть адрес 0x0000 ***/check_ack; Проверить готовность к приему                       =0x0000;     Стартовый адрес для записи в ведомый процессор      (0x0001)=ax0; Запись этого адреса с переключением линий -IS и IAL

/*** Запись по адресу 0x0000 ***/=^x_input;    Указатель на начало буфера данных            check_ack; Проверить готовность к приему                format;    Форматировать данные                         (0x0100)=ay0; -IWR и IS записывают старшие 16 бит IAD 0-15 check_ack; Проверить готовность к приему                (0x0100)=ay1; -IWR и IS записывают младшие 8 бит IAD 0-15  ;           Режим ожидания                              

/****************************************************************/

/* Подпрограмма переформатирования 24-бит слова памяти программ */

/****************************************************************/: ay0=pm(i6,m6); 16 старших бит запомнить в регистре ay0 =px;                  8 младших бит запомнить в регистре ay1 ;

/***************************************************************************/

/* Подпрограмма ожидания перехода состояния линии -IACK в низкое состояние */

/***************************************************************************/_ack:=dm(0x3fе5);       Читать PF1, который подключен к -IACK             =tstbit 1 of ax0;   Анализировать PF1                                 ne jump check_ack; Если процессор не готов вновь контролировать -IACK;

.endmod;

Многие директивы и команды данной программы уже знакомы читателям из описания предыдущей программы. Текст программы прокомментирован, что позволяет без труда понять алгоритм ее работы. Как видно из текста, в программе использован ряд подпрограмм, в которых сосредоточены часто используемые операции. Вызов данных подпрограмм осуществляется командой call, после которой записывается имя подпрограммы. Команда io(0x0001)=ax0 осуществляет запись содержимого регистра ax0 в порт ввода- вывода по адресу 0x0001. Команда ar=tstbit 1 of ax0 заносит в регистр ar результат тестирования первого разряда регистра ax0. Следующая за этой, команда if ne jump check_ack проверяет состояние флагов ALU и осуществляет переход на метку check_ack, если результат проверки предыдущей операции был отрицательным. Подробнее со всеми командами сигнального процессора ADSP-2181 мы познакомимся позже.

При компиляции этой программы, все данные из файла idmaidma.dat будут автоматически помещены в файл загрузки idmaidma.lda. В качестве файла данных idmaidma.dat можно использовать загрузочный файл рассмотренной нами ранее программы mem_clr.lda, из которого предварительно следует удалить первые три и последние две служебные строки. Данную операцию можно выполнить с помощью любого текстового редактора. После чего файл необходимо переименовать, задав ему имя idmaidma.dat. Кроме того, можно изменить имя загружаемого файла в самой программе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]