Ниже приведен исходный текст программы idmaidma.dsp
для ведущего процессора данной схемы, позволяющей ему загрузить в память программ ведомого процессора массив данных, размещенных в файле idmaidma.dat, являющихся программой для ведомого процессора./*********************************************************************/
/* Эта программа транслирует данные от ведущего процессора ADSP-2181 */
/* к ведомому процессору ADSP-2181 через IDMA порт */
/*********************************************************************/
.module/abs=0x0000 idma_transfer;
.include
.const length=68; { Десятичное значение длины вектора }
.var/pm/ram x_input[length]; { Описание массива данных }
.init x_input:
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; { Стартовый адрес для записи в ведомый процессор }