Мегаобучалка Главная | О нас | Обратная связь


Обработка аналоговых сигналов процессором ADSP-2189M



2018-07-06 659 Обсуждений (0)
Обработка аналоговых сигналов процессором ADSP-2189M 0.00 из 5.00 0 оценок




В начале программы в секции памяти программ заполняется таблица векторов прерываний, которая связывает вектор с именем программы и подпрограммы прерывания (листинг 3).

 
 
Листинг 3. Инициализация векторов прерываний в основной программе .section/pm Interrupts; /* заполняем таблицу в памяти программ */ start: jump main; rti; rti; rti; /* вектор сброса 0х0000, переход на основную программу с именем main в секции .section/pm_code */ rti; rti; rti; rti; /* вектор 0х0004 сигнала IRQ2 */ rti; rti; rti; rti; /* вектор 0х0008 сигнала IRQL1 */ rti; rti; rti; rti; /* вектор 0х000C сигнала IRQL0 */ rti; rti; rti; rti; /* вектор 0х0010 передатчика порта SPORT0 */ jump fir_start; rti; rti; rti; /* вектор 0х0014 приемника порта SPORT0, переход на подпрограмму обработки прерывания с именем fir_start */ rti; rti; rti; rti; /* вектор 0х0018 сигнала IRQE */ rti; rti; rti; rti; /* вектор 0х001C контроллера BDMA */ rti; rti; rti; rti; /* вектор 0х0020 передатчика SPORT1 */ rti; rti; rti; rti; /* вектор 0х0024 приемника SPORT1 */ rti; rti; rti; rti; /* вектор 0х0028 таймера */ rti; rti; rti; rti; /* вектор 0х002С снижения потребления */


 

 

Сброс процессора вызывает выполнение программы с нулевого адреса.

Программа в листинге 3 определяет безусловный переход с нулевого стартового адреса к основной программе main. Сигнал прерывания приемника последовательного порта SPORT0 вызывает выполнение подпрограммы обработки прерывания fir_start. Команда rti означает окончание подпрограммы обработки прерывания. Поэтому сигналы остальных источников прерываний никаких действий в программе не вызывают. Каждый вектор занимает в таблице 4 адреса. Векторы, не использумые программой main, заполняются четырьмя командами rti.

Листинг 4 содержит объявление двух циклических буферов в памяти ОЗУ процессора ADSP-2189M с помощью константы taps. Один из них находится в памяти данных dm и содержит 15 последних отсчетов аналогового сигнала в массиве data_buffer, заполняемого с частотой дискретизации FS по ходу выполнения программы. Другой буфер располагается в области программ pm для хранения коэффициентов фильтра в массиве coefficient. Коэффициенты фильтра считываются из файла только при компоновке программы. Эти значения могут изменяться при повторном проходе компоновщика (linker) без дополнительной трансляции ассемблером.

 
 
Листинг 4. Объявление буферов для хранения коэффициентов и данных кодека #define taps 15 /* константа taps = 15 */ #define taps_less_one 14 /* константа taps_less_one = 14 */ .section/dm dm_data; .var/circ data_buffer[taps]; /* циклический буфер отсчетов в области dm */ .section/pm pm_data; .var/circ coefficient[taps] = ''coeff.dat''; /* циклический буфер коэффициентов в области pm заполняется числами из файла ''coeff.dat'' */

 

 


В листинге 5 приведен пример основной программы main и подпрограммы обработки прерываний fir_start. В модуле main программы определяются переменные циклических буферов с помощью регистров I (указатель), L (длина), M (модификатор). Каждое прерывание вызывает перемещение указателя I на один шаг (М = 1) в каждом буфере. С помощью цикла clear все элементы буфера обнуляются. В управляющие регистры заносятся числа, определяющие параметры и режим работы последовательного порта SPORT0.

В подпрограмме fir_start заполняется буфер цифровых отсчетов аналогового сигнала с использованием регистра приемника rx0, рассчитывается выходной сигнал КИХ-фильтра N-го порядка и выводится на ЦАП кодека через выходной регистр порта tx0.

 
 
Листинг 5. Инициализация порта SPORT0 и обработка прерываний .section /pm pm_code; main: l0 = length (data_buffer); /* устанавливаем длину циклических */ l4 = length (coefficient) /* буферов отсчетов кодека и коэффициентов */ m0 = 1; /* шаг изменения индекса l0 в буфере data_buffer */ m4 = 1; /* шаг изменения индекса l4 в буфере coefficient */ i0 = data_buffer; /* указатель начала буфера отсчетов */ i4 = coefficient; /* указатель начала буфера коэффициентов */ ax0 = 0; cntr = length (data_buffer); /* устанавливаем счетчик циклов cntr */ do clear until ce; clear:dm(i0,m0) ax0; /* обнуляем буфер отсчетов */ ax0 = 0x2A0F; dm(SPORT0_Control_Reg) = ax0; /* программируем порт SPORT0:*/ /* длина слова 16 бит, компрессия не используется, активные уровни сигналов RFS, TFS- высокие, RFS – вход, TFS – выход, обычная синхронизация каждого слова приемника и передатчика, внешняя битовая синхронизация SCLK, многоканальный режим не используется */ ax0 = 0x1000; dm(System_Control_Reg) = ax0; /* разрешаем работу порта SPORT0*/ icntl = 0x00; /* вложенные прерывания запрещены */ imask = 0x0060; /* разрешаем прерывания только от приемника и передатчика порта SPORT0*/ mainloop: idle; /* переход в режим пониженного энергопотребления */ jump mainloop; /* ожидание в цикле поступления сигнала прерывания от порта SPORT0*/ .section /pm seg_code; fir_start: /* начало подпрограммы обработки прерывания SPORT0 */ si = rx0; /* читаем регистр приемника порта rx0 */ dm(i0,m0) = si; /* передаем новый отсчет в буфер data_buffer */ mr = 0; my0 = pm(i4,m4); mx0 = dm (i0,m0); /* переписываем коэффициент и отсчет соответственно в регистры my0,mx0 умножителя-накопителя МАС */ cntr = taps_less_one; /* устанавливаем счетчик циклов cntr */ do convolution until ce; convolution: mr = mr + mx0 * my0(ss), my0 = pm(i4,m4), dm (i0,m0); /* умножение с накоплением N-1 раз в блоке МАС */ mr = mr + mx0 * my0(rnd); /* N-ый проход цикла с округлением результата */ if mv sat mr; /* проверка переполнения результата */ tx0 = mrl; /* записываем выходной сигнал фильтра в передатчик tx SPORT0 */ rti; /* выход из подпрограммы обработки прерывания */

 

 


После проведения процессором инициализации в начале программы схема на рис. 20 выполняет циклическую обработку прерываний с периодом дискретизации TS в следующем порядке:

- преобразование входного напряжения в 16-разрядный двоичный код;

- передача последовательным кодом двух слов по 16 бит АЦП каждого канала с синхронизацией сигналами кодека SCLK и SDOFS;

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

- передача контроллером прерывания вектора прерывания 0х0014

(в соответствии с табл. 3) в процессор;

- временное прекращение основной программы main и переход на подпрограмму обработки прерывания, имя которой fir_start указано

в таблице векторов (листинг 3);

- выполнение подпрограммы обработки прерывания fir_start, которая начинается чтением регистра приемника с новым отсчетом АЦП (si=rx0) и завершается командой вывода выходного сигнала КИХ-фильтра на ЦАП (tx0 = mrl);

- возвращение в прерванную программу main;

- прием последовательным кодом за 32 такта сигнала синхронизации SCLK двух 16-разрядных слов в регистр кодека, одно из которых было рассчитано в подпрограмме fir_start;

- преобразование цифрового двоичного кода в пропорциональный выходной аналоговый сигнал ЦАП одного канала (моно) или двух каналов (стерео).

Временные диаграммы цифровой фильтрации входного аналогового сигнала приведены на рис. 19. Графики не отражают действительных задержек, вносимых отдельными блоками устройства цифровой обработки. Они характеризуют последовательность преобразований и поясняют синхронизацию подпрограммы обработки прерываний сигналами кодека и последовательного порта процессора. Время задержки сигнала tЗС определяет минимальную временную задержку прохождения аналогового сигнала от входа АЦП до выхода ЦАП, вносимую кодеком и подпрограммой fir_start. Задержка tЗС не связана с частотными свойствами КИХ-фильтра и проявляется даже в том случае, когда выходной сигнал ЦАП повторяет входной сигнал АЦП. Фазовая задержка сигнала определяется типом фильтра и его порядком.

 
 

 


Рис. 19. Временные диаграммы цифровой обработки аналогового сигнала кодека

Литература:

 

1. Корнеев В.В., Киселев А.В. Современные микропроцессоры. – М.: Нолидж, 1998.

2. Солонина А.И. , Улахович Д.А., Яковлев Л.А. Цифровые процессоры обработки сигналов фирмы Motorola. – СПб.: БХВ-Петербург, 2000.

3. Сергиенко А.Б. Цифровая обработка сигналов. – СПб.: Питер, 2002.

4. Рудаков П.И. Обработка сигналов и изображений. MATLAB 5.x. – М.: ДИАЛОГ-МИФИ, 2000.

5. Степанов А.В., Матвеев С.А. Методы компьютерной обработки сигналов радиосвязи. – М.: СОЛОН-Пресс, 2003.

6. ADSP-2189M EZ-KIT Lite Evaluation System Manual. –Analog Devices Inc, Norwood, 2002.

7. Микропроцессорные системы./ Под ред. Д.В. Пузанкова. – СПб.: Политехника, 2002.

 

[d1]



2018-07-06 659 Обсуждений (0)
Обработка аналоговых сигналов процессором ADSP-2189M 0.00 из 5.00 0 оценок









Обсуждение в статье: Обработка аналоговых сигналов процессором ADSP-2189M

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (659)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)