45098

Знакомство с основами работы с Visual DSP++. Изучение программно-логической модели ADSP-2181

Лабораторная работа

Информатика, кибернетика и программирование

Сигнальный процессор взаимодействует с внешней средой путём использования адресной шины (ADDR), шины данных параллельного обмена (DATA), мультиплексированной шины адреса/данных (IAD)...

Русский

2013-11-15

3.15 MB

12 чел.

Федеральное агентство образования РФ

РГРТУ

Кафедра РТС

Отчет о лабораторной работе №1

Знакомство с основами работы с Visual DSP++.

Изучение программно-логической модели ADSP-2181

                                                                                                                    Выполнил:

студент 514 группы

Андреев Р.Н.

Проверил:

Сальников Н.И.

Рязань 2008

Цель работы

         Изучение регистровой модели и функционирования процессора ADSP-2181 в среде проектирования Visual DSP++ в режиме симулятора при выполнении программы копирования буфера.

Текст программы

/*___________________________________________________________________

LR2.ASM         ADSP-2181 Копирование буфера

                        Программа выполняет копирование содержимого

           одного заданного буфера в другой заданный буфер

___________________________________________________________________*/

// Определение символических констант - размеров буферов

#define N0 64

#define N1 8

#define N2 64

#define N3 32

#define N4 64

.section/data data1;                            // Начало секции  данных в DM,

                                                                     // data1 - раздел, который

                                                                     // содержит данные          

    

// Организация буферов в DM, присвоение символиче-

// ских имён, задание размеров буферов, загрузка

// в буферы файлов инициализации                 

        

.VAR dm_buf0[N0]="test_std1.dat";

.VAR dm_buf1[N4]="sine64_00.dat";       

.VAR dm_buf2[N2]="cos64_00.dat";      

.VAR dm_buf3[N3];

.VAR dm_buf4[N4];

.VAR dm_buf5[N0];

.VAR dm_buf6[N0];

.VAR dm_buf7[N0];      

                  

.section/pm pm_da;                             // Начало секции  данных в PM,

                                                                      // pm_da - раздел, который

                                                                      // содержит данные                

// Организация буферов в PM, присвоение символиче-

// ских имён, задание размеров буферов, загрузка

// в буферы файлов инициализации                 

  

.VAR pm_buf0[N4];   

.VAR pm_buf1[N4];

.VAR pm_buf2[N2];

.VAR pm_buf3[N3];  

                            

.section/pm interrupts;                             // PM, начало секции  для хранения

                 // векторов прерываний             

__reset:JUMP start; rti; rti; rti;                      // 0x0000: reset                     

              rti; rti; rti; rti;                                  // 0x0004: IRQ2,                

              rti; rti; rti; rti;                                  // 0x0008: IRQL1,            

              rti; rti; rti; rti;                                  // 0x000c: IRQL0,               

              rti; rti; rti; rti;                                  // 0x0010: SPORT0 tx,           

              rti; rti; rti; rti;                                  // 0x0014: SPORT1 rx,           

              rti; rti; rti; rti;                                  // 0x0018: IRQE,                

              rti; rti; rti; rti;                                  // 0x001c: BDMA,                

              rti; rti; rti; rti;                                  // 0x0020: SPORT1 tx or IRQ1,   

              rti; rti; rti; rti;                                  // 0x0024: SPORT1 rx or IRQ0,   

              rti; rti; rti; rti;                                  // 0x0028: timer,               

              rti; rti; rti; rti;                                  // 0x002c: power down,          

.section/pm seg_code;                // PM, начало секции программного кода

start: I0=dm_buf0;   M0=1;   L0=0;

       I1=dm_buf1;   M1=2;   L1=64;

       I2=dm_buf2;   M2=1;   L2=0;

       I3=dm_buf3;   M3=1;   L3=0;

       I4=pm_buf0;   M4=1;   L4=0;

       I5=pm_buf1;   M5=1;   L5=0;

       I6=pm_buf2;   M6=1;   L6=0;

       I7=pm_buf3;   M7=1;   L7=0;    

          

