- •1. Цель работы
- •2. Структура проекта
- •3. Рекомендуемый путь и этапы создания проекта в vdsp
- •3.1 Пример и описание .Ldf файла
- •Search_dir() - определение путей к текущей рабочей директории и к директории lib.
- •3.2 Структура простейшего .Asm файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •3.3 Компоновка проекта и создание исполняемого .Dxe файла
- •Rti; nop; nop; nop; /* 0x0008: irql1*/
- •Rti; nop; nop; nop; /* 0x0020: sport1 transmit*/
- •Rti; nop; nop; nop; /* 0x0028: Timer*/
- •4. Запуск и отладка проекта.
- •4.1 Запуск проекта Lab1
- •4.2 Отображение содержимого памяти
- •4.3 Отображение содержимого регистров
- •4.4 Построение графиков
- •5. Задание к лабораторной работе
- •1. Особенности и типы команд сигнального процессора
- •2. Используемые условия
- •2.1 Подробное описание регистров состояния и значения их битов
- •2.2 Логическое описание условий (cond), используемых с оператором if
- •2.3 Условия завершения цикла do until (term)
- •3. Многофункциональные инструкции
- •3.1 Операции alu/mac с одновременным чтением памяти данных и памяти программ
- •3.2 Чтение памяти данных и памяти программ
- •3.3 Вычисления с чтением из памяти
- •3.4 Вычисления с записью в память
- •3.5 Вычисления с пересылкой регистр-регистр
- •4. Инструкции alu, mac и shifter
- •4.1 Инструкции и стандартные функции
- •4.2 Инструкции и стандартные функции
- •4.3 Инструкции и основные функции
- •5. Команды пересылки данных
- •6. Инструкции управления исполнением программы
- •If eq jump my_label; call (i6);
- •7. Другие инструкции и команды не вошедшие в
- •8. Обобщённая таблица команд
Rti; nop; nop; nop; /* 0x0008: irql1*/
RTI; NOP; NOP; NOP; /* 0x000C: IRQL0*/
RTI; NOP; NOP; NOP; /*x0010: SPORT0 transmit*/
RTI; NOP; NOP; NOP; /* 0x0014: SPORT0 receive*/
RTI; NOP; NOP; NOP; /* 0x0018: IRQE*/
RTI; NOP; NOP; NOP; /* 0x001C: BDMA*/
Rti; nop; nop; nop; /* 0x0020: sport1 transmit*/
RTI; NOP; NOP; NOP; /* 0x0024: SPORT1 receive*/
Rti; nop; nop; nop; /* 0x0028: Timer*/
RTI; NOP; NOP; NOP; /* 0x002C: Power down*/
.section/code program;
start:
ena m_mode;
I0=x;
L0=0;
I1=y;
L1=0;
M0=1;
AR=-9;
CNTR=N;
DO Mloop UNTIL CE;
DM(I0,M0)=AR;
MY1=AR;
MR=AR*MY1 (SS);
DM(I1,M0)=MR0;
Mloop: AR=AR+1;
end: IDLE;
JUMP end;
/* конец файла Lab1.asm */
сохранить этот файл в папке Lab1 под названием Lab1.asm - меню File\Save As…;
включить файл Lab1.asm в проект – меню Project\Add to Project\File(s)…;
создать новый .LDF файл – меню File\New, далее в окне “Новый документ” выбрать Editor File и нажать OK;
в появившемся окне (рис.1 – окно 2) ввести следующий текст:
/* начало файла ADSP-2189.ldf */
ARCHITECTURE(ADSP-2189)
$OBJECTS = $COMMAND_LINE_OBJECTS;
MEMORY
{
seg_inttab { TYPE(PM RAM) START(0x00000) END(0x0002f) WIDTH(24) }
seg_code { TYPE(PM RAM) START(0x00030) END(0x01fff) WIDTH(24) }
seg_data1 { TYPE(DM RAM) START(0x02000) END(0x02fff) WIDTH(16) }
seg_heap { TYPE(DM RAM) START(0x03000) END(0x037ff) WIDTH(16) }
seg_stack { TYPE(DM RAM) START(0x03800) END(0x03fdf) WIDTH(16) }
}
PROCESSOR p0
{
LINK_AGAINST( $COMMAND_LINE_LINK_AGAINST)
OUTPUT( $COMMAND_LINE_OUTPUT_FILE )
SECTIONS
{
sec_inttab
{
INPUT_SECTIONS( $OBJECTS(interrupts))
} >seg_inttab
sec_code
{
INPUT_SECTIONS( $OBJECTS(program) )
} >seg_code
sec_data1
{
INPUT_SECTIONS( $OBJECTS(data1) )
} >seg_data1
sec_stack
{
ldf_stack_limit = .;
ldf_stack_base = . + MEMORY_SIZEOF(seg_stack) - 1;
} >seg_stack
sec_heap
{
.heap = .;
.heap_size = MEMORY_SIZEOF(seg_heap);
.heap_end = . + MEMORY_SIZEOF(seg_heap) - 1;
} >seg_heap
}
}
/* конец файла ADSP-2189.ldf */
сохранить этот файл в папке Lab1 под названием ADSP-2189.ldf - меню File\Save As…;
в ключить файл ADSP-2189.ldf в проект – меню Project\Add to Project\File(s)…
Рис. 1. Стандартный вид отображения интегрированной среды разработки.
сохранить проект, сделав активным окно Lab1.dpj, target: Lab1 (рис.1 – окно 1), и выбрать пункт меню File\Save.
Компоновка созданного проекта осуществляется с помощью пункта меню Project\Rebuild All. Если в процессе компоновки не было обнаружено ошибок, то VDSP в окне Output Window (рис.1 – окно 3) выдаст сообщение Build completed successfully. В результате в папке …\Lab1\debug\ будет создан файл LAB1.DXE.
4. Запуск и отладка проекта.
4.1 Запуск проекта Lab1
Запуск и отладка программ осуществляется с помощью отладчика (рис.2), входящего в состав VDSP. Отладчик имеет множество важных особенностей. Визуализация данных с помощью встроенного графического пакета позволяет существенно поднять уровень гибкости отладки проекта. Эта форма графического представления данных позволяет программисту быстро оценить выполнение алгоритма. Поскольку сложность алгоритмов стремительно увеличивается, это свойство может существенно облегчить процесс создания высокопроизводительных приложений. Отладка программ в режиме симуляции позволяет производить ее без обращения к DSP. Запуск и отладку проекта, с описанием основных средств отображения информации в отладчике, покажем на примере проекта Lab1.
В начале необходимо загрузить в отладчик нужную программу (а именно Lab1.dxe), для этого выполняется следующая последовательность действий:
запустить отладчик - меню Пуск\Программы\VisualDSP\21xx Debugger, вид окна отладчика изображен на рис.2;
загрузить исполняемый файл – File\Load Program…, выбрать файл …\Lab1\debug\LAB1.DXE.
выбрать тип DSP и режим выполнения – меню Session\New Session…, далее в окне Target Selection в полях Debug target и Processor выбрать ADSP-21xx Family Simulator и ADSP-2189 соответственно, после чего нажать OK.
Для запуска программы необходимо выбрать пункт меню Debug\Run (F5), для остановки – меню Debug\Halt (Shift+F5), а для повторного запуска – Debug\Restart. Если есть необходимость в пошаговом выполнении программы, то для этой цели существует команда Debug\Step Into (F11).
Чтобы установить начальные значения данных в программе, необходимо последнюю перезагрузить – меню File\Reload Program (Ctrl+R).
Д ля контроля работы программы, изменения регистров и памяти требуется пошагово выполнять программу (F11).
Рис. 2. Вид окна отладчика.