
- •Цифровые сигнальные процессоры
- •Содержание
- •1. Архитектура adsp-2181
- •1.1. Описание выводов процессора
- •1.2. Структурная схема adsp-2181
- •Генераторы адресов данных dag1 и dag2, регистр команд instruction register и программный конвейер program sequencer.
- •1.3. Память программ
- •1.4. Память данных
- •1.5. Функциональная схема alu
- •1.6. Функциональная схема мас
- •1.7. Функциональная схема shifter
- •Значения выходного кода сдвигателя при различных значениях
- •1.8. Функциональная схема программного конвейера
- •1.9. Система прерываний
- •1.9.3. Конфигурирование прерываний.
- •1.10. Регистры состояния и стек состояния
- •1.11. Передача данных
- •1.11.1. Генераторы адресов
- •1.11.2. Узел обмена данными
- •1.12. Последовательные порты
- •1.12.1. Общие сведения
- •1.12.2. Программирование sport
- •Функциональное назначение конфигурационных регистров
- •1.12.3. Пример конфигурирования последовательных портов
- •{Программа инициализации sport0, sport1}
- •1.12.4. Сжатие данных
- •1.12.5. Автобуферизация
- •1.12.6. Пример программирования автобуферизации
- •1.12.7. Многоканальность
- •1.13. Таймер
- •1.14. Системный интерфейс
- •1.14.1. Сигналы синхронизации
- •Состояние регистров процессора после сброса и перезагрузки
- •Состояние регистров bdma после сброса и перезагрузки
- •1.14.2. Внешние прерывания
- •1.14.3. Флажковые биты
- •1.14.4. Режим энергосбережения
- •1.15. Контроллер прямого доступа к байтовой памяти (bdma)
- •1.15.1. Общие сведения
- •1.15.2. Регистры управления bdma
- •1.15.3. Функционирование bdma
- •1.15.4. Загрузка программ с помощью bdma
- •1.16. Порт idma
- •1.16.1. Сигналы idma
- •1.16.2. Функционирование idma
- •1.16.3. Загрузка программ с помощью idma
- •1.17. Система команд
- •1.17.1. Общие сведения
- •1.17.2. Методы адресации
- •1.17.3. Условные обозначения
- •1.17.4. Команды пересылки данных
- •1.17.5. Команды alu
- •Б) вычитание X-y/вычитание X-y с заемом
- •1.17.6. Команды мас
- •1.17.7. Команды shifter
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop и условия cond см. П. 1.17.7.А.
- •Допустимые регистры xop см. П. 1.17.7.А.
- •Допустимые регистры xop см. П. 1.17.7.А.
- •1.17.8. Команды управления потоком программы
- •Допустимые условия cond:
- •Допустимые условия cond см. П. 1.17.8.А.
- •1.17.9. Многофункциональные команды
- •1.17.10. Прочие команды
- •1.18. Инструментальные средства разработки программного обеспечения
- •1.18.1. Инструментальные средства для dos
- •1.18.2. Инструментальные средства для windows
- •1.18.3. Создание проекта в VisualDsp
- •1.18.4. Загрузка программы в ez-kit Lite
- •1.19. Примеры программирования в среде VisualDsp
- •1.19.1. Формирование эхо-сигнала
- •Architecture(adsp-2181) // определение типа процессора
- •1.19.2. Эмуляция интерфейса rs-232
- •1.19.3. Эмуляция интерфейса rs-232 (смешанный вариант)
- •Architecture(adsp-2181) // определение типа процессора
- •2. Архитектура системы на основе adsp-2181
- •2.1. Структурная схема вычислительной (управляющей)
- •2.2. Цепи синхронизации и запуска процессора
Architecture(adsp-2181) // определение типа процессора
SEARCH_DIR( $ADI_DSP\218x\lib ) // определение пути к библиотекам
// Имена файлов, библиотек, ключей берутся из командной строки,
// необходимо также подключить libc.dlb, но это можно сделать также
// через Project | Project Options | Link | Additional options: libc.dlb
$OBJECTS = $COMMAND_LINE_OBJECTS, libc.dlb;
// 2181 имеет 16K слов (24-bit) ПП и 16K слов (16-bit) ПД
MEMORY {
// Используем всю доступную ПП и ПД
int_area {TYPE(PM RAM) START(0x0000) END(0x002f) WIDTH(24)}
prog_area {TYPE(PM RAM) START(0x0030) END(0x37fe) WIDTH(24)}
data_area {TYPE(DM RAM) START(0x0000) END(0x2fff) WIDTH(16)}
heap_area {TYPE(DM RAM) START(0x3000) END(0x37ff) WIDTH(16)}
stack_area {TYPE(DM RAM) START(0x3800) END(0x3fdf) WIDTH(16)}
}
PROCESSOR p0 {
// Ключи для линкера берутся из командной строки
LINK_AGAINST( $COMMAND_LINE_LINK_AGAINST )
// Имя выходного файла берется из командной строки
OUTPUT( $COMMAND_LINE_OUTPUT_FILE )
SECTIONS {
// Секция таблицы векторов прерываний,
// названия векторов определены в 218x_int_tab.asm
sec_int {
INPUT_SECTIONS( $OBJECTS(IVreset ) )
INPUT_SECTIONS( $OBJECTS(IVirq2 ) )
INPUT_SECTIONS( $OBJECTS(IVirql1 ) )
INPUT_SECTIONS( $OBJECTS(IVirql0 ) )
INPUT_SECTIONS( $OBJECTS(IVsport0xmit ) )
INPUT_SECTIONS( $OBJECTS(IVsport0recv ) )
INPUT_SECTIONS( $OBJECTS(IVirqe ) )
INPUT_SECTIONS( $OBJECTS(IVbdma ) )
INPUT_SECTIONS( $OBJECTS(IVirq1 ) )
INPUT_SECTIONS( $OBJECTS(IVirq0 ) )
INPUT_SECTIONS( $OBJECTS(IVtimer ) )
INPUT_SECTIONS( $OBJECTS(IVpwrdwn ) )
} >int_area
// Программная секция
sec_code {
// program – имя по умолчанию программной секции кода для
// СИ – файлов, может быть изменено в 218x_hdr.asm или
// директивой segment(segment_name) в тексте СИ-программы
INPUT_SECTIONS( $OBJECTS(program) )
// UART_CODE – имя секции программы,
// заданное в файле uart.asm
INPUT_SECTIONS( $OBJECTS(UART_CODE) )
} >prog_area
// Секция данных
sec_data {
// data1 – имя по умолчанию секции данных для
// СИ – файлов, может быть изменено в 218x_hdr.asm или
// директивой segment(segment_name) в тексте СИ-программы
INPUT_SECTIONS( $OBJECTS(data1))
// UART_DATA – имя секции данных, заданное в файле uart.asm
INPUT_SECTIONS( $OBJECTS(UART_DATA))
} >data_area
// Поддержка инициализации СИ – переменных, включая С++
sec_ctor {
INPUT_SECTIONS( $OBJECTS(ctor) )
} >data_area
// Поддержка кучи
sec_heap {
.heap = .;
.heap_size = MEMORY_SIZEOF(heap_area);
.heap_end = . + MEMORY_SIZEOF(heap_area) - 1;
} >heap_area
// Поддержка стека
sec_stack {
ldf_stack_limit = .;
ldf_stack_base = . + MEMORY_SIZEOF(stack_area) - 1;
} >stack_area
} // окончание SECTIONS
} // окончание processor p0
Рис. 1.20. Содержимое линкерного файла AsyncMix.ldf, входящего в проект AsyncMix
Файл рис. 1.20 в основном соответствует содержимому файла рис. 1.16. Отличие заключается в том, что:
раздел $OBJECTS дополнен именем файла libc.dlb;
в раздел MEMORY включены области памяти int_area, heap_area и stack_area;
в раздел SECTION добавлены секции СИ программы: program – для программной секции, data1 – для секции данных (в которой находятся переменные ch и handler), ctor – для секции данных (инициализация переменных CИ-программы), heap – для секции данных (поддержка кучи), stack – для секции данных (поддержка стека).