move:  CNTR=N0; DO outm UNTIL CE;  // Цикл копирования буфера      

    

    MX1=DM(I1,M1);  

outm:   PM(I6,M6)= MX1;

end:    IDLE;                                                   // Перевод в состояние ожидания

                                                                       // прерывания, в режим с малым

                                                                       // потреблением       

Общая структура вычислительной системы

         Структурная схема микропроцессорной системы приведена на  рис. 1. Сигнальный процессор взаимодействует с внешней средой путём использования адресной шины (ADDR), шины данных параллельного  обмена (DATA),  мультиплексированной  шины  адреса/данных (IAD),  линий последовательного  обмена (DT0, DR0, DT1, DR1) и использования  информационных,  управляющих,  служебных  сигналов, сигналов прерывания на выводах ADSP-2181.

Внутренняя структура ADSP-2181

         Внутренняя структура ADSP-2181 приведена на рис.2. В процессоре ADSP-2181 используется модифицированная Гарвардская  архитектура, для которой характерно, что во внутренней памяти данных DM (ОЗУ, RAM) хранятся данные, а во внутренней памяти программ PM (ОЗУ, RAM) -  команды  и  данные.  Для  начальной  загрузки  программы  во  внутреннюю  память  при  перезапуске  процессора ADSP-2181 предусмотрена внешняя память с байтовой организацией (BYTE MEMORY). Прямой побайтовый доступ к BYTE MEMORY обеспечивает  порт  прямого  побайтового  доступа  к  памяти (BDMA). Этот  порт также  позволяет  программисту  задавать  ячейки  памяти,  содержимое которых будет передаваться во внутреннюю память или из внутренней памяти без отрыва процессора от выполнения основной задачи.  

         Внешняя  оверлейная  память (OVERLAY MEMORY)  организована в виде сегментов по 8К слов, которые могут переключаться, используясь как старшие 8К слов внутренней памяти программ PM либо как младшие 8К слов памяти данных DM и подгружаются при необходимости во время выполнения задачи.

         Через  внутренний  порт  прямого  доступа  к  памяти (IDMA) можно выполнять начальную загрузку из хост-процессора (микроконтроллер,  компьютер)  через  системный  интерфейс  и  её  обращения  к процессору в ходе выполнения программы. Характеристики этого порта позволяют передавать  данные  в или  из  внутренней памяти без  отрыва процессора от выполнения основной задачи.

         В процессоре ADSP-2181 порты  ввода/вывода(I/O SPACE) не отображены в карте памяти. Порты ввода/вывода отображены в специальной области памяти ввода/вывода. Эта область состоит из 2048 адресуемых объектов.

         Обращения  к  внешним  устройствам  расширения  памяти  не могут происходить одновременно, поскольку для  этого используются общие шины  адреса  и  данных. При  передачах  через  порт BDMA  источником данных или местом назначения передачи должна быть только  внутренняя  память PM  или DM.  Обращения  к  другим  областям внешней  памяти (оверлейной  памяти  программ,  оверлейной  памяти данных, области памяти ввода/вывода) имеют более высокий приоритет  по  сравнению  с  обращениями  к  памяти  с  байтовой  организацией через порт BDMA.

         Карта  памяти  процессора  определяет  одинаковый  диапазон изменения адресов для PM и DM: от 0х0000 до 0х3FFF. В зависимости от  настройки  режима  использования  памяти  указанный  диапазон  изменения  адресов  распределяется между  внутренней  и  внешней  памятью.  Если  внешний  вывод MMAP  процессора  соединён  с  землёй  и внутренние  регистры  выбора  внутренней  или  внешней  памяти (PMOVLAY  и DMOVLAY)  после  сброса  или  перезапуска  остаются обнулёнными,  то  используется  внутренняя  память PM  и DM.  Весь диапазон изменения адресов 0х0000 - 0х3FFF относится к внутренней памяти PM или DM.

