Как видно из схемы, ведущий процессор подключен к порту 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>; { Файл передаваемых данных }
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 назначить выходами }