Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа по теме

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

Лабораторная работа по теме
" BlackFin. Обработка звукового сигнала в процессоре. "

Дополнительные элементы: отладочный модуль процессора ADSP-BF533 EZ-KIT Lite или ADSP-BF535 EZ-KIT Lite, программная среда Visual DSP 3.5 16-bit, колонки и зкуковой проигрыватель.

Цель работы: В лабораторной работе  предлагается  изучить и освоить программирование процессора ADSP- BlackFin и его элементов в среде  Visual DSP.

Информация: Краткая информация о процессоре. Работа со звуком в EZ-KIT Lite. Пример программ.

Задание на выполнение работы

  1.  Подключение.
    1.  Подключения шнура от источника звука(звуковой карты, портативного плейера или другого источника) во вход BF535 (Line In/MIC)
    2.  Подключение шнура колонок к выходу BF535 (Line Out)
  2.  Запуск программы
    1.  Скопировать программу  из каталога  :\Program Files\Analog Devices\VisualDSP 3.5 16-Bit\Blackfin\EZ-Kits\ADSP-BF535\Examples\AD1885 Talkthrough в свой пользовательский каталог.
    2.  Запустить программный продукт фирмы Analog Devices  - Visual DSP 3.5 16-bit.
    3.  Открыть проект BLACKFIN_EZKIT_TALKTHROUGH.dpj
    4.  Откомпилировать и запустить проект на выполнение.
    5.  Подать сигнал с источника звука (запустить на проигрывание файл, включить на воспр. плейер или др.) на вход BF535
  3.  Фильтрация сигнала
    1.  Открыть файл проекта Processing_ISR.asm
    2.  Перейти в конец файла и записать алгоритм обработки сигнала.

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

Файлы проекта:

main.c   содержит основную программу и описание переменных.

Initialise.c   содержит все подпрограммы инициализации

ISR.c   содержит подпрограмму прерывания для SPORT0_RX 

Process_data.c  содержит процедуру обработки входного звука.

Talkthrough.h  файл-заголовок, содержит макросы и прототипы

C_Talkthrough_I2S.dpj файл проекта VisualDSP++ 3.1

Данные программы демонстрируют инициализацию порта SPORT0 для установки связи между ADSP-BF533 и кодеком AD1836.

Через последовательный порт SPI программы переводят кодек в режим I2S (TDM).

Далее порт SPORT0 программируется для передачи и получения аудио сэмплов из кодека. Полученные сэмплы помещаются в буфер DSP в режиме DMA. Далее они обрабатываются процессором ADSP-BF533 и передаются в буфер передачи. В свою очередь, буфер передачи используется , чтобы передать информацию кодеку. Т.к. процедура обработки информации пустая, в результате получается, что принятый звук передаётся через процессор без изменений на выход.

Модуль инициализации содержит процедуры, которые производят настройку:

1. интерфейса внешней шины (EBIU)

2. памяти Flash A

3. последовательного порта SPI (для инициализации кодека AD1836)

4. последовательного порта SPORT0

5. каналов DMA 

6. прерываний.

Краткая информация о процессоре и отладочном модуле.

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

Процессоры Blackfin поддерживают модифицированную Гарвардскую архитектуру с иерархической структурой памяти. Память уровня 1 (L1) обычно работает с полной скоростью процессора с небольшой задержкой или без задержки. Память команд на уровне L1 содержит только команды. Две памяти данных содержат данные, а выделенная сверхоперативная (блокнотная) память хранит информацию стека и локальные переменные.

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

 

Набор регистров

Ядро процессора содержит два 16-разрядных умножителя, два 40-разрядных аккумулятора, два 40-разрядных арифметико-логических устройства (АЛУ), четыре 8-разрядных видео АЛУ и 40-разрядное устройство сдвига. Вычислительные устройства обрабатывают 8-, 16-и или 32-разрядные данные, поступающие из регистрового файла.

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

АЛУ выполняет традиционный набор арифметических и логических операций над 16- или 32-разрядными данными. В него включены многие специальные команды, ускоряющие выполнение различных задач обработки сигналов. К ним относятся битовые операции, такие как извлечение поля, подсчёт числа единиц, умножение по модулю 232, примитивы деления, насыщение и округление, и определение знака/порядка. Набор видео-команд включает операции выравнивания и упаковки байтов, сложение 16-разрядных чисел с 8-разрядными с усечением результата, операции 8-разрядного усреднения и операции 8-разрядного вычитания/ взятия абсолютного значения/ накопления (SAA, subtract/ absolute value, accumulate). Также поддерживаются команды сравнения/выбора и векторного поиска. При использовании некоторых команд возможно одновременное выполнение двух 16-разрядных операций АЛУ

Структурная схема вычислительного ядра.

Периферийные устройства системы процессора включают:

• Параллельный периферийный интерфейс (PPI)

• Последовательные порты (SPORT)

• Последовательный периферийный интерфейс (SPI)

• Таймеры общего назначения

• Универсальный асинхронный приёмник-передатчик (UART)

• Часы реального времени (RTC)

• Сторожевой таймер

• Порт ввода/вывода общего назначения (программируемые флаги)

Эти периферийные устройства соединены с ядром несколькими шинами с высокой пропускной способностью.

Среда разработки проектов VisualDSP++ позволяет программистам разрабатывать и выполнять отладку приложений. Эта среда включает лёгкий в использовании ассемблер, основанный на алгебраическом синтаксисе, архиватор(средство создания библиотек), компоновщик, загрузчик, потактовый симулятор уровня команд, компилятор С/С++ и библиотеку исполняемых функций С/С++, включающую математические функции и функции ЦОС. Ключевой особенностью средств разработки программного обеспечения является эффективность кода, написанного на языках С/С++. При отладке как С/С++ программ, так и программ на языке ассемблера в отладчике среды VisualDSP++ программист может:

• просматривать смешанный код на С/С++ и языке ассемблера (с перемежением исходной и объектной информации);

• устанавливать точки останова;

• устанавливать условные точки останова по содержимому регистров, памяти и стеков;

• производить трассировку выполнения команд;

выполнять линейное или статистическое профилирование выполнения программы;

• заполнять, выгружать и графически отображать содержимое памяти;

• выполнять отладку на уровне исходной программы;

• создавать собственные окна отладчика.

Структурная схема EZ-KIT Lite на базе BF535

Структурная схема EZ-KIT Lite на базе BF533

Работа со звуком в EZ-KIT Lite.

На плате EZ-KIT Lite установлен аудио кодек AD1836, который поддерживает 3  выходных стерео канала и 2 мультиканальных входа по 96 kHz. Последовательный порт процессора SPORT0 подключён к стерео входам и выходам кодека. Процессор может передавать данные на кодек в двух режимах: мультиплексная передача с временным разделением (TDM) или в режиме I2S. Режим I2S позволяет кодеку работать со звуком 96 kHz, но только с двумя выходными каналами. В режиме TDM можно работать со звуком 48 kHz, зато этот режим позволяет использовать все каналы входа и выхода одновременно. Для того чтобы работать в режиме I2S, необходимо замкнуть пины TSCLK0 и RSCLK0, а так же TFS0 и RFS0.

Внутренняя конфигурация регистров кодека AD1836 происходит через последовательный порт процессора SPI. Для этого необходимо установить флаг процессора PF4. Для более подробной информации о настройке мультиканального кодека читайте 344740003AD1836_prc.pdf. Для того чтобы сбросить кодек, используется пин регистра общего назначения PA0.

Для более подробного знакомства с особенностями работы с аудио кодеком смотрите текст программы Talkthru. Эта программа представляет собой пример работы с процессором ADSP-BF533. Она написана в двух вариантах: оба демонстрируют иницализацию связи между последовательным поротом процессора SPORT0 и кодеком AD1836, только первый вариант устанавливает связь с кодеком в режиме I2S, а второй – в режиме TDM.

Информация о цифровых сигнальных процессорах

Более полную информацию о цифровых сигнальных процессорах вы можете найти, посетив сайт – http://www.analog.com/dsp.

Информацию о программном обеспечении разработки проектов и процессорах производства компании Analog Devices можно найти в следующих изданиях:

• VisualDSP++ User’s Guide for 16-Bit Processors

• VisualDSP++ C/C++ Compiler and Library Manual for Blackfin Processors

• VisualDSP++ Assembler

and Preprocessor Manual for Blackfin Processors

• VisualDSP++ Linker and Utilities Manual for 16-Bit Processors

• VisualDSP++ Kernel (VDK) User’s Guide for 16-Bit Processor VisualDSP++ Component Software Engineering User’s Guide for 16-Bit Processors

• ADSP-BF531/ADSP-BF532/ADSP-BF533 Embedded Processor Data Sheet

• ADSP-BF535 Embedded Processor Data Sheet

• ADSP-BF53x Blackfin Processor Instruction Set Reference

Пример программ

1. Функция main.

//--------------------------------------------------------------------------//

//  Название:  Talkthrough for the ADSP-BF533 EZ-KIT Lite   //

//--------------------------------------------------------------------------//

// (C) Copyright 2003 - Analog Devices, Inc.  Все права защищены.   //

// Имя проекта: BF533 C Talkthrough TDM      //

// Изменён:  04/03/03  HD  Rev 1.0   //

// Переведён  25/05/04  shady@pisem.net    //

// Программное обеспечение:  VisualDSP++3.1  //

// Платформа:  плата ADSP-BF533 EZ-KIT    //

// Соединения:  Подсоедините источник звука (например радио) в гнездо  //

//     аудио входа и наушники (колонки) в гнездо аудио выхода  //

// Назначение:  Эта программа инициализирует порт SPI на ADSP-BF533 для //

//     того, чтобы настроить кодек AD1836. После инициализации //

//     порт SPI отключается. Данные передаются в/из кодека  //

//     черед последовательный порт SPORT0 в режиме TDM  //

//--------------------------------------------------------------------------//

#include "Talkthrough.h"

//--------------------------------------------------------------------------//

// Переменные      //

// Описание: Переменные iChannelxLeftIn и iChannelxRightIn содержат   //

//    данные, поступающие из кодека AD1836. "Обработанные"  //

//    данные записываются в переменные iChannelxLeftOut и   //

//    iChannelxRightOut соответственно, и полсе пересылаются   //

//    обратно на кодек через SPORT0.       //

//    Значения в массиве iCodec1836TxRegs могут быть изменены  //

//    для того чтобы по-другому запрограммировать кодек      //

//    (см. описание кодека AD1885)     //

//--------------------------------------------------------------------------//

// входные данные с левых каналов ad1836

int iChannel0LeftIn, iChannel1LeftIn;

// входные данные с правых каналов ad1836

int iChannel0RightIn, iChannel1RightIn;

// выходные данные для левых каналов ad1836

int iChannel0LeftOut, iChannel1LeftOut;

// выходные данные для правых каналов ad1836

int iChannel0RightOut, iChannel1RightOut;

//int iChannel0RightOut, iChannel1RightOut;

// массив регистров для настройки ad1836

// имена орпеделены в файле "Talkthrough.h"

volatile short sCodec1836TxRegs[CODEC_1836_REGS_LENGTH] =

{         

    DAC_CONTROL_1 | 0x000,

    DAC_CONTROL_2 | 0x000,

    DAC_VOLUME_0 | 0x3ff,

    DAC_VOLUME_1 | 0x3ff,

    DAC_VOLUME_2 | 0x3ff,

    DAC_VOLUME_3 | 0x3ff,

    DAC_VOLUME_4 | 0x000,

    DAC_VOLUME_5 | 0x000,

    ADC_CONTROL_1 | 0x000,

    ADC_CONTROL_2 | 0x180,

    ADC_CONTROL_3 | 0x000

    

};

// SPORT0 DMA буфер передачи

volatile int iTxBuffer1[8];

// SPORT0 DMA буфер входных данных

volatile int iRxBuffer1[8];

//--------------------------------------------------------------------------//

// Функция:  main         //

// Описание: После вызова нескольких инициализирующих процедур, main() //

//    уходит в бесконечный цикл. Код обработки входных данных     //

//    можно записать в функцию Process_Data() в файле //

//    "Process_Data.c".  //

//--------------------------------------------------------------------------//

void main(void)

{

Init_EBIU();

Init_Flash();

Init1836();

Init_Sport0();

Init_DMA();

Init_Sport_Interrupts();

Enable_DMA_Sport0();

 

while(1);

}

2. Файл Initialise.

#include "Talkthrough.h"

//

// Функция:  Init_EBIU      //

// Описание: Эта функция инициализирует и включает банки асинхронной   //

//  памяти интерфейся внешней шины для доступа к памяти Flash A//

//--------------------------------------------------------------------------//

void Init_EBIU(void)

{

*pEBIU_AMBCTL0 = 0x7bb07bb0;

*pEBIU_AMBCTL1 = 0x7bb07bb0;

*pEBIU_AMGCTL = 0x000f;

}

//--------------------------------------------------------------------------//

// Функция:  Init_Flash    //

// Описание: Эта функция настраивает пины Port A памяти Flash A //

//  на выход. Вход AD1836_RESET на плате ADSP-BF533 EZ-KIT  //

//    подключён к Port A.     //

//--------------------------------------------------------------------------//

void Init_Flash(void)

{

*pFlashA_PortA_Dir = 0x1;

}

//--------------------------------------------------------------------------//

// Функция:  Init1836()      //

// Описание: Эта функция включает порт SPI port для настройки AD1836. //

// Содержимое массива sCodec1836TxRegs посылается в кодек  //

//--------------------------------------------------------------------------//

void Init1836(void)

{

int i;

int j;

static unsigned char ucActive_LED = 0x01;

 

 // пишем в Port A, чтобы сбросить AD1836

*pFlashA_PortA_Data = 0x00;

 

// пишем в Port A, чтобы включить AD1836

*pFlashA_PortA_Data = ucActive_LED;

 

// ждём, пока кодек перезагрузится после сброса

 for (i=0; i<0xf000; i++);

// Устанавливаем флаг PF4

*pSPI_FLG = FLS4;

// Устанавливаем скороть передачи данных SCK = HCLK/(2*SPIBAUD) SCK = 2MHz 

*pSPI_BAUD = 16;

// настраиваем spi порт

// SPI DMA запись, 16-битные данные, MSB первый, SPI мастер

*pSPI_CTL = TIMOD_DMA_TX | SIZE | MSTR;

 

// настраиваем DMA5 для передачи данных

// натраиваем DMA5 на SPI

*pDMA5_PERIPHERAL_MAP = 0x5000;

 

// 16-битная передача

*pDMA5_CONFIG = WDSIZE_16;

// Адрес начала буфера данных

*pDMA5_START_ADDR = sCodec1836TxRegs;

// размер внутреннего цикла DMA

 *pDMA5_X_COUNT = CODEC_1836_REGS_LENGTH;

 // Инкремент адреса на каждом шаге внутреннего цикла

*pDMA5_X_MODIFY = 2;

 

// включаем DMA

*pDMA5_CONFIG = (*pDMA5_CONFIG | DMAEN);

// включаем spi

*pSPI_CTL = (*pSPI_CTL | SPE);

 

// ждём окончания DMA передачи в spi

 for (j=0; j<0xaff; j++);

 

// отключаем spi

*pSPI_CTL = 0x0000;

}

//--------------------------------------------------------------------------//

// Функция:  Init_Sport0      //

// Описание: Переводит Sport0 в режим TDM, для отправки/приёма данных //

//  в/из AD1836. Настраиваем SPORT на внешние такты   //

//    синхронизации.      //

//--------------------------------------------------------------------------//

void Init_Sport0(void)

{

// Sport0 конфигурация приёма

// Внешние такты (CLK), внешняя кадровая синхронизация, MSB первый,

// 32-битные данные

*pSPORT0_RCR1 = RFSR;

*pSPORT0_RCR2 = SLEN_32;

 

// Sport0 конфигурация передачи

// Внешние такты (CLK), внешняя кадровая синхронизация, MSB первый,

// 32-битные данные

*pSPORT0_TCR1 = TFSR;

*pSPORT0_TCR2 = SLEN_32;

 

// Настраиваем MCM 8 на каналы передачи и приёма

*pSPORT0_MTCS0 = 0x000000FF;

*pSPORT0_MRCS0 = 0x000000FF;

 

// Настраиваем регистр конфигурации MCM и влючаем режим MCM

 *pSPORT0_MCMC1 = 0x0000;

*pSPORT0_MCMC2 = 0x101c;

}

//--------------------------------------------------------------------------//

// Функция:  Init_DMA    //

// Описание: Инициализирует DMA1 в режиме автоматического буфера для  //

//    приёма данных и DMA2 для передачи   //

//--------------------------------------------------------------------------//

void Init_DMA(void)

{

// Настроим DMA1 на приём данных

// из Sport0 RX

*pDMA1_PERIPHERAL_MAP = 0x1000;

 

// Настройка DMA1

// 32-битная передача, прерывание при завершении, режим автобуфера

*pDMA1_CONFIG = WNR | WDSIZE_32 | DI_EN | FLOW_1;

// Адрес начала буфера данных

*pDMA1_START_ADDR = iRxBuffer1;

// размер внутреннего цикла DMA

*pDMA1_X_COUNT = 8;

// Инркремент адреса на каждом шаге внутреннего цикла

*pDMA1_X_MODIFY = 4;

 

 

// Настроим DMA2 на передачу данных

// в Sport0 TX

*pDMA2_PERIPHERAL_MAP = 0x2000;

 

// Настройка DMA2

// 32-битная передача, режим автобуфера

*pDMA2_CONFIG = WDSIZE_32 | FLOW_1;

// Адрес начала буфера данных

*pDMA2_START_ADDR = iTxBuffer1;

// размер внутреннего цикла DMA

*pDMA2_X_COUNT = 8;

// Инкремент адреса на каждом шаге внутреннего цикла

 *pDMA2_X_MODIFY = 4;

}

//--------------------------------------------------------------------------//

// Функция:  Init_Interrupts     //

// Описание: Инициализирует прерывание для Sport0 RX      //

//--------------------------------------------------------------------------//

void Init_Sport_Interrupts(void)

{

// Устанавливаем приоритет прерывания Sport0 RX (DMA1) на 2 = IVG9

*pSIC_IAR0 = 0xffffffff;

*pSIC_IAR1 = 0xffffff2f;

*pSIC_IAR2 = 0xffffffff;

// назначаем ISR для векторов прерывания

 // Sport0 RX ISR -> IVG 9

register_handler(ik_ivg9, Sport0_RX_ISR);  

 // включаем прерывание Sport0 RX

*pSIC_IMASK = 0x00000200;

 ssync();

}

//--------------------------------------------------------------------------//

// Функция:  Enable_DMA_Sport    //

// Описание: Включает каналы DMA1, DMA2, порты Sport0 TX и Sport0 RX  //

//--------------------------------------------------------------------------//

void Enable_DMA_Sport0(void)

{

// включаем DMA

*pDMA2_CONFIG = (*pDMA2_CONFIG | DMAEN);

*pDMA1_CONFIG = (*pDMA1_CONFIG | DMAEN);

 

// открываем порты Sport0 TX и RX

*pSPORT0_TCR1  = (*pSPORT0_TCR1 | TSPEN);

*pSPORT0_RCR1  = (*pSPORT0_RCR1 | RSPEN);

}

PAGE  1




1. Политические права и свободы человека в Конституции РФ
2. Защита населения и объектов от Ч С
3. Мальчику 6ти лет был введен донорский иммуноглобулин в связи с контактом по вирусному гепатиту в семье
4. С 26 43 Гоголь Н
5. Банковский лизинг- структура участников и виды лизинга
6. издании Проект на радио Проект посвященный различным аспектам экономики табака Журналистское рас
7. ЛАБОРАТОРНАЯ РАБОТА 2 4 часа ИССЛЕДОВАНИЕ ПЕРЕДАТОЧНЫХ ВЕНТИЛЕЙ КМОП 1
8. Реферат- Навыки общения с клиентом
9. Мышиный король Дуглас- специальность- изобретение чудовищ
10. варіантів поведінки на рівні що перевищує загальні вимоги.
11. Современные тенденции в политике налогообложения юридических и физических лиц
12. Лабораторная работа 1 ИССЛЕДОВАНИЕ ЗВЕНЬЕВ СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ ЦЕЛЬ РАБОТЫ- научиться к
13. Sony Vegs 90
14. Методы измерения точности формы рабочих поверхностей оптических деталей (сферы, плоскости)
15. НЕЗАВИСИМОСТЬ РОССИЙСКАЯ НЕЗАВИСИМОСТЬ
16. Вариант 1 1 Rp
17. Реферат- Монако
18. Производство крупноразмерных изделий из газобетона
19. Великая победа - одна на всех
20. Беременность и сердечно-сосудистые заболевания