Регистровая модель арифметико-логического устройства ALU

         АЛУ  обеспечивает  выполнение  стандартного  набора  арифметических  и  логических  операций:  сложение,  вычитание,  изменение знака, инкремент,  декремент,  нахождение модуля  числа,  деление,  логическое И (AND), ИЛИ (OR), исключающее ИЛИ (XOR), НЕ (NOT).

Операндами – источниками данных для ALU по входу Х могут быть:

АХ0, АХ1  – входные регистры;

AR    – регистр результатов;

MR0, MR1, MR2 – регистры результатов MAC;

SR0, SR1   – регистры результатов устройства сдвига.

Операндами – источниками данных для ALU по входу Y могут быть:

АY0, АY1  – входные регистры;

AF    – регистр обратной связи.

Регистры – приёмники данных с выхода ALU:

AR    – регистр результатов;

AF    – регистр обратной связи.

         Признаки  результата,  получаемого  с  выхода АЛУ  хранятся  в арифметическом регистре состояний ASTAT.  

Биты-признаки, входящие в состав регистра состояний ASTAT:  

AZ - признак нулевого результата (AZ=1);

AN - знаковый бит результата;

AV - признак переполнения разрядной сетки (AV=1);

AC - перенос из старшего разряда;

AS - знаковый бит операнда по входу Х;

AQ - знаковый бит частного при делении.

Регистровая модель умножителя-накопителя MAC

         МАС выполняет умножение, умножение и сложение с накопленной  суммой,  умножение  и  вычитание  из  накопленной  разности,  выполняет функции насыщения и сброса в ноль. Возможно  любое  сочетание  знаковых (S)  и  беззнаковых (U) перемножаемых операндов: (SS), (US), (SU), (UU).

Операндами – источниками данных для MAC по входу Х могут быть:

МХ0, МХ1  – входные регистры;

AR    – регистр результатов ALU;

MR0, MR1, MR2 – регистры результатов;

SR0, SR1   – регистры результатов устройства сдвига.

 

Операндами – источниками данных для MAC по входу Y могут быть:

MY0, MY1   – входные регистры MAC;

MF    – регистр обратной связи.

Регистры – приёмники данных с выхода MAC:

MR (MR2, MR1, MR0)   – регистр результатов;

MF      – регистр обратной связи.

 

         Признаки результата, получаемого  с  выхода МАС хранятся в арифметическом регистре состояний ASTAT:  

MV – переполнение 32-разрядной сетки (MR2/MR1);

и в регистре состояний MSTAT:

MSTAT.4 – бит-признак формата числа в регистре результата   10

MR (MSTAT.4=0/1 – формат дробного/целого числа).

         Исходное  состояние  регистров  в  результате  сброса  или перезапуска процессора

АSTAT = 0х00; MSTAT = 0х00.

Регистровая модель устройства сдвига SHIFTER

         Устройство  сдвига  выполняет  набор функций  сдвига  для 16-разрядных  входных  чисел,  в  результате  на  выходе,  в  общем  случае,  получается 32-разрядное число.

         Функции устройства сдвига: арифметический сдвиг (ASHIFT),  логический  сдвиг (LSHIFT),  нормализация (NORM),  определение  порядка (EXP),  определение  порядка  самого  большого  по  абсолютной величине числа (блочного порядка) в массиве чисел (EXPANDJ). Эти базовые функции могут комбинироваться для  эффективного преобразования форматов  чисел,  включая  представление  чисел  с  плавающей точкой.

Операнды – источники ввода данных в устройстве сдвига:

SI    – регистр ввода устройства сдвига;

AR    – регистр результатов АЛУ;

MR0, MR1, MR2 – регистры результатов MAC;

SR0, SR1   – регистры вывода устройства сдвига.

 

         Регистр SE (порядок  устройства  сдвига), 8-разрядный,  содержит  значение  порядка  при  проведении  операций  нормализации  и  денормализации.

         Регистр SB (блочный  порядок  устройства  сдвига), 5-разрядный,  содержит  значение  блочного  порядка,  то  есть  величину сдвига для нормализации самого большого числа в массиве чисел.

Выполнение работы

         1. Окно программы имеет вид:

         В верхних меню программы располагаются органы управления работой проекта: трансляция кода (построение проекта), добавление файлов к проекту, пошаговое выполнение программы, просмотр и изменение содержимого регистров и  т.д. Внизу программы находится информационное и диагностическое окно Output Window, где отображается ход работы компилятора, сообщения компилятора и в случае ошибок системы места этих ошибок. Слева находится список, отражающий содержание проекта. Файл подсоединяются к проекту с помощью команды Add to Project в меню Project. В данный проект входит: файл программы (Source Files, LR2.asm), файл линкера (Linker Files, ADSP-2181.ldf), файлы данных (Data Files). Файл программы содержит код программы на выбранном языке; файл линкера описывает карту памяти процессора (этот файл требуется для нормальной работы проекта и индивидуален для каждого процессора); описание файлов данных необходимо для правильной работы программы, так как эти файлы используются в коде программы. В правой части программы отображаются текст программы, содержимое вызываемых регистров, графики и др.        

         2. Текст программы приведен написан на Ассемблере. Различия между программой, приведенной в методических указаниях и LR2.asm заключается в другом символе размерности буфера-приемника pm_buf2 (при этом по умолчанию размерности равны) и числа счетчиков циклов N4 вместо N0 (по умолчанию и там и там 64).   

         Программа состоит из следующих секций:

  1.  область определения размеров буферов – количество регистров, в которых будут храниться данные; определяются константами N0, N1, N2, N3, N4. По умолчанию они соответственно равны 64, 8, 64, 32, 64. Команды объявления размеров являются командами препроцессора и начинаются с префикса #.
  2.  директива ассемблера .section/data data1 задает секцию системной памяти в данном случае tipe=data, следовательно, в области DM, data1 – название раздела
  3.  организация буферов в DM, присвоение символических имен, размеров буферов, загрузка в буферы файлов инициализации; здесь создаются 8 буферов-источников (dm_buf[0,7]) различной размерности в области DM, причем в начале действующими являются 3 буфера - dm_buf0, dm_buf1, dm_buf2. Организация происходит с помощью директивы .VAR    
  4.  директива ассемблера .section/pm pm_da задает секцию системной памяти в данном случае tipe= pm, следовательно, в области PM, pm_da – название раздела
  5.  организация буферов в PM, присвоение символических имен, размеров буферов, загрузка в буферы файлов инициализации

Создаются 4 буфера-приемника данных заданных размерностей. Организация происходит с помощью директивы .VAR 

  1.  директива .section/pm interrupts задает секцию в области pm для хранения векторов прерывания
  2.  организация векторов прерываний в PM 
  3.  директива .section/pm seg_code организует в PM область программного кода
  4.  секция программного кода в PM

         Сама процедура копирования буфера содержит 3 строки:

- организация цикла: CNTR=N4; DO outm UNTIL CE – выполнения метки outm в течении числа циклов CNTR пока не выполнится условие CE

- перемещение во временный буфер: MX1=DM(I1,M1) - MX1 (регистр MAC), DM(I1,M1) – обращение к буферу dm_buf1

- перемещение в буфер-приемник: PM(I6,M6)= MX1 – PM(I6,M6) – обращение к буферу pm_buf2 (буфер-приемник)

         3. Ошибок в программе не обнаружено, выдаётся сообщение Load Complete.

         4. После трансляции текста программа переходит на метку _reset, после которой размещается команда JUMP – переход на метку start, по которой в свою очередь размещается программный код. После обработки прерывания происходит возврат в главную программу с помощью команды rti. Всего в процессоре предусмотрено 12 источников прерываний. Высший приоритет у прерывания Reset (запуск после сброса или выхода из малого энергопотребления), низший у Timer (внутреннее прерывание от таймера). Адреса векторов прерываний размещаются с интервалом в 4 ячейки.     

         

         Адреса и содержимое секций программы в PM, буферов и меток:

Буферы в PM:

pm_buf0: адреса 003000-00303F, то есть размер буфера 64, что соответствует заданной константе N4; по всем адресам записаны нули (буферы пусты)

pm_buf1: адреса 003040-00307E, то есть размер буфера 64, что соответствует заданной константе N4; по всем адресам записаны нули (буферы пусты)

pm_buf2: адреса 003080-0030BE, то есть размер буфера 64, что соответствует заданной константе N4; по всем адресам записаны нули (буферы пусты)

pm_buf3: адреса 0030C0-0030DE, то есть размер буфера 32, что соответствует заданной константе N3; по всем адресам записаны нули (буферы пусты)

 

         Таким образом, видно, что все буферы в области PM, являющейся буферами-приемниками пусты до начала копирования в них данных.  

Метки:

В программе содержится 5 меток: _reset - секция перехода к основной программе (к метке start) после обработки прерывания , start – секция программного кода, move – цикл копирования буфера. Цикл копирования буфера организован с использованием счетчика циклов CNTR и команды DO outm UNTIL CE, которая выполняет метку outm, пока не выполнится условие CE (counter empty - счетчик пуст).      

 

start, move, outm, end                                       

        

reset

         Содержимое меток – слева указывается адреса команд, которые при выполнении программы появляются в программном счетчике.

         Адреса и содержимое буферов в DM:

   В данной программе в DM находится буфер-источник данных, причем данные загружаются в первые три созданных буфера – dm_buf0, dm_buf1, dm_buf2. Источниками данных являются 3 файла, присоединенные к проекту и находящиеся в папке проекта test_std1.dat, sine64_00.dat, cos64_00.dat    

      

Все остальные буферы в DM пусты:

dm_buf3: [0000C0]-[0000DE] – размером 32

dm_buf4: [0000E0]-[00011C] – размером 64

dm_buf5: [000120]-[00015C] – размером 64

dm_buf6: [000160]-[00019C] – размером 64

dm_buf7: [0001A0]-[0001DF] – размером 64

         Состояние управляющих регистров генератора адреса DAG1 и DAG2:

         Первые четыре тройки регистров относятся к DAG1 (I0,M0,L0 – I3,M3,L3) и обеспечивают доступ только к памяти DM. Остальные ячейки относятся к DAG2 и обеспечивают доступ и к DM и к PM.  

         Перед началом работы эти регистры находятся в неопределенном состоянии.

         Состояние регистров фиксации состояния программы:

         Перед началом работы регистры состояния имеют следующие значения:

программный счетчик PC, содержащий адрес исполняемой команды, обнулен; счетчик циклов CNTR в неопределенном состоянии; число циклов CYCLES, пройденного процессором, нулевое; адрес последней команды PM_ADDR в PM неопределенное; адрес последней команды DM_ADDR в DM неопределенное; PMOVLAY и DMOVLAY – внутренние регистры выбора внутренней или внешней памяти, т.к. они обнулены, то используется внутренняя память PM и DM.  

         Значение условия состояния «Счетчик пуст»:

         Определение условия завершения цикла DO UNTIL; счетчик находится в неопределенном состоянии.

        

         5. При первом нажатии F11 (поступило прерывание) происходит безусловный переход на метку start, значение программного счетчика РС равно 0030, количество циклов CYCLES= 00000001. Затем происходит выполнение секции программного кода, в результате которой регистры DAG заполняются в соответствии c присвоенными значениями – происходит копирование данных путем непосредственной загрузки регистров DAG:

 

