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

Вальпа Олег Дмитриевич

Шрифт:

Рис. 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>; { Файл передаваемых данных }

jump start; nop; nop; nop; { Таблица векторов прерываний }

RTI; NOP; NOP; NOP; { Прерывания не используются }

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

RTI; NOP; NOP; NOP;

/*** Начало программы ***/

start:

ax0=0x0000;

dm(System_Control_Reg)=ax0; { Такты ожидания PM отключить }

dm(PFTYPE)=ax0; { Все флаги PF назначить выходами }

dm(DM_Wait_Reg)=ax0; {Такты ожидания DM и портов ввода-вывода отключить}

l6=0; { Длина буфера данных }

i6=^x_input; { Адрес начала буфера транслируемых данных }

m6=1; { Приращение = 1 }

modify(i6,m6); { Модификация адреса }

/*** Защелкнуть адрес 0x0001 ***/

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

ax0=0x0001; { Стартовый адрес для записи в ведомый процессор }

io(0x0001)=ах0; { Запись этого адреса с переключением линий -IS и IAL }

/*** Запись всех данных начиная с адреса 0x0001 ***/

cntr=length-1; { Установить счетчик транслируемых слов }

do 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 }

loop1: nop;

/*** Защелкнуть адрес 0x0000 ***/

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

ax0=0x0000; { Стартовый адрес для записи в ведомый процессор }

io(0x0001)=ax0; { Запись этого адреса с переключением линий -IS и IAL }

/*** Запись по адресу 0x0000 ***/

i6=^x_input; { Указатель на начало буфера данных }

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

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

  • Читать дальше
  • 1
  • ...
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: