Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

метода Петровский АлА 2006 (Лаб практикум)

.pdf
Скачиваний:
30
Добавлен:
15.06.2014
Размер:
1.26 Mб
Скачать

двоеточия между операциями МАС означают параллельное выполнение операций МАС, тем самым, говоря о том, что процессор применит сдвоенную операцию МАС (Dual-MAC).

а) б)

Рисунок 10 а) отсчеты входной последовательности; б) структура, реализующая сдвоенную операцию MAC, которая входит в состав модуля D.

Входные отсчеты указываемые *AR2 и *AR3 поступают в блоки MAC по внутренним шинам D и С, а коэффициенты фильтра по шине B, результат вычисления записывается в аккумуляторы AC0 и AC1 соответственно, как показано на рисунке 10.

Типичная реализация алгоритма фильтрации входной последовательности на языке С и её ассемблерный код, приведены в примере 1.

Пример 1. Реализация алгоритма цифровой фильтрации на языке С и ассемблер.

U32 tmp1, tmp2;

for (I = 0; I < blksize; i+=2) {

temp1 = temp2 = 0;

for (j=0;j<taps;j++) { tmp1 += ((U32)dat[i+j] *

coef[j]);

tmp2 += ((U32)dat[i+j+1]

*coef[j]);

}

res[i] = (tmp1 >> 16); res[i+1] = (tmp2 >> 16);

}

RPTBlocal done

MPY *AR2+,*CDP+,AC0 :: MPY *AR3+,*CDP+,AC1

|| RPT

#13

; RPT

параллельно

с MPYs

MAC

*AR2+,*CDP+,AC0

::MAC *AR3+,*CDP+,AC1

MAC *(AR2-T0),*CDP+,AC0

::MAC *(AR3-T0),*CDP+,AC1 done:

MOV pair(hi(AC0)),dbl(*AR4+)

31

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

Команды повторения RPT или RPTB позволит решить задачу организации внутренних и вложенных циклов, однако возникновение необходимости дополнительно загрузки программного кода потребует дополнительных циклов доступа к внутренней памяти программ. В случаях, когда блок повторения или внутренний цикл может быть полностью размещен в IBQ, рекомендуется применять команду RPTBlocal, как это показано на примере 1.

3.4 Подключение внешней памяти через EMIF

Доступ к внешнему адресному пространству осуществляется через расширенный интерфейс к памяти (EMIF – External Memory Interface), здесь всё адресное пространство разделено на 4 подпространства по 4 Мбайта, указываемых внешними выводами CEх.

Рисунок 11 Сопряжение внутренних шин ЦП с внешней памятью через EMIF

Каждое из 4-х адресных подпространств обеспечивает подключение внешней синхронной памяти (синхронное динамическое ОЗУ (SDRAM), синхронное пакетное статическое ОЗУ (SBSRAM)), или асинхронной памяти / устройств ввода вывода в зависимости от значения бит в поле MTYPE регистра CEx SCR. При подключении синхронного ОЗУ EMIF ЦП поддерживает режим

32

32 битного чтения и записи на разных тактовых частотах кратных частоте ЦП

(1, 1/2, 1/4, 1/8, 1/16).

Внешние устройства ввода/вывода подключаемые к микропроцессору имеют свое изолированное пространство (64К) по отношению к пространству памяти программ и данных, что позволяет подключить значительное количество внешних устройств.

Карта памяти программ/данных показана на рисунке 12. Для обращения к байтам пространства памяти программ ЦП использует 24 битный адрес. При получении доступа к пространству памяти данных ЦП используется только 23 бита адреса (младший бит равен 0). Вся память данных ЦП адресуется страницами по 64К (128 станиц). В начале 0 страницы пространства адресов зарезервирована область под регистры, отображаемые на память (MMR), 128-я станица выделяема под внутреннее ПЗУ, которое разбито на 3 блока 32,16 и 16К байт, причем последние 16К могут быть сконфигурированы как секретное ПЗУ (Secure ROM).

Подключение асинхронной памяти или устройств ввода/вывода через EMIF ЦП предоставляет полную гибкость в программировании временных диаграмм циклов чтения/записи и формата данных (8/16/32 бита). Регистры управления пространством памяти CEx CSR1 управляет циклами асинхронного чтения (пример временной диаграммы показан на рисунке 13), а регистра CEx CSR2 – циклами записи.

33

Рисунок 12 Карта памяти ЦП C5510

Рисунок 13 Временная диаграмма цикла чтения из асинхронного ОЗУ/портов ввода/вывода.

Доступ к внутренней памяти, как со стороны адресного пространства программ, так и со стороны адресного пространства данных возможен к одним и тем же блокам памяти, отличие состоит в способе чтения данных (пространство программ - доступ байтный, порциями по 4 байта, пространство данных – доступ словный 16 или 32).

3.5 Введение в CCS, 5510DSK, DSK_APP1

Целью данной лабораторной работы является ознакомление с 5510DSK, Code Composer Studio (SSC) и приложениям для аудиообработки dsk_app1.

Структура приложения, которое реализуется программным обеспечением dsk_app1, показана на рисунке 14.

Входной сигнал снимается с аналого-цифрового преобразователя (АЦП) и через последовательный порт McBSP под управлением канала контроллера прямого доступа (DMA) записывается в один из входных массивов (PING или PONG). В зависимости от положения переключателей DIP_1 ядро ЦП выполняет сложение входной последовательности со сгенерированным сигналом синусоиды или нет. В зависимости от положения переключателя DIP_2 входная последовательность просто копируется или фильтруется полосовым фильтром. Результирующая последовательность записывается в

34

выходной буфер PING или PONG для передачи каналом DMA через McBSP в цифро-аналоговый преобразователь для воспроизведения.

Рисунок 14 Структура системы реализуемой на стартовом наборе, приложением dsk_app1.

3.6 Настройка и тестирование аппаратного модуля DSK.

Последовательность настройки и тестирования аппаратного модуля DSK, перед запуском приложения, выполняется согласно следующим шагам.

Рисунок 15 Диалоговое окно утилиты диагностики стартового модуля DSK

35

1.Присоедините кабели: USB порт (от ПЭВМ к DSK), динамики (наушники) к разъему DSK для наушников.

2.Присоедините кабель питания и наблюдайте POST (самотестирование после включения). В течении POST, 9 различных тестов выполняются последовательно. Когда светодиоды прекратят моргать и останутся в положении ON (включено) POST завершил свое выполнение.

3.Запуск утилиты диагностики DSK 5510. 5510 DSK Diagnostic

применяется для тестирования и диагностики составных частей стартового набора, внешний вид утилиты показан на рисунке 15.

3.7 Знакомство с аудио приложением для DSK (dsk_app1.c)

Последовательность загрузки и запуска проекта, а так же как осуществляется работа с DIP переключатели в приложении dsk_app1:

1.Запустите Code Composer Studio (CCS).

2.Откройте аудио проект. Выберите:

Project Open

и найдите файл dsk_app1.pjt, который располагается в

<диск>:\<CCS директорий ”ti”>\examples\dsk5510\bsl\dsk_app\dsk_app1.pjt

3.Установите опцию «Load Program After Build» (Загрузка программы после построения), для этого выберите: Option Customize, далее закладку «Program Load Option» (Настройка загрузки программы) и отметьте пункт «Load Program After Build» (Загрузка программы после построения).

4.Подключите свободный конец аудио кабеля от ПЭВМ к линейному входу DSK и запустите на проигрывание музыкальный файл.

5.Скомпилируйте проект dsk_app1. Для этого выберите:

Project Rebuild All

или нажав кнопку “Rebuild All” (скомпилировать Всё). Появится информационное окно, которое будет отражать отдельные шаги выполнения: этапов компиляции, ассемблирования, компоновки и другие.

6.Запустите приложение, выбрав Debug Run или нажмите кнопку (Run) запуска на левой вертикальной панели инструментов. Когда все DSK переключатели подняты, приложение запущено в режиме пропуска аудио сигнала через систему и в наушниках или спикерах должна быть слышна музыка. При этом светодиодные индикаторы LED #2 и #3 сигнализируют о использовании в обработке буферов PING и PONG соответственно.

7.Откройте CPU Load Graph (График загрузки процессора), выбрав

DSP/BIOS CPU Load Graph. График загрузки процессора будет показывать приблизительно 4,5 % (если все переключатели подняты, т.е. не включены).

36

8. Включите фильтр верхних частот, нажатием на DIP переключатель #3 и обратите на изменения в музыке. Приложение считывает состояние DIP переключателей и запускает КИХ-фильтр, при этом загрузка ЦП увеличится, что отмечается на графике загрузки, который показывает 9%.

Таблица 2 Функции DIP переключателей в данном приложении

Переключатель Предназначение

0Мигание светодиода LED #1 (периодическая функция, которая переключается раз в 500 мс)

1Добавляет холостую загрузку (около 20 % загрузки процессора)

2Не используется

Добавляет высокочастотный фильтр (dsk_app1

3использует ассемблерную реализацию фильтра, а dsk_app2 использует реализацию фильтра на языке Си)

9.Нажмите DIP-переключатель #0, светодиод LED #0 начнет моргать. Данный переключатель включает периодическую функцию, которая переключает светодиод (из положения включено в положение выключено, и обратно) каждые 500 мс. Общий эффект заключается в том, что светодиод моргает каждую секунду. График загрузки значительно не изменится.

10.Нажмите DIP переключатель #1. Данное действие добавляет пустые команды для увеличения загрузки ЦП, что может помочь при моделировании функций в системе, которая ещё не написана. Значение графика загрузки увеличится до 30 %, т.е. дополнительно 20 % загрузки процессора.

3.8 Устранение ошибкок/проблем в CCS

Во время отладки в CCS, могут возникать ошибки. Во многих случаях, ошибки легко устраняются без закрытия CCS и отключения питания от платы. Приложение аудиообработки требует инициализации GEL во время запуска CCS (что не выполняется автоматически). Если был выполнен сброс процессора, то также были стерты все настройки внешнего расширенного интерфейса (EMIF) и других интерфейсов, которые были заданы соответствующим образом через конфигурационную базу данных (файл dsk_app1.cdb). Несколько способов по устранению ошибок:

1. Обратите внимание на состояние ЦП «CPU Running» (Процессор работает) или «CPU Halted»(Процессор остановлен). Попытки выполнить что-

37

нибудь в процессе работы ЦП может приводить к ошибкам. Таким образом, остановка ЦП может решить проблему.

2. После остановки процессора, попытайтесь его вновь запустить. Если это не работает, остановите процессор и попытайтесь выполнить сброс процессора в режиме отладки Debug Reset CPU. Запустите процессор снова. Перезапуск приводит к переходу на символ входа (_с_int00).

3.Остановите процессор, затем выберите GEL С5510_DSK_Configuration C5510_DSK_Init (подождите несколько секунд), перегрузите программу и запустите её снова. Программа инициализации DSK выполняет полный сброс аппаратной части DSK и памяти.

4.Если обнаружилась ошибка и CCS предлагает «Устранить» ее - нажмите Да, только выполняйте это не в среде работающей в режиме реального времени (RTA) (таких как график загрузки процессора). Обычно лучше использовать метод полного восстановления.

5.Если нет результата от проделанной работы, время использовать более эффективный метод. Закройте CCS, отключите питание от DSK, подсоедините питание назад, повторно вызовите CCS, выполните инициализацию DSK (DSK init), перезагрузите вашу программу, запустите снова.

3.9 Составные части аудиоприложения.

Конфигурационная база данных (.cdb файл) используется абсолютно во всем - при управлении памятью, устройствами фазовой подстройки частоты (PLL), распределением потоков, настройки холостого хода (режимы снижения энергопотребления), и периодическими функциями и т.д. Для доступа к .cdb файлу, выберите dsk_app1.pjt в «Окне проекта» (Project Window), в папке

DSP/BIOS Config (Конфигурация DSP/BIOS) располагается dsk_app1.cdb.

Менеджер памяти – это инструмент, где определяется карта памяти системы и где располагаются различные части приложения (исходный код, данные, константы). Менеджер памяти размещается доступен через конфигурационную базу данных, секция Mem – Memory Section Manager (Менеджер секций памяти). Свойства данного менеджера отображают размещение каждой секции в пространстве памяти, например, все глобальные переменные, размещаются в секции .bss, которая расположена в области памяти называемой DARAM (ОЗУ с двойным доступом). Менеджер памяти заботится обо всех сгенерированных компилятором секциях, таких как .bss. Однако, можно специально определить секцию для важного массива и расположить его где-то произвольно на карте памяти. Это поддерживается через директиву #pragma в исходном коде, чтобы назначить секцию, определенную пользователем для массива коэффициентов так, чтобы её можно было бы

38

разместить в отдельном блоке SARAM (ОЗУ с одиночным входом) – отдельно от DARAM. Единственный способ сделать это – использовать директиву #pragma (в файле highpass.h) и специальный пользовательский командный файл компоновки. Дополнительно в пользовательском файле userlink_app1.cmd указывается, что секция коэффициентов размещается в области памяти

SARAM_A.

Основной файл dsk_app1.c, расположенный в папке Source (Источники) Project Window (Окне проекта.) содержит программу инициализации необходимого оборудования, декларирует буферы, процедуры, реализующие основные действия данного приложения. Так как кодек посылает стерео данные, необходимо выполнять сортировку каналов (т.е. разделение потока данных через контроллер ПДП) на L (левый) и R (правый). Rcv буферы предназначены для ввода музыки. Xmt для вывода обработанной музыки. Дополнительный буфер задержки требуется для функций библиотеки DSPLIB, которые используются для фильтрации музыки.

Процедура processBuffer() описывает действия связанные с фильтрацией и копированием. Обратите внимание, что части программы для ветви пинг и понг выглядят одинаково, однако DIP переключатель #3 определяет будут ли просто копироваться данные из Rcv в Xmt буферы или будет выполняться фильтрация данных.

Процедура dmaHwi() обработки прерывания (interrupt service Routine (ISR)), которая выполняется, когда контроллер ПДП заполнит входной буфер Rcv данными. В данной точке приложение или просто переносит данные с входа на выход, или фильтрует входные данные, что зависит от положения переключателя DIP #3. Для информирования процедуры processBuffer() используются программные прерывания (SWI) или программный интерфейс приложения (API) для того, чтобы сказать какой из двух процессов необходимо выполнять: пинг или понг. dmaHwi() обработчик прерывания ISR – processBuffer() процедура программного прерывания (SWI), которая прерывается dmaHwi().

Основная процедура main(), где выполняется вся инициализация и запуск каналов контроллера ПДП. После выполнения main программа попадает в функция холостого хода операционной системы DSP/BIOS. Приложения, не применяющие DSP/BIOS обычно используют бесконечный цикл while() в основном цикле. Однако, в приложениях использующие BIOS, функция BIOS_Init запускается перед передачей управления в основную процедуру main(). BIOS_Init вызывает процедуру main() и когда main() завершается (или выпадает), то управление возвращается обратно BIOS (когда это попадает напрямую в цикл холостого хода BIOS IDL).

39

Dsk_app1 использует специализированную библиотеку DSPLIB для фильтрации входящей музыки. Библиотека DSPLIB включат в себя 50 ассемблерных функций, вызываемых из Си, которые нужно использовать для выполнения различных функций цифровой обработки сигналов. В данном примере применяется fir2 функция, которая выполняет КИХ фильтрацию, используя операцию сдвоенного МАС.

3.10 Профилирование приложения в реальном времени.

Для оценки количества требуемых циклов и скорости работы функции фильтра, используют профилирование исходного кода, используя встроенный профайлер. Однако этот метод профилирования не позволяет проводить обработку в реальном времени, и поэтому аудообработка не сможет нормально работать. Верный способ профилирования процедуры – использование статистики, которое доступно через пункты меню DSP/BIOS Statistics View. Statistic View (Окно статистики) предоставляет информацию о временных характеристиках большинства потоков в системе.

Пример, описывающий последовательность выполнения операции профилирования функции fir2, выглядит следующим образом.

Определите место процедуры processBuffer() в исходном файле dsk_app1.c. Найдите первый вызов процедуры fir2(), которая выглядит следующим образом

fir2(gBufferRcvPingL, COEFFS, …);

Добавьте следующую строку перед первым вызовом функции fir2()

STS_set(&fir_time, CLK_gethtime());

Данная строчка кода будет говорить о том, что начать отсчет следует здесь. &fir_time - есть объект статистики. Сразу же за первым вызовом функции fir2(), добавьте следующее выражение.

STS_delta(&fir_time, CLK_gethtime());

В результате получим два объявления перед и после первой функции fir2() как показано ниже:

STS_set(&fir_time, CLK_gethtime()); fir2(gBufferRcvPingL, COEFFS, gBufferXmtPingL,…);

40

Соседние файлы в предмете Микропроцессорные системы