Затем происходит вход в цикл копирования (метка move): CNTR присваивается значение 004016=6410=N0 (видно в Program Control). Далее происходит выполнение цикла: копирование из DM(I1,M1) во входной регистр MAC MX1 и  вывод в PM(I6,M6) из MX1, т.е. копирование из буфера dm_buf1 в буфер pm_buf2. Во время выполнения команды DO адрес последней команды цикла помещается в стек цикла PC STACK вместе с условием прекращения цикла, а текущее значение программного счетчика плюс единица помещается в стек программного счетчика LOOP STACK. Поэтому при первом выполнении команды DO в PC STACK записывается состояние программного счетчика PC, содержащего адрес первой команды в цикле – 004А16. Затем при выполнении циклов PC меняет попеременно свое состояние с 004А до 004В. Состояние ячеек PM_ADDR и DM_ADDR меняется – инкрементируется при каждом цикле, так как на шину адреса и данных постоянно выставляется следующая команда цикла. Просмотрим содержание буфера pm_buf2 и сопоставим его с dm_buf1 на некотором цикле копирования:

         Из содержания буферов видно, что при копировании из буфера-источника dm_buf1 в pm_buf2 происходит копирование через одну ячейку.

   Так происходит до тех пор, пока не произойдет условие выхода из цикла – выполнение условия CE (Счетчик пуст) - CE станет равно 1. При этом состояние регистра CNTR постоянно убавляется на 1 (декрементируется). Это происходит в течение 64 циклов копирования, при этом число циклов в регистре CYCLES изменяется о 1A16=2610 до 9A16=15410, то есть 154-26=128 с учетом, что копирование состоит из 2 команд, то 128\2=64 циклов, т.е. численно равно размерности копируемых буферов. В момент, когда значение счетчика достигает 1, устанавливается, что счетчик пуст, т.е. происходит выполнение условия CE (counter empty). Это является признаком того, что следующая выполняемая команда является последней в цикле, а цикл выполнен все N-раз. Затем – переход в режим пониженной мощности IDLE.

         6. График данных в буфере-передатчике представляет собой отрезок синусоиды одного периода:  

         График данных в буфере-приемнике представляет нулевые отсчеты, т.к. туда еще ничего не записано:

         7-8. Последней командой, выполняемой процессором является команда IDLE – переход на пониженное энергопотребление (сбрасывается, например, при поступлении прерывания).

         Проанализируем содержание начального и конечного буферов: во-первых, в буфере-приемнике заполнены 64 ячейки памяти, т.е. скопированы все ячейки из источника; во-вторых, в приемнике содержатся нечетные отчеты буфера-источника. Все остальные буферы-приемники  пусты, т.к. в них ничего не записывалось.

                                                            

          Регистры DAG остались такими же, как после выполнения метки start.

          Регистры раздела Program Control содержат последние адреса: PC – адрес последней команды 004С16; CYCLES=009B16; PM_ADDR=0030BF16; DM_ADDR=00007E16

          Выполнилось условие выхода из цикла копирования CE=1

          Подсчитаем время выполнения программы и ее объем. Согласно тех. описанию ADSP-2181 при частоте внешнего кварцевого резонатора 50МГц и напряжении питания 5В время выполнения одного цикла команд составляет 25нс. Так как CYCLES=009B16=15510, то время выполнения программы равно tпр=25нс*155=3,875 мкс. Объем программы оценим по количеству команд, содержащихся в промежутке от метки start до метки end (информационное окно Disassembly). Объем программы равен 28 командам.

          Графики подтверждают сделанное выше заключение о том, что копируются четные отсчеты источника копирования, т.е. происходит прореживание. В результате, если на один период синусоиды из буфера–источника приходилось 64 отсчета, то теперь на один период синусоиды в приемнике приходится 32 отсчета при сохранении тех же 64 отсчетов на весь сигнал, следовательно, произошло «увеличение частоты» в 2 раза (уменьшение периода в 2 раза).

         9. В данной работе возможна модификация программы. Приведем пример и посмотрим, какие изменения произошли.

Сделаем следующие изменения:

а) изменим буфер-источник с dm_buf1 на dm_buf0;

б) изменим буфер-приемник с pm_buf2 на pm_buf3 (новый приёмник имеет другую размерность); в) изменим регистр длины M0 – берется каждый отсчет из буфера-источника (М0=1)

     В результате получим следующий текст модифицированной программы (жирным подчеркнуты измененные места):

/*___________________________________________________________________

LR2.ASM         ADSP-2181 Копирование буфера

 Программа выполняет копирование содержимого

 одного заданного буфера в другой заданный буфер

___________________________________________________________________*/

// Определение символических констант – размеров буферов

#define N0 64

#define N1 8

#define N2 64

#define N3 32

#define N4 64

.section/data data1;      // Начало секции  данных в DM,

                                              // data1 – раздел, который

                                              // содержит данные          

    

                                              // Организация буферов в DM, присвоение символиче-

                                              // ских имён, задание размеров буферов, загрузка

                                              // в буферы файлов инициализации                 

        

.VAR dm_buf0[N0]=»test_std1.dat»;

.VAR dm_buf1[N4]=”sine64_00.dat”;       

.VAR dm_buf2[N2]=”cos64_00.dat”;      

.VAR dm_buf3[N3];

.VAR dm_buf4[N4];

.VAR dm_buf5[N0];

.VAR dm_buf6[N0];

.VAR dm_buf7[N0];      

                  

.section/pm pm_da;         // Начало секции  данных в PM,

                                                 // pm_da – раздел, который

                                                 // содержит данные                 

// Организация буферов в PM, присвоение символиче-

// ских имён, задание размеров буферов, загрузка

// в буферы файлов инициализации                 

  

.VAR pm_buf0[N4];   

.VAR pm_buf1[N4];

.VAR pm_buf2[N2];

.VAR pm_buf3[N3];  

                            

.section/pm interrupts;    // PM, начало секции  для хранения

     // векторов прерываний             

__reset:JUMP start; rti; rti; rti;  // 0x0000:                      

           rti; rti; rti; rti;  // 0x0004: IRQ2,                

           rti; rti; rti; rti;  // 0x0008: IRQL1,            

              rti; rti; rti; rti;  // 0x000c: IRQL0,               

              rti; rti; rti; rti;  // 0x0010: SPORT0 tx,           

              rti; rti; rti; rti;  // 0x0014: SPORT1 rx,           

              rti; rti; rti; rti;  // 0x0018: IRQE,                

              rti; rti; rti; rti;  // 0x001c: BDMA,                

              rti; rti; rti; rti;  // 0x0020: SPORT1 tx or IRQ1,   

              rti; rti; rti; rti;  // 0x0024: SPORT1 rx or IRQ0,   

              rti; rti; rti; rti;  // 0x0028: timer,               

              rti; rti; rti; rti;  // 0x002c: power down,          

.section/pm seg_code;       // PM, начало секции программного кода

start:    I0=dm_buf0;   M0=1;   L0=64;

           I1=dm_buf1;   M1=1;   L1=0;

           I2=dm_buf2;   M2=1;   L2=0;

           I3=dm_buf3;   M3=1;   L3=0;

           I4=pm_buf0;   M4=1;   L4=0;

           I5=pm_buf1;   M5=1;   L5=0;

           I6=pm_buf2;   M6=1;   L6=0;

           I7=pm_buf3;   M7=1;   L7=0;    

          

move:  CNTR=N3; DO outm UNTIL CE;  // Цикл копирования буфера      

    

    MX1=DM(I0,M0);  

outm:   PM(I7,M7)= MX1;

end:    IDLE;                       // Перевод в состояние ожидания

                                           // прерывания, в режим с малым

                                           // потреблением                 

         В результате работы изменённой программы регистр DAG заполняются в соответствии с текстом метки start:

         Буфер-источник и приемник dm_buf0 и pm_buf3 после выполнения команды IDLE:  

     

         Видно, что в результате выполнения цикла копирования скопировались не все 64 ячейки источника, а лишь 32 ячейки (CNTR=N3=32). Посмотрим это на графиках.

Как видно, источником является пилообразный сигнал. Это можно наблюдать на первом графике (dm_buf0). Приемник содержит 32 отсчёта источника, при этом длительность каждого периода сохранилась той же (M0=1). Результат мы можем пронаблюдать на втором графике (буфер-приёмник pm_buf3).


 

А также другие работы, которые могут Вас заинтересовать

65318. УДОСКОНАЛЕННЯ ПРОЕКТУВАННЯ ПОЗДОВЖНЬОГО ПРОФІЛЮ НА ОСНОВІ ЗАСТОСУВАННЯ КРИВИХ ЗМІННОГО РАДІУСА 3.52 MB
  Розробити метод проектування червоної лінії поздовжнього профілю автомобільних доріг на основі застосування кривих змінного радіуса з визначенням координат в межах від нескінченності...
65319. ПРАВОВЕ РЕГУЛЮВАННЯ ВИКОНАННЯ ПОДАТКОВОГО ОБОВ’ЯЗКУ 150 KB
  Забезпечення реальної можливості здійснення податкового обов’язку один із головних напрямків фінансової політики держави. Ефективність процедурноправового регулювання виконання податкового обов’язку безпосередньо впливає в першу чергу на забезпечення безумовної...
65321. МЕТОДИ ПРИСКОРЕНОГО КРИПТОАНАЛІЗУ БСШ НА ОСНОВІ АНАЛІЗУ ПОКАЗНИКІВ СТІЙКОСТІ ЗМЕНШЕНИХ МОДЕЛЕЙ ПРОТОТИПІВ 554 KB
  Відмічене визначає актуальність теми дисертаційної роботи направленої на вдосконалення методик оцінки показників стійкості БСШ до атак диференційного і лінійного криптоаналізу в інтересах в першу чергу підвищення якості і надійності...
65322. МУЛЬТИАГЕНТНІ МЕТОДИ ПОБУДОВИ НЕЙРО-НЕЧІТКИХ МЕРЕЖ 1.04 MB
  Проте методи навчання що використовуються при побудові нейронечітких мереж характеризуються недоліками пов’язаними з проблемою встановлення параметрів навчання вимагають участі користувача вимогою диференційованості функцій належності до нечітких термів...
65323. МОДЕЛІ АВТОМАТИЗОВАНОГО СИСТЕМНОГО ПРОЕКТУВАННЯ АВТОМАТИЧНОЇ ТРАНСМІСІЇ 663.5 KB
  Метою роботи є підвищення ефективності синтезу АТ за рахунок розробки математичних моделей автоматизованого проектування АТ та її блоків системи автоматичного управління САУ та її елементів зв’язків між ними вибору програмного забезпечення...
65324. ОБГРУНТУВАННЯ ПАРАМЕТРІВ ЗАСОБІВ ІНДИВІДУАЛЬНОГО ПРОТИГАЗОТЕПЛОВОГО ЗАХИСТУ ГІРНИКІВ 341.5 KB
  Тому розробка і створення індивідуальних засобів протигазотеплового захисту гірників членів ДГК є актуальним науковотехнічним завданням вирішення якого дозволить підвищити безпеку та ефективність ведення робіт в умовах нагрівального мікроклімату.
65325. ПЕРЕТРАВНІСТЬ КОРМУ, ОБМІН РЕЧОВИН І ПРОДУКТИВНІСТЬ КУРЕЙ-НЕСУЧОК ЗА РІЗНОГО РІВНЯ ТА СПІВВІДНОШЕННЯ СІРКИ І СЕЛЕНУ В КОМБІКОРМІ 283 KB
  Доведена доцільність використання в якості джерела сірки сульфату натрію оптимальна кількість якого в комбікормах для курчатбройлерів та ремонтного молодняку курей становить 03 від маси корму для каченят і гусенят − 10 а для курейнесучок − 05 від маси комбікорму.
65326. НЕЙРОМЕРЕЖНА ОБРОБКА БАГАТОВИМІРНИХ СИГНАЛІВ 457 KB
  Обрана тема дисертаційної роботи є актуальною тому що штучні нейронні мережі ШНМ протягом останнього часу переконливо довели свою ефективність при вирішенні різноманітних задач адаптивної обробки інформації таких як апроксимація нелінійних функцій класифікація управління...