Федеральное агентство по образованию Дальневосточный государственный технический университет (ДВПИ им. В.В. Куйбышева)
...
146 downloads
230 Views
677KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Федеральное агентство по образованию Дальневосточный государственный технический университет (ДВПИ им. В.В. Куйбышева)
В.П. Аксенов
Сигнальные процессоры Гриф ДВ РУМЦ
Владивосток 2006
Одобрено редакционно-издательским советом ДВГТУ УДК 681.3.06 А42 Аксенов, В.П. Сигнальные процессоры: учеб. пособие / В.П. Аксенов. – Владивосток: Изд-во ДВГТУ, 2006. –135 с ISBN 5-94157-011-2 В учебном пособии приведены теоретические сведения по архитектуре цифрового процессора обработки сигналов ADSP-2189M. Особенности программирования, назначение сигналов микросхемы рассмотрены на примере работы отладочного модуля ADSP-2189M EZ-Kit Lite, который используется студентами при проведении лабораторных работ. Пособие содержит задание, порядок выполнения курсовой работы, программы синтеза и анализа цифровых фильтров в среде MATLAB. Предназначено для студентов радиотехнических специальностей вузов.
Рецензенты: И.М. Орощук д-р техн. наук, доцент (Радиоэлектронное оборудование авиации ВМФ, ТОВМИ им. С.О. Макарова); В. Кригер, ген. директор ЗАО «Информационные транкинговые системы» Печатается с оригинал-макета, подготовленного автором.
ISBN 5-94157-011-2 В.П. Аксенов, 2006 ДВГТУ, изд-во ДВГТУ, 2006
2
ВВЕДЕНИЕ Применение цифровых процессоров обработки сигналов в радиотехнических системах позволяет выполнять обработку поступающей информации в реальном времени. Это означает, что все операции алгоритма обработки сигнала должны выполняться за время, не превышающее период дискретизации входного сигнала. Отличительной особенностью сигнальных процессоров является обработка больших массивов поточной цифровой информации с высокой производительностью. Выполнение этого требования достигается за счет высокой специализации сигнальных процессоров. Для них характерно разделение шин команд и шин данных (гарвардская архитектура), аппаратная поддержка программных циклов, наличие аппаратного умножителя, включение в систему команд операции умножения с накоплением МАС (С = A * B + C) с указанным в команде правилом изменения индекса элементов массивов. Использование однотактного умножителя и ячеек памяти в качестве операндов обуславливает относительно низкие тактовые частоты работы этих процессоров. За счет быстрого выполнения команд межрегистрового обмена Ri→Rj не удается повысить производительность вычислений, как это делается в универсальных процессорах. Малая разрядность (32 двоичных разряда и менее) сигнальных процессоров с фиксированной запятой может привести к неустойчивости рекурсивных фильтров. Более удобными для проектирования систем обработки являются микропроцессоры с плавающей запятой, так как они не требуют выполнения операций округления и нормализации данных, контроля переполнения суммы в программе. Ведущие компании выпускают как дешевые сигнальные процессоры с фиксированной запятой, так и более дорогие процессоры с плавающей запятой. Основными производителями специализированных микропроцессоров DSP являются компании Texas Instruments, Analog Devices, Motorola. Примеры 3
наиболее распространенных сигнальных процессоров: Motorola 56002,96002, Intel i960, Analog Devices 21xx,210xx, Texas Instruments TMS320Cxx. В пособии приведены примеры
расчета систем, использующих сигнальный процессор
ADSP-2189M (Analog Devices). Глава 1. СТРУКТУРА И ЗАДАЧИ ЦИФРОВОЙ ОБРАБОТКИ АНАЛОГОВЫХ СИГНАЛОВ Структурная схема цифровой обработки аналогового сигнала Х(t) состоит из антиэлайсингового фильтра (АФ), аналого-цифрового преобразователя (АЦП), центрального процессора (ЦП), цифро-аналогового преобразователя (ЦАП) и сглаживающего фильтра (СФ) (рис. 1).
X(t) АФ
Xф(t)
АЦП
m
n ЦП
ЦАП
СФ
Y(t)
Рис. 1. Схема цифровой обработки сигнала
В радиотехнических устройствах цифровая обработка обычно применяется в низкочастотных блоках. Сигналом X(t) может быть выходное напряжение микрофонного усилителя или выходное напряжение детектора (амплитудного, частотного, фазового). В настоящее время разработаны высокопроизводительные процессоры для обработки радиосигналов промежуточной частоты. Отфильтрованный аналоговый сигнал Xф(t) преобразуется в пропорциональный двоичный m-разрядный код аналого-цифровым преобразователем. На выходе АЦП формируется двоичное представление аналогового сигнала (рис. 2), которое затем обрабатывается арифметически цифровым сигнальным процессором (ЦП). Для 16-разрядного сигнального процессора ADSP 2189M раз-
4
работаны микросхемы параллельных и последовательных АЦП и ЦАП соответствующей разрядности. Хф(t) Квантование по амплитуде
Квантование по времени c частотой Fs
Ts
Ts = 1/Fs
t Рис. 2. Квантование аналогового сигнала по времени и уровню
Дискретные отсчеты аналогового сигнала хранятся в виде массива 16разрядных двоичных чисел в специально отведенной области памяти – памяти данных (Data Memory), расположенной внутри микросхемы сигнального процессора. Объем памяти данных ADSP-2189M составляет 48К 16-разрядных слов. Максимальное количество дискретных отсчетов АЦП, хранящихся во внутренней оперативной памяти данных процессора, не может превышать 49 152 (48х1024) точек. При выполнении программы элементы массива можно поочередно читать одной ассемблерной командой MХ0 = DM (I0,M1), где MX0 – регистр умножителя–накопителя; I0 и M1 – индексные регистры генератора адреса, которые хранят адрес ячейки памяти (I0) и – шаг изменения адреса (М1). Например, если перед первым выполнением команды DM в регистрах были записаны значения I0=5, М1=1, то после выполнения команды в регистр MХ0 процессор запишет 16-разрядное двоичное число пятой ячейки буфера данных 5
(I0=5) и увеличит адрес на единицу (М1=1). Повторный проход этой ветви программы с командой MХ0=DM (I0,M1) вызовет запись в регистр МХ0 шестого элемента буфера в памяти и т.д. Основной особенностью сигнальных процессоров является
обработка
накопленного массива данных за время между соседними отсчетами TS. При стандартной частоте квантования FS=8 кГц, принятой в телефонии, на обработку массива данных отводится время TS=1/FS=125 мкс. Система, представленная на рис. 1, работает в реальном масштабе времени. В ней АЦП непрерывно дискретизирует сигнал с частотой, равной FS, и выдает новый отсчет процессору с такой же частотой. Для обеспечения работы в реальном масштабе времени процессор должен закончить все вычисления в пределах интервала дискретизации и передать выходной отсчет на ЦАП до поступления следующего отсчета с АЦП. В сотовых радиотелефонах массив цифровых данных звукового сигнала накапливается в течение интервала времени 10-20 мс и на обработку отводится намного большее время, чем период дискретизации TS. Тем не менее, программа выполнятся также в темпе поступающей информации и должна закончиться до поступления нового блока данных. Типичная функция цифровой обработки - реализация цифрового фильтра. В случае использования алгоритма быстрого преобразования Фурье (БПФ), блок данных загружается в оперативную память данных процессора. Пока работает алгоритм БПФ, тем временем новый блок данных загружается в память для обеспечения работы в реальном масштабе времени. Процессор должен вычислить преобразования Фурье в течение интервала передачи данных, чтобы быть готовым к процессу обработки следующего блока данных. Обычно, прежде чем подвергнуться реальному аналого-цифровому преобразованию, аналоговый сигнал проходит через цепи нормализации, которые выполняют такие функции, как усиление, ослабление и фильтрацию. Для подавления нежелательных сигналов вне полосы пропускания и предотвращения
6
наложения спектров (aliasing) необходим фильтр нижних частот или полосовой фильтр. Эту функцию выполняет аналоговый антиэлайсинговый фильтр (АФ). Блок АФ необходим в системе и в том случае, когда процессор выполняет программу цифровой фильтрации. На рис. 3 показаны графики АЧХ цифрового фильтра и аналогового антиэлайсингового фильтра нижних частот. Цифровой фильтр должен пропустить сигнал с частотами, расположенными в пределах полосы пропускания, т.е. от нуля до f=fН. Кроме необходимого участка в полосе от нуля до FS/2 график имеет и копию при частотах, превышающих половину частоты дискретизации. Антиэлайсинговый фильтр устраненяет копии АЧХ проектируемого цифрового фильтра. Характеристика АФ рассчитывается так, чтобы не пропустить сигналы с частотами, большими половины частоты дискретизации.
К
антиэлайсинговый фильтр
цифровой фильтр
1.0 0.707
f/Fs 0.5
1.0
Рис. 3. Амплитудно-частотные характеристики фильтров
После обработки процессором содержащаяся в сигнале информация преобразуется обратно в аналоговую форму с использованием n-разрядного цифроаналогового преобразователя (ЦАП). Сглаживающий фильтр необходим для преобразования дискретного сигнала в непрерывный. Показанный на рис. 1 цифро-аналоговый преобразователь может не использоваться, если обработанный процессором сигнал передается по радиоканалу в цифровой форме. 7
Главная цель цифровой обработки сигналов заключается в получении содержащейся в них информации. Эта информация обычно присутствует в амплитуде сигнала (абсолютной или относительной), в частоте или в спектральном составе, в фазе или в относительных временных зависимостях нескольких сигналов. Как только желаемая информация будет извлечена из сигнала, она может быть использована различными способами. В некоторых случаях желательно переформатировать информацию, содержащуюся в сигнале. В частности, смена формата имеет место при передаче звукового сигнала в телефонной системе с многоканальным доступом и частотным разделением (FDMA). В этом случае аналоговые методы используются, чтобы разместить несколько голосовых каналов в частотном спектре для передачи через радиорелейную станцию микроволнового диапазона, коаксиальный или оптоволоконный кабель. В случае цифровой связи аналоговая звуковая информация сначала преобразуется в цифровую с использованием АЦП. Цифровая информация, представляющая индивидуальные звуковые каналы, мультиплексируется во времени (многоканальный доступ с временным разделением) и передается по последовательной цифровой линии связи. Фильтрация является одним из наиболее мощных инструментальных средств цифровой обработки. Кроме очевидных преимуществ устранения ошибок в аналоговом фильтре, связанных с флуктуациями параметров компонентов во времени и по температуре, цифровые фильтры способны удовлетворять таким техническим требованиям по своим параметрам, которых, в лучшем случае, было бы чрезвычайно трудно или даже невозможно достичь в аналоговом исполнении. Кроме того, характеристики цифрового фильтра могут быть легко изменены программно. Поэтому они широко используются в телекоммуникациях, в приложениях адаптивной фильтрации, таких как подавление шума и распознавание речи, подавление эха в модемах. Современные высокопроизводительные модемы используют также методы цифровой обработки для вы-
8
полнения таких функций, как модуляция, демодуляция, обнаружение и исправление ошибок, настройка параметров передачи. Пример применения сигнального процессора в двухдиапазонном сотовом телефоне стандарта GSM приведен на рис. 4. Комплект микросхем, разработанный компанией Analog Devices, содержит два процессора. Процессор цифровой сигнальной обработки выполнен на базе ядра семейства ADSP218x. Он выполняет функции речевого и канального кодирования. Микроконтроллер отвечает за формирование пакетов протокола передачи данных и обеспечивает управление терминалом при вводе данных с клавиатуры. 900 МГц, 1.8 ГГц AD6522 Flashпамять
Память DSP
ADSP218x
ПДП
Порты вх./вых.
1 Мбит ОЗУ
КонтроллерARM7
AD6521 Вспомогательные ЦАП, АЦП ЦАП, АЦП I/Q- каналов Речевой кодек
Дисплей
SIM
Клавиатура
AD6523 Радиотракт прямого преобразования AD6524 Многополосный синтезатор
Рис. 4. Структурная схема мобильного терминала с применением сигнального процессора
Еще одна причина обработки сигналов заключается в сжатии полосы частот сигнала (без существенной потери информации) с последующим форматированием и передачей информации на пониженных скоростях, что позволяет сузить требуемую полосу пропускания канала. В высокоскоростных модемах и системах адаптивной импульсно-кодовой модуляции (ADPCM) широко используются алгоритмы устранения избыточности данных (сжатия), также как и в цифровых системах мобильной связи, системах записи звука MPEG, в телевидении высокой четкости (HDTV).
9
Глава 2. ОРГАНИЗАЦИЯ МИКРОПРОЦЕССОРНЫХ СИСТЕМ 2.1. Состав вычислительной системы Микропроцессор
представляет
собой
универсальное программно-
управляемое устройство цифровой обработки данных, выполненное в виде большой интегральной схемы (БИС). Конечная цель проектирования микропроцессорных систем – создание работоспособного изделия на базе одного или нескольких микропроцессоров (рис. 5).
Процессор
Подсистема ввода/вывода
Память ( ОЗУ, ПЗУ )
Внешние устройства Шина адреса Шина данных Шина управления
Рис. 5. Типовая организация микропроцессорных систем
Система состоит обычно из одного процессора, основной памяти на микросхемах ПЗУ и ОЗУ для хранения программ и данных, а также подсистемы ввода/вывода для связи с внешней аппаратурой. Программа находится в ПЗУ (постоянном запоминающем устройстве) или в ОЗУ (оперативном запоминающем устройстве) в машинных кодах. В энергонезависимую память ПЗУ машинные коды заносятся с помощью специального устройства – программатора и могут храниться в течение нескольких лет. Все чаще в микропроцессорных системах используется флэш-память, которая представляет собой ПЗУ с возможностью записи программы в составе работающего устройства. В ПЗУ обычно записываются программы начальной загрузки системы, тестовые, диагностические программы, которые не меняются в процессе эксплуатации оборудования. 10
Энергозависимая память ОЗУ способна запоминать информацию только при включенном источнике питания. Программу, выполняемую из ОЗУ, необходимо предварительно переписать из внешнего устройства, например, накопителя на магнитном или оптическом диске. Работу процессора при выполнении программы можно представить как циклически повторяющуюся процедуру выборки команды из внутренней или внешней памяти ОЗУ, ПЗУ, запоминания в регистре команд и выполнения текущей команды с помощью арифметикологического устройства (АЛУ) для большей части машинных кодов программы (рис. 6). Некоторые команды не требуют работы АЛУ, например, пересылка данных из одного регистра процессора в другой. Практически все микропроцессоры умеют выполнять в АЛУ логические операции И, ИЛИ, НЕ, исключающее ИЛИ над двумя операндами. К арифметическим операциям относятся команды сложения, вычитания, умножения и деления. Производительность процессора в основном зависит от быстродействия АЛУ. n
Шина данных
Процессор Микросхема ПЗУ или ОЗУ Регистр команд
Программный счетчик
Арифметикологическое устройство
Адрес
Шина
Внутренние
управления
ПЗУ, ОЗУ
m
0 1 2 … N
Код команды Команда 1 Команда 2 Команда 3 … Команда N+1
Шина адреса
Рис. 6. Выборка процессором команд из программной памяти
Содержимое программного счетчика передается в микросхему памяти по параллельной m-разрядной шине адреса. При включении питания или нажатии кнопки “Сброс” программный счетчик обычно обнуляется, программа стартует 11
с нулевого адреса. Адресные входные сигналы микросхемы памяти выбирают номер ячейки ПЗУ (ОЗУ). Содержимое выбранной ячейки по нулевому адресу (после старта) передается в процессор по n-разрядной шине данных и команда 1 запоминается в регистре команд. После завершения текущей команды содержимое программного счетчика увеличивается автоматически на единицу. Процессор выполняет цикл выборки из программной памяти и исполнения следующей команды 2. Цикл выборки начинается с вывода на шину адреса содержимого программного счетчика. Текущая выполняемая команда программы всегда находится в регистре команд. Команда представляет собой многоразрядное двоичное число (рис. 7), которое состоит из двух частей (полей) – кода операции и кода адресации операндов. Код операции (КОП) задает вид операции, выполняемой данной командой, код адресации определяет способ адресации переменных и констант (операндов). Если выбранная команда содержит, например, арифметическое сложение двух переменных, то процессор выполнит сложение в АЛУ, автоматически увеличит адрес программного счетчика на единицу и повторит цикл чтения команды из памяти, начиная с передачи содержимого программного счетчика по шине адреса. Таким образом, обеспечивается последовательная выборка и исполнение команд при запуске программы. Код адресации операндов
Код операции (КОП)
Рис. 7. Формат типовой команды микропроцессора
В приведенном примере программы на рис. 6 предполагается, что все команды состоят из одного байта и шина данных – 8-разрядная. В зависимости от типа процессора команда может содержать от 1 до 15 байт. Большинство процессоров с архитектурой RISC использует фиксированный 4-байтный формат для любых команд. Выборка одной RISC-команды из памяти требует четырех циклов чтения по магистрали с 8-разрядной шиной данных, поэтому содержи12
мое программного счетчика после этого увеличится на четыре, а не на единицу. В современных микропроцессорах используется конвейер, выполнение очередной команды сопровождается одновременной выборкой следующей команды программы (рис. 8). Два процесса идут параллельно, что ускоряет работу процессора. Конвейер (очередь) команд представляет собой небольшую внутреннюю память процессора, в которую во время выполнения текущей команды при освобождении внешней шины записывается одна или несколько команд, следующих за исполняемой. Выборка 1
Исполнение 1 Выборка 2
Исполнение 2 Выборка 3
Исполнение 3 Выборка 4
Рис. 8. Работа конвейера команд
2.2. Системная магистраль Главной структурной особенностью микропроцессорных устройств является магистрально-модульный принцип построения, определяющий способы соединений между отдельными блоками. Согласно этому принципу система разбивается на ряд функционально-законченных устройств – модулей. Связь между модулями осуществляется с помощью системной магистрали, состоящей из трех основных шин: адреса, данных и управления. Это подразумевает общий для всех модулей состав шин и общие правила выполнения всех процедур передачи информации по магистрали. Шина – группа сигналов микросхемы, объединенных по функциональному признаку. Шинная организация связей микропроцессорной системы позволяет легко заменять аппаратные модули, например, устанавливать новые микросхемы памяти c более высоким быстродействием или большей емкости, модернизировать устройства ввода/вывода.
13
Системная магистраль содержит сотни проводников в универсальных микропроцессорах. Для уменьшения выводов микросхемы иногда используются двухшинная магистраль, содержащая мультиплексированную шину адреса/данных и шину управления (рис. 9). Одни и те же линии связи предназначены в разные моменты времени для передачи как адреса, так и данных (в начале цикла – адрес, в конце цикла – данные). Мультиплексированная шина адреса/данных требует более длительного цикла обмена.
Адрес Адрес
Данные
Данные Немультиплексированные шины
Мультиплексированная шина
Рис. 9. Организация шин адреса и данных
Шина данных – основная шина, по которой происходит непосредственный обмен информацией между различными блоками системы. Скорость обмена зависит от ее разрядности. Обычно шина данных имеет 8, 16, 32 или 64 разряда. За один цикл обмена по 64-разрядной шине передается 8 байт, по 8разрядной – только один байт. Шина данных определяет разрядность всей системы. Когда говорят о 16-разрядном процессоре, то подразумевают, что он имеет 16-разрядную шину данных. Шина данных всегда двунаправленная и чем больше ее разрядность, тем сложнее организовать одновременное изменение сигналов во времени в приемнике при передаче информации от источника из-за разной длины проводников и разного количества элементов. Обмен по шине происходит за один или несколько периодов тактовой частоты и составляет обычно единицы, десятки наносекунд. При тактовых частотах процессора, составляющих сотни мегагерц, на задержку распространения сигналов оказывает влияние также и емкость монтажа. В приемник сигналы поступают фактически в разные моменты времени.
14
Шина адреса служит для определения адреса (номера) ячейки памяти ОЗУ, ПЗУ или адреса устройства ввода/вывода, с которыми процессор обменивается информацией в данный момент времени. Каждому устройству (кроме процессора), каждой ячейке памяти в микропроцессорной системе присваивается собственный адрес. Когда процессор выполняет команду, в поле адресации операндов которой указано внешнее устройство или микросхема памяти, то выбранный в команде элемент схемы активизируется (выводится из Zсостояния) и готовится к обмену информацией. Остальные устройства должны находиться в высокоомном Z-состоянии, которое эквивалентно их отключению от шины данных микропроцессорной системы. Шина адреса может быть однонаправленной или двунаправленной, ее разрядность определяет максимальный объем внешней памяти. Например, 16-разрядная шина адреса обеспечивает подключение внешней памяти емкостью до 64 Кбайт (216 байт), 32-разрядная шина – до 4 Гбайт (232 байт). Шина управления – вспомогательная шина, сигналы которой задают различные режимы работы системы, она является индивидуальной для каждой модели процессора. Имеется ряд управляющих сигналов, которые используются в большинстве микропроцессорных систем. К ним относятся сигналы чтения RD , записи WR , задающие направление передачи информации по шине данных при обращении к микросхемам памяти и портам ввода/вывода, сигнал сброса RESET – для начального запуска системы. Подчеркивание сверху при обозначении перечисленных сигналов шины управления означает, что активным уровнем является логический ноль. Чтобы выполнить, например, чтение данных из памяти процессор должен сформировать на своем выходе RD напряжение низкого уровня. Сигналы запроса прерываний IRQ позволяют реагировать программе на события, происходящие во внешних устройствах, с минимальной задержкой обнаруживать изменение уровня выходного сигнала устройства, подключенного к процессору.
15
Длительность импульсов, формируемых процессором на шинах, их взаимное расположение во времени зависит от типа и назначения процессора. На рис. 10 приведен цикл записи данных во внешнюю память или внешнее устройство сигнальным процессором ADSP-2181. Цикл записи процессор выполняет во время исполнения текущей команды, находящейся в регистре команд, и начинается с формирования одного из сигналов шины управления BMS , PMS , IOMS
после фронта синхронизирующего импульса тактовой частоты
CLKOUT.
CLKOUT
t
Шина адреса
Адрес ячейки памяти или ВУ
BMS, PMS или IOMS
t
WR запись Шина данных
t
t
8-, 16 или 24-разрядный код
t
Рис. 10. Временные диаграммы цикла записи процессора ADSP-2181
Сигналы BMS , PMS , IOMS определяют выбор байтовой, оверлейной памяти и внешнего устройства соответственно. Если в текущей команде указано внешнее устройство, то процессор автоматически выведет низкий уровень IOMS , т.е. активизирует его, оставив в пассивном состоянии BMS и PMS, в
котором они принимают единичные уровни. Затем по шине адреса выводится параллельным кодом 11-разрядный номер внешнего устройства А10:0, указанный в команде. Комбинация сигналов IOMS , А10:0 предназначена для выбора
16
внешними микросхемами одного внешнего устройства с указанным адресом и перевода его из Z-состояния в активное состояние с подключением к шине данных. Сигнал шины управления WR необходим для выбора направления передачи информации по шине данных и выводится процессором с небольшой задержкой относительно IOMS , учитывающей быстродействие внешней микросхемы. Последним в цикле формируется выходной 16-разрядный параллельный код на шине данных, который внешнее устройство должно записать в свой внутренний регистр памяти. Цикл записи выполняется процессором во время исполнения текущей команды вывода на внешний порт. На рис. 11 приведен пример подключения внешнего устройства к сигнальному процессору ADSP-2181, который входит в семейство ADSP-218x. Дешифратор адреса выполнен на микросхеме ПЗУ, в которую с помощью программатора предварительно записаны единицы во все ячейки памяти за исключением одной, заполненной нулями. Нулевой уровень D0 поступает на вход разрешения выхода ОЕ и выводит шинный формирователь из Z-состояния, разПроцессор ADSP-2181
Внешнее устройство
Шинный формирователь
CPU D23:8
16
Шина данных
RD
Дешифратор адреса ROM
IOMS
RG
BD
D0
A11
16
DB DA OE T
Шина адреса
A10− A0
Q
C
11 A10-A0
D
16
Регистр Выход ВУ
WR
Рис. 11. Запись данных во внешнее устройство через двунаправленный порт
решая проходить сигналам с выходов процессора D23:8 по шине данных на выходы шинного формирователя
DA. Низкий уровень сигнала WR шины
17
управления определяет направление передаваемых данных: DB – входы, DA – выходы (табл. 1). Таблица 1. Режимы работы шинного формирователя
ОЕ
Т
Направление передачи
0
0
DB → DA
0
1
DB ← DA
1
X
DA = DB = Z
Параллельный 16-разрядный двоичный код с выходов формирователя DA поступает на входы D регистра внешнего устройства и запоминается в нем на выходах Q в момент действия низкого уровня напряжения на входе синхронизации С . Показанное на схеме направление передачи информации по шине данных определяется командой вывода данных на порт во время выполнения процессором цикла записи. После завершения команды вывода высокий уровень напряжения на входе Т шинного формирователя изменяется и задает противоположное направление обмена. Если в программе далее следуют команды ввода из порта, то они выполняются в цикле чтения (рис. 12), аналогичном циклу записи. Шина формирователя DA выполняет функцию входов, шина DB – выходов. Выходные сигналы внешнего устройства поступают на входы процессора D23:8 и запоминаются в одном из внутренних регистров. Ввод данных из порта процессор синхронизирует сигналом чтения RD . 2.3. Шины серийных микропроцессоров Состав сигналов шин системной магистрали (системного интерфейса), их разрядность зависят от типа и архитектуры микропроцессора. Десятки компаний-производителей выпускают несколько тысяч марок микропроцессоров,
18
CLKOUT
t
Шина адреса
Адрес ячейки памяти или ВУ
BMS , PMS или IOMS
t
t
RD t Шина данных
t 8-, 16 или 24-разрядный код
Рис. 12. Временные диаграммы цикла чтения процессоров семейства ADSP-218х
предназначенных для различных областей применения [7]. Серийно изготавливаются три основных вида БИС микропроцессоров: универсальные, сигнальные процессоры (DSP) и микроконтроллеры [1]. Другие типы микропроцессоров, например телекоммуникационные, содержат элементы микроконтроллеров и сигнальных процессоров. Наиболее сложными являются универсальные процессоры, число выводов которых достигает нескольких сотен. Чаще всего они используются в компьютерах и обладают максимальными значениями таких параметров как производительность, емкость внешней памяти, разрядность шин данных и адреса, потребляемая мощность, процент дополнительных микросхем для подключения периферийных устройств. Примеры БИС универсальных процессоров: Intel Pentium, AMD Athlon, Hewlett-Packard Alpha 21364, Sun MAJC 5200. В перечисленных микросхемах разрядность шины данных может составлять 64, 128 бит, разрядность шины адреса – 32, 36, 40, 44 бита. Противоположными свойствами обладают микроконтроллеры, возможности которых ограничены тем, что в одной микросхеме необходимо размес19
тить полностью законченную микропроцессорную систему. Микроконтроллеры являются основой создания различных встраиваемых систем, ориентированных на применение в промышленных устройствах, сетевых приложениях, радиосвязи, портативной технике. Примеры БИС микроконтроллеров: Intel MCS-51, Motorola MC68HC908GP32, Atmel AT90S1200, Microchip 16F84. При разработке новых микропроцессорных систем чаще всего используются микроконтроллеры (до 80% случаев) [7]. Они применяются самостоятельно с минимальной дополнительной аппаратурой или в составе более сложных микропроцессоров с развитыми средствами ввода/вывода. Программа выполняется в большинстве случаев из внутреннего ПЗУ, поэтому в этом классе микропроцессоров отсутствуют внешние шины адреса, данных и управления. Контроллер управляет внешним устройством и определяет его состояние с помощью встроенных портов ввода/вывода. Недорогие микроконтроллеры имеют 8-, 16-разрядную внутреннюю шину данных, 12разрядную внутреннюю шину адреса из-за ограниченной емкости встроенной памяти программ, составляющей единицы килобайт. Число внешних выводов БИС сведено к минимуму, в простых моделях 16-20. При необходимости память можно увеличить, подключив к порту внешние микросхемы ПЗУ или ОЗУ, но из этой области памяти программа будет выполняться намного медленнее. Сигнальные процессоры занимают промежуточное положение и обладают высокой степенью специализации. Обработка поточной информации в реальном времени обеспечивается благодаря специфической архитектуре сигнальных процессоров и проблемно-ориентированной системе команд. Примеры микросхем сигнальных процессоров: Texas Instruments TMS320C6201, Analog Devices ADSP-TS001, Motorola DSP96002, Intel PXA 800F. В сигнальных процессорах реализуется аппаратная поддержка программных циклов, кольцевых буферов, умножения двух чисел и суммирования с предыдущим результатом, обработки прерываний. В них широко используется
20
конвейеризация, операнды большинства команд размещаются в регистрах, применяются теневые регистры при переключении контекста для сохранения результатов вычислений. Память разделяется на память команд и память данных в соответствии с гарвардской архитектурой (рис. 13). Шина команд
Память команд Процессор
Внешние устройства Память данных Шина данных
Рис. 13. Гарвардская архитектура с раздельными шинами данных и команд
Программа может размещаться только в памяти команд, данные – только в памяти данных. Если программа реализует алгоритм цифровой фильтрации в виде векторного уравнения Y = A·X + Y, то она записывается в память программ. Текущие значения входного сигнала Х, накопленные за определенный интервал времени, константы вектора А и сумма Y хранятся в памяти данных. Разрядность кода адреса, кода данных каждой из двух шин должны соответствовать емкости и скорости обмена информацией. Память команд имеет свое распределение адресов, память данных – свое. При выполнении программы обмен с двумя блоками памяти ведется параллельно, что ускоряет работу микропроцессорной системы, хотя и требует дополнительных затрат из-за усложнения системы. Этим объяснятся соотношение параметров систем - объем памяти и тактовые частоты сигнальных процессоров меньше, чем универсальных. Типовая структура сигнального процессора приведена на рис. 14. Особенностью структуры сигнального процессора является аппаратная поддержка основных операций, необходимых для цифровой обработки массива дискретных отсчетов входного аналогового сигнала. К основным операциям 21
Процессорное ядро Блок управления Генераторы адреса Синтезатор тактовой частоты
Блок управления программой Контроллер прерываний
Блок выполнения команд с фиксированной запятой МАС АЛУ
Подсистема ввода/вывода Периферийные устройства: кодек, таймер, порты ввода/ вывода, host-интерфейс
Блок отладки и контроля
с плавающей запятой Сопроцессоры: фильтр-сопроцессор, сопроцессор циклического кода
JTAG, WDT
Подсистема хранения Память программ
Память данных Х
Память данных Y
Память загрузки
Рис. 14. Обобщенная структурная схема сигнального процессора
относятся аналого-цифровое и цифро-аналоговое преобразование (АЦП, ЦАП), выполняемое кодеком, организация массива дискретных отсчетов сигналов в памяти данных X, Y, умножение, сложение, умножение с накоплением в блоке MAC (multiply and accumulate), перебор элементов массива в соответствии с выбранной последовательностью индексов с помощью генератора адреса. Обычно генератор адреса поддерживает бит-реверсивную адресацию элементов массива, которая необходима при вычислении быстрого преобразования Фурье. Синтезатор тактовой частоты обеспечивает регулирование скорости выполнения программы и потребляемой мощности. Поддержка операций с плавающей запятой может отсутствовать, она включается обычно в 32-разрядные процессоры. Процессорное ядро часто дополняют средствами тестирования и отладки с помощью унифицированного интерфейса JTAG. Сторожевой таймер WDT обеспечивает выход процессора в исходное состояние при зависании программы. Host-интерфейс применяется в качестве средства связи с компьюте-
22
ром или с другим процессором. Предельное быстродействие достигается за счет того, что для выполнения каждой операции в структурной схеме организован отдельный блок, это приводит к значительным аппаратным затратам. 2.4. Способы обмена процессора с внешними устройствами Обмен данными между памятью и внешним устройством в универсальных, сигнальных процессорах, микроконтроллерах выполняется
тремя
различными способами: программный обмен, прерывания, прямой доступ к памяти (ПДП). Программный обмен – наиболее простой способ, для которого внешнему устройству необходим порт подключения и не требуются дополнительные контроллеры. Ранее рассмотренный пример схемы подключения внешних устройств на рис. 11 использовал программный обмен. Начало обмена связано с местом расположения команд ввода/вывода в программе. Упрощенная последовательность действий, выполняемая программой, приведена на рис. 15.
Ввод сигнала готовности
Выделение в слове бита готовности
Устройство готово ?
нет
да Ввод/вывод данных
Рис. 15. Программный обмен данными с внешним устройством
23
Процессор в линейном порядке выполняет команды обработки данных, пока не достигнет проверки готовности устройства к обмену. Прочитав 8- или 16- разрядное слово из порта ввода внешнего устройства, программа запоминает его в одном из регистров процессора и анализирует состояние одного сигнала (бита) в слове. Нулевой уровень бита готовности обычно принимается в качестве признака подключенного устройства и его рабочего состояния. Если бит равен единице, то предполагается, что устройство не может выполнять обмен с процессором. Условный переход возвращает программу в начало цикла для повторного чтения слова, когда устройство не готово к обмену. Причиной неготовности может быть отключение ВУ от источника питания или незавершенность предыдущей выполненной операции при обмене с процессором. Цикл ожидания готовности процессор выполняется до тех пор, пока устройство не изменит уровень сигнала - с напряжения логической единицы на уровень нуля.
Непосредственный ввода/вывод для обмена через порт про-
грамма осуществляет при условии, что процессор обнаружил готовность внешнего устройства. Эффективность системы может быть повышена, если отказаться от малопроизводительного ожидания готовности на программном уровне и передать функцию специальным аппаратным средствам – контроллерам прерываний и ПДП. Если при программном обмене как начало процедуры, так и непосредственное ее исполнение находятся под управлением программы, то обслуживание по прерываниям инициируется самим устройством (рис. 16). Внешнее устройство при необходимости обмена формирует на выходе короткий импульс – запрос ВУ. Чаще всего сигнал запроса в системной магистрали обозначается как IRQ (Interrupt Request). К контроллеру прерываний подключены линии запросов всех внешних устройств. Если ни одному устройству обмен не нужен и на входе контроллера все сигналы запросов IRQi нулевые, то в этом случае процессор выполняет ос-
24
Запрос ВУ1 IRQ0 IRQ1
Запрос
Запрос ВУ2 . . .
IRQ
Контроллер прерываний
Процессор
ячейки
Вектор
Запрос ВУn
Адрес
Регистр
IRQn-1
Процедуры обработки прерываний от ВУ в памяти программ
ША, ШД, ШУ Внешнее устройство
ШД
Порт ввода/ вывода
Память данных Внешняя или внутренняя память
Рис. 16. Обработка прерываний от внешних устройств
новную программу, не вызывая процедуры обработки прерываний для ввода/вывода данных. В определенный момент времени может поступить один или одновременно несколько запросов, которые контроллер обнаруживает по изменению уровня сигнала с нуля на единицу. На процессор поступает запрос предоставления прерывания IRQ и вектор сигнала с наивысшим приоритетом при одновременном действии нескольких запросов. Вектор – это двоичное число, закрепленное за каждым внешним устройством и соответствующее его номеру. Выполнение основной программы приостанавливается, в стеке автоматически запоминаются ее состояние, адрес последней выполненной команды. С помощью вектора процессор определяет номер подпрограммы обработки прерывания и запускает ее на выполнение. Тем самым обеспечивается синхронизация начала обмена с поступлением импульса запроса на обслуживание отдельного внешнего устройства. Адрес ячейки памяти, с которой начинается подпрограмма, рассчитывается процессором через вектор. Каждое внешнее уст-
25
ройство обслуживается отдельной процедурой, содержащей команды ввода или вывода данных через порт. После завершения процедуры обработки обмена процессор восстанавливает состояние прерванной основной программы, запомненное в стеке, и продолжает ее выполнение. В том случае, когда на контроллер поступает одновременно несколько запросов, каждый из них обрабатывается соответствующими процедурами в том порядке, который определен приоритетом каждого сигнала. Первым обслуживается запрос с наивысшим приоритетом, последним – сигнал запроса с самым низким приоритетом. Приоритетность запросов на прерывание можно устанавливать программно при начальной инициализации контроллера. Непосредственный обмен данными процессор производит по шине данных во время выполнения процедуры обработки прерывания по двум маршрутам ВУ – регистр процессора, регистр процессора – память данных. Каждому из указанных маршрутов в системе команд процессора соответствует отдельная ассемблерная команда ввода или вывода. Следует обратить внимание на то, что в системе обычно нет команд прямого обмена между внешним устройством и памятью данных. При необходимости выполнить такой обмен в процедуру включаются две команды, одна из которых использует регистр процессора, вторая – память данных или ВУ. Процессор при таком способе выполняет функцию промежуточного элемента, временно хранящего передаваемые или принимаемые данные по шине данных. Это вносит дополнительную задержку и снижает максимальную скорость обмена между памятью и внешним устройством. Структурная схема обмена в режиме прямого доступа к памяти приведена на рис. 17. В основе схемы ПДП используется решение непосредственного соединения памяти и внешнего устройства для повышения скорости обмена. Процессор устраняется из маршрута, по которому передаются или принимаются данные.
26
DRQ0 DRQ1
DRQn-1
Запрос ВУ1
Запрос
Запрос ВУ2
.
Контроллер
.
ПДП
Запрос ВУn
DRQ
Процессор
Память
Внешние устройства
Подтвержденние ША, ШД, ШУ
Рис. 17. Обмен данными с внешними устройствами
в режиме ПДП
Перед началом обмена устройство, которому необходим режим прямого доступа, меняет уровень сигнала DRQi на входе контроллера и запрашивает разрешение процессора на предоставление режима с помощью сигнала DRQ. Если на вход контроллера поступает одновременно несколько запросов, то он выберет одно устройство с самым высоким приоритетом, которое будет обслужено первым. Закончив выполнение текущей команды, процессор сохраняет текущее состояние основной программы в стеке, переводит выводы шин адреса, данных, управления в Z-состояние и формирует ответный сигнал подтверждения контроллеру, который говорит о том, что шины системной магистрали освобождены. На время обмена в ПДП функции формирования сигналов шин передаются контроллеру. Процессор в это время не управляет системной магистралью и обычно останавливает выполнение программы. В некоторых процессорах допускается продолжение работы программы, если они не требуют передачи данных по внешним шинам. Операция ПДП сводится к пересылке информации из внешнего устройства в память или же из памяти во внешнее устройство. Контроллер ПДП осуществляет обмен по системной магистрали без всякого участия процессора. Процессор предварительно должен сообщить контроллеру ПДП, откуда брать информацию и куда ее помещать. Также известен объем блока передаваемых дан-
27
ных в байтах и адрес ячейки памяти, с которой должен начинаться обмен. Контроллер ПДП может считаться специализированным процессором, который отличается тем, что сам не принимает информацию и не передает ее. Когда пересылка блока информации будет закончена, процессор возвращается к прерванной программе, продолжая ее с той точки, где ее временно приостановил контроллер. Это похоже на обслуживание прерываний с тем отличием, что процессор не участвует в обмене. Теоретически обмен с помощью прямого доступа обеспечивает более высокую скорость передачи информации, чем программный обмен, однако на практике это преимущество реализуется не всегда из-за ограниченной пропускной способности магистрали. Необходимость программного задания параметров контроллера также снижает его эффективность. Наличие в микропроцессорной системе встроенного контроллера ПДП обеспечивает высокую скорость обмена и максимальное преимущество в сравнении с другими способами, т.к. его параметры учитывают особенности работы процессора и других элементов конкретной системы.
Глава 3. СИСТЕМНЫЙ ИНТЕРФЕЙС ADSP-2189M 3.1. Структура процессора ADSP-2189M Однокристальный
процессор ADSP-2189M в 100- или 144-выводном
корпусе использует модифицированную
гарвардскую архитектуру, кото-
рая предполагает раздельные адресные пространства памяти программы и памяти данных, позволяет хранить данные в памяти программы (рис. 18). Процессор содержит ядро 2100 (три вычислительных блока, генераторы адреса и программный секвенсор), два последовательных порта, 16-разрядный внутренний порт прямого доступа DMA, 8-разрядный порт DMA, порты ввода-вывода
28
внешних сигналов, программируемый таймер, систему обработки прерываний, встроенную статическую память программ и данных. Программируемые входы, выходы, выводы флагов
Ядро ADSP-2100 Адресные генераторы
Память Секвенсор
Внешняя шина адреса
Память Память программ данных
DAG1 DAG2
Работа с расширенной памятью
Внешняя шина данных
Шина адреса памяти программы
Контроллер ПДП
Шина адреса памяти данных
или работа с хост-процессором
Шина данных памяти программы Шина данных памяти данных Блоки арифметики АЛУ МАС Устройство
сдвига
Последоват. порты
Внешняя шина данных
Таймер
SPORT 0 SPORT 1
Внутренний порт ПДП
Рис. 18. Блок-схема ADSP-2189M
Все устройства микропроцессора – 16-разрядные и оперируют с данными в формате с фиксированной запятой. Числа представляются либо как беззнаковые, либо в дополнительном коде. 14-разрядная шина адреса памяти программ позволяет получить прямой доступ к 16К слов (24-битовых) памяти программ. Шина данных памяти данных является 16-разрядной. На кристалле процессора расположено 32К слов памяти программ и 48К слов (16-битовых) памяти данных. При тактовой частоте 75МГц производительность процессора составляет 75 миллионов команд в секунду (75 MIPS), время командного цикла – 13.3 нс. За один цикл ADSP-2189M может сгенерировать адрес следующей команды программы, выбрать следующую команду, выполнить два обмена данных, обновить два указателя адреса, выполнить вычислительную операцию, пе-
29
редать или принять данные от двух последовательных портов и обновить регистр таймера. С точки зрения программиста сигнальный процессор представляет собор набор программно-доступных регистров (рис. 19).
Интерфейс памяти
Ядро ADSP-2100 Таймер DAG1
DAG2
(только адрес DM)
(адрес DM и PM)
I0
L0
M0
I4
L4
M4
I1
L1
M1
I5
L5
M5
I2
L2
M2
I6
L6
M6
I3
L3
M3
I7
L7
M7
14
14
14
14
14
0x3FFD
14
0x3FFC 0x3FFB
Последовательный порт SPORT 0 RX0
0x3FFA
18
5
14
Стек цикла 4 ×18
Регистр Программный прерывания счетчик РС, ICNTL стек 16 ×14 16 IFC
0x3FF9 0x3FF8 0x3FF7
10 7 8 IMASK MSTAT ASTAT
Стек 4 ×14
STATUS STACK
АЛУ
AR
0x3FF6
Control
0x3FF5 0x3FF4
SCLKDIV RFSDIV
0x3FF3
Autobuffer
AF
MХ0 MХ1
Последовательный порт SPORT 1
MY0 MY1
MR2 MR1 MR0
MF
RX1
Устройство сдвига
SI
TX 15-0
MАC
АХ0 АХ1 АY0 АY1
SE
SB
Обмен между шинами шисдвига РХ
SR1 SR0
Регистр управления системой
SCR 0x3FFE Управление внешней памятью и портами WS DMOVLAY
PMOVLAY
Порты ПДП, флаги
RX 31-16 RX 15-0 TX 31-16
Управление портом
8 SSTAT
0x3FFF
TX0
Многоканальный обмен
Секвенсор
14 OWRCNTR CNT
TPERIOD TCOUNT TSCALE
Регистры ПДП 0x3FE0 IDMA control 0x3FE1 BIAD 0x3FE2 BEAD 0x3FE3 BDMAcontrol 0x3FE4
BWCOUNT
Программируемые флаги 0x3FE5
PFDATA
0x3FE6
PFTYPE
TX1
0x3FF2
Control
0x3FF1 0x3FF0
SCLKDIV RFSDIV
0x3FEF
Autobuffer
РM – память программ (program memory), DM – память данных (data memory) Рис. 19. Программная модель процессора ADSP-2189M
30
Адресные генераторы (DAG) вычисляют адреса при пересылке данных из памяти в регистры и обратно. Генератор DAG1 может выполнять адресацию только в памяти данных, DAG2 – в памяти данных и в памяти программ. Секвенсор управляет ходом выполнения программы. Регистр команд секвенсора хранит информацию о выполняемой в данный момент времени команде. Команды загружаются из памяти программ в регистр команд в одном цикле процессора и выполняются в следующем цикле, когда одновременно с выполнением выбирается следующая команда программы. Регистр команд образует одноуровневый конвейер в потоке выполняемых команд. Секвенсор позволяет организовать цикл в программе без использования команд условного перехода. Условие завершения цикла процессор выполняет автоматически, контролируя системный счетчик циклов программы. Устройство также способно с минимальной задержкой реагировать на прерывания, поступающие от контроллера прерываний. Появление прерывания вызывает временную остановку основной программы и переход к ячейке памяти, где хранится подпрограмма обработки прерывания. Для этих целей в таблице векторов прерываний зарезервировано четыре ячейки памяти на одно прерывание. Прерывания могут вызываться внешними сигналами, поступающими на процессор, или циклически через равные интервалы времени, подсчитываемые таймером. Арифметико-логическое устройство (АЛУ) поддерживает 32-разрядные арифметические действия. АЛУ обеспечивает стандартный набор арифметических и логических функций: сложение, вычитание, инкремент, декремент, получение абсолютного значения, смену арифметического знака, логическое И, ИЛИ, исключающее ИЛИ и инверсию. Поддерживаются примитивы деления. Умножитель-накопитель МАС выполняет умножение со сложением или умножение с вычитанием за один цикл. Пример такой ассемблерной команды рассмотрен ранее. Для защиты от переполнения устройство содержит 40битный аккумулятор. Дополнительные 8 разрядов допускают возникновение
31
256 переполнений, прежде чем произойдет потеря данных. Если после окончания выполнения программы установлен флаг MV, то это означает, что регистр результата содержит слово, длина которого больше 32 разрядов. Устройство сдвига производит операции логического и арифметического сдвига, нормализации (преобразование из формата с фиксированной запятой в формат с плавающей запятой), денормализации (преобразование из формата с плавающей запятой в формат с фиксированной запятой), вычисления экспоненты. Два последовательных порта SPORT0 и SPORT1 используются для обмена данными с последовательными устройствами. Обычно один из портов подключается через СОМ-порт к компьютеру, другой – с последовательным кодеком (АЦП и ЦАП в одной микросхеме). Оба порта поддерживают обмен данными в последовательном коде словами длиной от 3 до 16 бит и обеспечивают логарифмическое сжатие данных по А-закону или μ-закону в соответствии с рекомендацией G.711. Программируемый таймер генерирует периодические прерывания с помощью 16-битного счетчика TCOUNT. Содержимое счетчика уменьшается на единицу в каждом цикле процессора. Когда счетчик обнуляется, генерируется прерывание и в него записывается начальное значение из 16-разрядного регистра TPERIOD. Микропроцессор содержит внутренний порт прямого доступа к памяти (ПДП) и байтовый порт ПДП, которые обеспечивают быстрый обмен с памятью. Внутренний порт ПДП поддерживает обмен с памятью программ, байтовый порт позволяет записывать и читать как команды, так и данные. Порт интерфейса с хост-процессором обеспечивает подключение процессоров данного семейства или других микропроцессоров без дополнительных интерфейсных схем. Напряжение питания ядра процессора 2.5В, напряжение на внешних выводах портов ввода-вывода должно быть равным 2.5В или 3.3В. Мощность, по-
32
требляемая от источника питания, достигает максимума 90мВТ при выполнении процессором программы из встроенной памяти и не превышает 1 мВТ в режиме пониженного энергопотребления. Переход в «спящий» режим может осуществляться аппаратно или программно. Структура процессора ориентирована на выполнение наиболее часто встречающихся операций при цифровой обработке за один цикл. Типовой операцией различных алгоритмов цифровых процессоров обработки сигналов является суммирование произведений. Для этого процессору необходимо извлечь из памяти два операнда (например, коэффициент фильтра и один отсчет массива данных), перемножить их и суммировать результат с предыдущим произведением. При обращении к отдельному устройству в программах на языке ассемблера используется одна или несколько переменных, хранящихся в регистрах процессора. Имя регистра определяет не только конкретное устройство, но и закрепленную за ним функцию. В генераторах адреса DAG1 и DAG2 четыре индексных регистра I содержат адреса ячеек памяти, регистры М – шаг увеличения адреса, L – длину циклического буфера. Данные, поступающие на входы АЛУ и МАС для выполнения арифметических или логических операций, должны храниться в одном или нескольких регистрах АХ0, АХ1, МХ0, МХ1, АY0, АY1, МY0, МY1. Результат выполненной операции хранится в регистрах AR, AF, MR, MF. Признаки результата операции, выполненной АЛУ и МАС, процессор автоматически заносит в регистр ASTAT (табл. 2). Процессор установит бит AZ (AZ=1), если результат нулевой, и сбросит бит (AZ=0) в противном случае. Бит AN=1, если после выполнения текущей команды получено отрицательное число. Бит MV устанавливается в том случае, если произошло переполнение 40-разрядного числа МАС. Регистр режима работы MSTAT содержит 4 бита управления переключением регистров вычислительных блоков, бит-реверсивной адресацией генера-
33
тора DAG1 и насыщением АЛУ. Остальные 3 бита управляют размещением результата в блоке МАС, таймером и запуском процессора. Таблица 2. Переменные регистра ASTAT Биты ASTAT
7
6
5
4
3
2
1
0
Имя переменной
SS
MV
AQ
AS
AC
AV
AN
AZ
Стек счетчика COUNT содержит переменную CNTR для организации цикла без указания в программе условия его завершения. Необходимо лишь задать начальное значение счетчика CNTR, например, CNTR=10. Каждый цикл программы автоматически уменьшает содержимое счетчика на единицу. После 10 циклов, когда счетчик обнулится, процессор продолжит линейное выполнение программы. В систему команд процессора входят многофункциональные команды, использующие параллельное выполнение действий различными блоками. Примером такого типа команд является следующая инструкция, которая выполняется за один цикл MR=MR+MX0*MY0(SS), MX0=DM(I0,M0), MY0=PM(I4,M5); Первая часть команды (до первой запятой) помещает в регистр результата MR блока МАС сумму предыдущего значения регистра и произведение текущих значений входных регистров Х и Y (МХ0 и МY0), данные в которых воспринимаются процессором как числа со знаком SS, где S – первая буква слова sign (знак). Во второй и третьей части команды процессор читает из памяти два новых операнда и запоминает их в регистрах МХ0 и МY0. В регистр МХ0 заносится значение из ячейки памяти данных (DM) с номером I0, в регистр МY0 – из ячейки памяти программ (РМ) с номером I4. После записи чисел в регистры значение переменной I0 увеличивается на М0, а I4 соответственно – на М5.
34
3.2. Режимы работы микросхемы ADSP-2189M Выводы микросхемы ADSP-2189M (рис. 20), образующие системный интерфейс, позволяют подключать к процессору микросхемы внешней памяти с учетом модифицированной Гарвардской архитектуры, а также
порты вво-
да/вывода для обмена данными с внешними устройствами. Сигнальный процессор может работать в одном из двух вариантов организации памяти – полном и хост-режиме. Назначение сигналов микросхемы процессора определяется выбранным режимом работы. Во время выполнения программы процессор может поочередно обращаться к четырем различным областям внешней памяти с помощью индивидуальных выходных сигналов шины управления BMS , PMS , DMS и IOMS (табл. 3). Таблица 3. Сигналы шины управления процессора для внешней памяти Выходной сигнал процессора
Область внешней памяти
BMS
Байтовая память
PMS
Память программ (оверлейная)
DMS
Память данных (оверлейная)
IOMS
Порты ввода/вывода
При совместном использовании нескольких областей процессор дополнительно выводит сигнал CMS . Например, если в оверлейной памяти размером 32 килослова необходимо хранить программы и данные, то процессор формирует выходной сигнал CMS . Индивидуальные сигналы PMS , DMS в этом случае используются как дополнительные адресные сигналы для внешней микросхемы памяти оверлея, которые определяют область программ и область данных соответственно. В зависимости от типа выполняемой процессором команды на выводах микросхемы ADSP-2189 формируются активные низкие уровни
35
Последовательный порт SPORT0
Последовательный порт SPORT1
Порт эмулятора EZ-ICE
Шина управления
Тактовый генератор Внешние прерывания/ двунаправленный порт
35 33 32 31 34 42 39 38 37 40 53 51 50 49 48 47 46 45 43
SCLK0 RFS0 TFS0 DT0 DR0 SCLK1 RFS1 TFS1 DT1 DR1
D23 D22 D21 D20 D19 D18 D17 D16 D15 D14 D13 D12 D11 D10 D9 D8 D7/IWR D6/IRD D5/IAL D4/IS D3/IACK D2/IAD15 D1/IAD14 D0/IAD13
44 RESET 96 PWDACK 91 PWD 14 XTAL 13 CLKIN 16 CLKOUT 30 IRQ2/PF7 29 IRQL1/PF6 27 IRQL0/PF5 26 IRQE/PF4
Шина управления Источники питания
36 VDDEXT 18 VDDINT 3 GND
Выходной порт флагов
DSP
EBG EBR EINT ELIN ELOUT ECLK EE EMS ERESET
88 MODE_D/PF3 89 MODE_C/PF2 93 MODE_B/PF1 94 MODE_A/PF0 85 FL2 86 FL1 87 FL0 52 BR 95 BGH 54 BG
Режим работы процессора/двунаправл енный порт
A13/IAD12 A12/IAD11 A11/IAD10 A10/IAD9 A9/IAD8 A8/IAD7 A7/IAD6 A6/IAD5 A5/IAD4 A4/IAD3 A3/IAD2 A2/IAD1 A1/IAD0 A0
ADSP 2189M
WR RD CMS IOMS BMS DMS PMS
11 10 9 8 7 6 5 4 2 1 100 99 98 97 84 83 82 81 79 78 77 76 75 74 73 72 70 69 68 65 64 63 62 61 58 57 56 55 19 20 25 24 21 22 23
Шина адреса/данных
Шина данных
Шина управления
Рис. 20. Выводы микросхемы ADSP-2189M в корпусе LQFP100
36
CMS , PMS при обращении к внешней памяти программ или CMS , DMS при
обращении к внешней памяти данных. С помощью сигнала шины управления в микропроцессорной системе можно организовать любую комбинацию совместного использования четырех областей – байтовой памяти, памяти программ, памяти данных и портов ввода-вывода. Количество используемых областей определяется программно в регистре 0x3FE6 при начальной инициализации системных переменных и должно соответствовать применяемой электрической схеме. Сигнальный процессор может работать в одном из двух вариантов организации памяти – полном и хост-режиме. Выбор варианта определяется состоянием сигнала MODE C на входе процессора во время сброса системы. В полном режиме (Full Memory Mode) максимально используются внешние шины данных и адреса микросхемы (рис. 21). Внутренний порт прямого доступа к паГенератор ½х или резонатор
CLKIN XTAL
А13 : 0
FL0: 2
D23 : 0
IRQ2/PF7 IRQL1/PF6 7IRQL0/PF5 7IRQE/PF4 MODE D/PF3 MODE C/PF2 MODE B/PF1 MODE A/PF0
14 ADDR 24
D23:16
A21 : 0 D15:8 BMS
DATA
Байтовая память
CS
WR RD A10:0 BMS IOMS PMS DMS CMS
D23:8 IOMS
ADDR DATA CS
Порты ввода/ вывода
SPORT Последовательное устройство
SCLK0 RFS0 TFS0 DT0 DR0
А13:0 BR BGH BG
Последовательное устройство
PMS DMS CMS
SPORT SCLK1 RFS1/IRQ0 TFS1/IRQ1 DT1/FI DR1/FO
D23:0
ADDR Оверлейная DATA память 2×8к сегменты РМ 2×8к сегменты DМ
PWD PWDACK
Рис. 21. Полный режим работы процессора (MODE C = 0)
37
мяти IDMA в этом случае не доступен. Подключение внешних микросхем памяти и портов ввода-вывода выполняется с помощью 24-разрядной шины данных D23:0, 14-разрядной шины адреса А13:0, 5 сигналов выбора области памяти PMS , DMS , BMS , IOMS , CMS . Микросхемы памяти с байтовой шиной данных подключаются к процессору через байтовый порт прямого доступа BDMA (рис. 22) с 22-разрядной шиной адреса, обеспечивающей работу микросхем памяти общей емкостью до 4 Мбайт. Кроме сигналов A13:0 для увеличения разрядности адресной шины дополнительно используются 8 бит шины данных D23:16. Контроллер байтового обмена поддерживает 8- и 16-разрядный формат слов при обращении к памяти данных, а также 24-разрядную организацию слов внутренней памяти программ ADSP2189M.
14 A13:0
ADSP2189M D23:16
22 8 Шина
адреса
8 D15:8
BMS RD WR
A21:0
Шина данных Выбор кристалла Чтение Запись
D7: 0
Байтовая память 4М×8
CS OE WE
Рис. 22. Порт прямого доступа к памяти BDMA
Контроллер BDMA выполняет начальную загрузку программы в процессор из микросхемы внешней памяти и ее запуск. Обмен данными между внешней и внутренней памятью процессора может происходить в фоновом режиме во время выполнения основной программы. Регистр BIAD используется для задания начального адреса блока внутренней процессорной памяти, участвующего в обмене. Стартовый адрес внешней памяти хранится в регистре BEAD. Ко38
личество передаваемых слов одного блока записывается в регистр BWCOUNT перед началом обмена. Содержимое этого счетчика автоматически уменьшается на единицу после каждого переданного слова. Контроллер прямого доступа к памяти заканчивает обмен при обнулении регистра-счетчика BWCOUNT и вырабатывает сигнал прерывания. Внешняя байтовая память может состоять из микросхем ПЗУ и ОЗУ, в которых хранятся программы и данные. Обмен через порт прямого доступа BDMA происходит с помощью слов выбранного формата (от 8 до 24 бит ) и страниц фиксированного размера. Байтовая память состоит из 256 страниц, каждая из которых имеет емкость 16к × 8 бит. Адресные сигналы процессора D23:16 определяют номер страницы, сигналы A13:0 - номер ячейки внешней памяти в пределах выбранной страницы. Номер страницы, формат данных, направление обмена, разрешение работы процессора во время прямого доступа к памяти – эти параметры устанавливаются отдельными битами в регистре управления BDMA Control. D23:16
Адрес
ПЗУ
A13:0 Данные
D15:8 RD
8
Чтение
ОЗУ или FLASH
A22:0
A22:0
D7:0
D7:0
OE
Запись
WR BMS
OE WE CS
CS
CMS
Рис. 23. Подключение к процессору микросхем памяти ПЗУ и ОЗУ
Если в микропроцессорной системе применяются внешние микросхемы постоянной и оперативной памяти, то сигнал шины управления сигнального
39
процессора BMS подается на вход выбора кристалла CS ПЗУ, сигнал CMS – на вход CS ОЗУ (рис. 23). Тем самым обеспечивается непосредственное соединение микросхем памяти и процессора без дополнительных микросхем дешифрации адреса, необходимых в универсальных процессорах. Системный интерфейс допускает управление шинами со стороны внешнего устройства. Когда периферийное устройство формирует импульс запроса BR на прямой доступ к внутренней памяти процессора, то в следующем командном цикле шина данных, адреса и семь выводов шины управления PMS , DMS , BMS , CMS , IOMS , RD , WR переводятся в высокоомное Z-состояние,
если они не были заняты в это время обменом с внешней памятью. Затем процессор вырабатывает ответный сигнал подтверждения BG , информирующий запросившее устройство о том, что шины освобождены, и останавливает выполнение программы на время обмена. Последовательные порты SPORT0 и SPORT1 обеспечивают подключение сигнального процессора к большинству стандартных последовательных устройств. Они поддерживают передачу данных словами от 3 до 16 бит и аппаратное сжатие информации с помощью А- или μ-закона компандирования. Порт SPORT0 может также работать в режиме многоканальной передачи данных 24или 32-разрядными словами при обмене с последовательными ЦАП и АЦП. Для уменьшения количества выводов и размеров корпуса микросхемы некоторые сигналы процессора мультиплексируются. Два последовательных порта, внешние прерывания, шины адреса, данных и управления используют выводы микросхемы ADSP-2189M, назначение которых меняется в различных режимах работы процессора (рис. 24). В полном режиме входной сигнал управления MODE C равен нулю, через выводы мультиплексора проходят адресные сигналы A13:0 и три младших разряда шины данных D2:0. Противоположный уровень управляющего сигнала MODE C = 1 пропускает через мультиплексор другую группу сигналов – IAD 15:0. 40
ADSP-2189M IAD 15: 0
Порт IDMA 16
Программный счетчик
A 13 : 1
Регистр данных
D2 : 0
A 13 : 1, D2 : 0/ IAD 15: 0
Мультиплексор 13
16
3
MODE C
Рис. 24. Мультиплексирование 16 выводов процессора сигналом MODE C
Второй вариант организации памяти при MODE C = 1 ориентирован на многопроцессорную систему (рис. 25). Хост-интерфейс позволяет без дополнительных микросхем взаимодействовать с хост-процессором системы, в качестве которого может использоваться как процессор семейства ADSP-21xx, так и другой микропроцессор, например, Motorola 68000 или Intel 8051. Хост-интерфейс выполнен в виде 16-разрядного параллельного порта IDMA с прямым доступом к оперативной памяти программ сигнального процессора. Кроме сигналов параллельной шины адреса/данных IAD 15:0 внутренний порт прямого доступа к памяти IDMA содержит 5 управляющих сигналов IWR , IRD , IAL, IS , IACK (табл. 4). Обмен информацией происходит с муль-
типлексированием во времени сигналов IAD 15:0. При активном уровне управляющего сигнала IAL вначале по шине передается 14-разрядный адрес ячейки памяти. Затем по мультиплексируемой шине IAD 15:0 выполняется цикл записи или чтения данных, синхронизируемый сигналом IWR или IRD соответственно. Как и в случае байтовой памяти BDMA, порт IDMA позволяет вести обмен данными в фоновом режиме во время выполнения сигнальным процессором основной программы.
41
CLKIN XTAL
Генератор ½х или резонатор
ADSP-2189M
FL0: 2 IRQ2/PF7 IRQL1/PF6 7IRQL0/PF5 7IRQE/PF4 MODE D/PF3 MODE C/PF2 MODE B/PF1 MODE A/PF0
А0
1 16
D23 : 8 WR RD BMS IOMS PMS DMS CMS
SPORT Последовательное устройство
SCLK0 RFS0 TFS0 DT0 DR0
Последовательное устройство
SCLK1 RFS1/IRQ0 TFS1/IRQ1 DT1/FI DR1/FO
Микропроцессор
IRD/D6 порт IWR/D7 IS/D4 IAL/D5 IACK/D3 IAD15:0
BR BGH BG
SPORT PWD PWDACK
IDMA-
16
Рис. 25. Хост-режим процессора ADSP-2189M
Устройство, подключенное к порту IDMA, начинает передачу или прием данных с анализа сигнала IACK . Если процессор готов к работе в режиме прямого доступа к памяти, то хост формирует сигналы IS , IAL для передачи стартового адреса внутренней памяти ADSP-2189M в регистр управления порта. Устройство записывает ( IWR , IS ) или читает ( IRD , IS ) одно слово и ждет подтверждения завершения операции, анализируя уровень сигнала IACK . Закончив обмен блока данных, хост переводит IS в высокое пассивное состояние.
42
Таблица 4. Назначение выводов процессора в хост-режиме (при MODE C = 1) Сигнал
Количество
Направление
Функция
выводов
Вход/выход Шина адреса/данных порта IDMA
AD15:0
16
IWR
1
Вход
Разрешение записи в порт IDMA
IRD
1
Вход
Разрешение чтения из порта IDMA
IS
1
Вход
Выбор порта IDMA
IACK
1
Выход
IAL
1
Вход
A0
1
Выход
D23:8
16
Подтверждение порта IDMA Синхронизация адреса на шине IAD15:0 Адрес внешнего устройства, оверлея, порта BDMA
Вход/выход Данные внешнего устройства, оверлея, порта BDMA
В хост-режиме разрешен доступ ко всей внутренней памяти ADSP-2189M за исключением 32 регистров управления, расположенных во внутренней памяти данных. Внешняя оверлейная память управляется только одним адресным сигналом А0 и выполнение программ из этой области невозможно из-за того, что в этом режиме шина данных ограничена шестнадцатью разрядами D23:8. Начальная загрузка программы, выполняемой процессором, зависит от уровней сигналов на четырех входах управления MODE A, MODE B, MODE C, MODE D во время сброса системы (табл. 5). После окончания импульса сброса на входе RESET начинается начальная загрузка памяти процессора в соответствии с выбранным режимом работы при условии, что она предусмотрена сочетанием указанных четырех сигналов управления. По окончании предварительной записи начинает выполняться программа с команды, расположенной по нулевому адресу 0х0000. Входы управления MODE позволяют пользователю выбрать полный режим или хост-режим памяти системы с помощью сигнала MODE C, начальную загрузку - из микросхемы ППЗУ байтовой памяти или из подключенного к порту IDMA процессора (MODE A), мультиплексирование сигналов на шине управления и флагов (MODE D). При D = 0 выводы MODE/PF используются
43
Таблица 5. Режимы начальной загрузки процессора Режим работы
MODE D MODE C MODE B MODE A x
0
0
0
х
0
1
0
0
1
0
0
0
1
0
1
1
1
0
0
1
1
0
1
Полный режим. Перед выполнением программы процессор читает первые 32 слова из порта BDMA Полный режим. Начальной загрузки нет. Программа стартует с нулевого адреса внешней памяти. Хост-режим. Перед выполнением программы процессор читает первые 32 слова из порта BDMA Хост-режим. Перед выполнением программы процессор записывает во внутреннюю память произвольное количество слов из порта IDMA. Хост-режим. Перед выполнением программы процессор читает первые 32 слова из порта BDMA Хост-режим. Перед выполнением программы процессор записывает во внутреннюю память произвольное количество слов из порта IDMA1.
процессором как входы управления MODE только во время импульса сброса RESET . После окончания импульса при выполнении программы они переклю-
чаются и служат входами или выходами флагов PF. Например, вывод MODE C мультиплексируется и после сброса системы применяется в качестве сигнала PF2. Если D = 1, то переключение не выполняется и выводы MODE/PF могут использоваться только как сигналы управления MODE при выполнении программы. Альтернативное применение функций этих сигналов в данном случае невозможно. 3.3. Подключение устройств к сигнальному процессору Внешние устройства (клавиатура, индикаторы, кнопки и т.п.) могут подключаться непосредственно к восьми программируемым выводам процессора – флагам общего назначения PF0:7. В регистр PFTYPE необходимо записать восемь бит, чтобы определить направление сигнала по отдельному флагу (рис. 26). Разряды 15-8 используются портом BDMA и для задания конфигурации
1
Отличается от MODE D = 0 другим способом формирования сигнала управления J
44
внешней памяти, 7 соответствует выводу микросхемы PF7, разряд 0 – выводу PF0. Запись нуля в разряд i настраивает соответствующий сигнал PFi на ввод, запись единицы – на вывод. 6 младших разрядов PF настроены на вывод, 2 старших – на ввод. При инициализации программы в регистр PFTYPE занесено двоичное число 00111111. Следовательно, флаги PF7 и PF6 определены как входы, PF5PF0 – выходы. Формирование выходных сигналов и чтение входов флагов выполняется с помощью регистра
PFDATA (рис. 27). Содержимое регистра
PFDATA при чтении флагов обновляется синхронно с частотой тактовых импульсов процессора CLKOUT. Те флаги, которые запрограммированы и работают на вывод данных, при выполнении команды чтения регистра возвращают значения выходных сигналов. Номер разряда байта PFDATA соответствует номеру флага PF. Во время сброса программируемые флаги устанавливаются по умолчанию на ввод данных. Необходимо запретить прерывания IRQ2, IRQE, IRQL0 и IRQL1 с помощью регистра IMASK, чтобы разрешить прохождение сигналов PF4-PF7.
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
CMSSEL
BMWAIT
DM(0x3FE6)
PFTYPE
Рис. 26. Программирование регистра флагов PFTYPE
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0 DM(0x3FE5)
не используются
PFDATA
Рис. 27. Запись и чтение регистра флагов PFDATA
45
Кроме программируемых входов/выходов общего назначения микросхема процессора содержит пять флагов FL0, FL1, FL2, FO и FI, предназначенных для создания многопроцессорных систем и работающих всегда в одном направлении: FL0, FL1, FL2, FO – выходы, FI – вход. Сигналы FO и FI могут использоваться, если в системе не задействован последовательный порт SPORT1. Выбор флагов FO, FI или порта SPORT1 выполняется с помощью бита 10 в регистре управления системой, расположенном по адресу 0x3FFF. Cостояние входного сигнала FI анализируется и учитывается в программе во время исполнения ассемблерной
команды условного перехода “if
FLAG_IN” или “if not FLAG_IN”. В зависимости от уровня сигнала на входе FI условие выполняется или не выполняется, процессор переходит на разные участки программы. Флаг устанавливается (FLi = 1) командой SET, сбрасывается (FLi = 0) командой RESET. Примеры команд на языке ассемблера, работающих с флагами FLi и программируемыми флагами PFi, приведены в листинге 1. В одной строке располагается одна команда, которая заканчивается точкой с запятой. Комментарии выделяются с помощью символов /*, */. переменные регистров
Системные
PFTYPE и PFDATA должны быть объявлены в под-
ключаемом файле-заголовке с расширением h. Листинг 1
Формирование флагов процессора
ax0 = 0xFF3F ; dm(PFTYPE) = ax0 ; /* 0xFF3F = 1111 1111 0011 1111, PF7, PF6 – входы, PF5-PF0 – выходы */ /* в регистре PFTYPE задано направление сигналов на выводах PF7-PF0 */ ax0 = 0x0С ; dm(PFDATA) = ax0 ; /* 0x0С = 0000 1100 */ /* в регистр PFDATA записано число, формирующее сигналы PF5=PF4=P1=PF0=0, PF3= PF2=1 */ SET FL2; /* установить флаг FL2, т.е. вывести на вывод FL2 напряжение логической единицы */ RESET FL0; /* сбросить флаг FL0, т.е. вывести на вывод FL0 напряжение логического нуля */ IF FLAG_IN JUMP MET1 ; /* если FI = 1, то уйти на метку MET1 */ IF MV SET FLAG_OUT, RESET FL1 ; /* если MV = 1 (переполнение МАС), то FO = 1, FL1 = 0 */ MET1: RESET FL2 ; /* FL2 = 0 */
46
Порты ввода/вывода с 16-разрядной шиной данных и 11-разрядной шиной адреса А10:A0 позволяют подключить к процессору до 2048 (211) внешних устройств. Каждому порту ввода/вывода соответствует свой адрес. Множество адресов портов занимает целочисленный диапазон от 0 до 211 – 1, каждый порт используется в программе независимо от других. В отличие от флагов процессора подключение внешнего устройства к порту требует применения дополнительных микросхем для дешифрации адреса, запоминания выводимых данных и коммутации вводимых данных. Обмен данными через порт происходит с помощью команды ввода/вывода IO, аналогичной команде обращения к памяти микропроцессорной системы. Пример схемы подключения двух внешних устройств через однонаправленные порты приведен на рис. 28. Первый параллельный 16-разрядный порт, состоящий из дешифратора адреса 1 и регистра памяти, работает только на вывод. К нему можно подключить 16-разрядный цифро-аналоговый преобразователь, индикатор и другие устройства вывода с параллельной шиной данных. Предположим, что первый дешифратор настроен на адрес 0x1FF. Для вывода данных потребуется следующие две команды ax0 = 0x1234;
/* запись числа в регистр процессора, ax0 = 0001 0010 0011 0100b */
IO(0x1FF) = ax0; /* вывод содержимого регистра ax0 в порт 0x1FF */
.
Во время выполнения команды вывода информации на порт IO(0x1FF) процессор формирует активные низкие уровни сигналов IOMS , WR на шине управления, двоичный код 001 1111 1111 – на шине адреса А10:A0. Одновременная подача перечисленных сигналов меняет выходной сигнал дешифратора и вызывает запись данных во внешний регистр RG с помощью сигнала синхронизации С. Поступивший с шины данных ADSP-2189M код 0001 0010 0011 0100 проходит с входов DI на выходы параллельного регистра DO и запоминается на выходе порта до следующего обращения к нему. Входной порт содержит дешифратор адреса 2 и шинный формирователь BD. Когда процессор не выполняет команду чтения данных входного порта,
47
ADSP-2189M CPU
Регистр
WR
Дешифратор адреса 1
11 A10-A0
С
RG 16 DO
IOMS
Внешнее устройство 1
16
D23:8
DI 16 DO BD 16 11
RD
Дешифратор адреса 2
DI OE
Внешнее устройство 2
Шинный формирователь
Рис. 28. Однонаправленные порты ввода/вывода
шинный формирователь находится в высокоомном Z-состоянии. Выходы формирователя DO отключены от входов двунаправленной шины данных процессора. Ввести информацию с порта можно одной ассемблерной командой ax0 = IO (0х1FE),
где 0х1FE - пример адреса входного порта, на который настроен второй дешифратор. При выполнении команды ввода IO(0х1FE) шинный формирователь выходит из Z-состояния. Выходные сигналы второго внешнего устройства подключаются через формирователь к параллельной шине данных процессора D23:8 и запоминаются во внутреннем 16-разрядном регистре ах0. Для синхронизации работы ADSP-2189M внутренним или внешним генератором используются выводы микросхемы XTAL, CLKIN, CLKOUT. Если тактирование выполняется внешним генератором, то его выходной ТТЛ-сигнал с частотой 37.5 МГц подается на вход процессора CLKIN, вывод XTAL должен быть свободным и не подключенным ни к плюсу источника питания, ни к общей точке схемы. Внутри микросхемы частота удваивается, образуя тактовую частоту 75 МГц. Большинство команд процессор выполняет за один команд48
ный цикл, равный периоду тактовой частоты 13.3 нс. Выходной сигнал CLKOUT меняется с тактовой частотой 75 МГц. Вместо внешнего генератора для синхронизации процессора можно использовать внутренний генератор тактовой частоты (рис. 29). Частота встроенного тактового генератора задается кварцевым резонатором BQ, который подключается между выводами CLKIN и XTAL по схеме параллельного резонанса. Емкость внешних конденсаторов С1, С2 зависит от типа резонатора и определяется его изготовителем. 16
C1 13 C2
BQ
14
CLKIN
ADSP-2189M
CLKOUT
XTAL
Рис. 29. Работа процессора от внутреннего генератора тактовой частоты
Напряжение источника питания можно подавать на микросхему ADSP2189M двумя способами. Допускается использование одного источника номиналом 2.5 В или двух источников, один из которых обеспечивает напряжением 2.5 В ядро процессора, другой с напряжением 3.3 В применяется для периферийной части микросхемы (рис. 30). +2.5 В ВНУТР
+3.3 В ВНЕШН С
10 мкФ
VCC ADM708SAR RESET GND
VDDEXT VDDINT
ADSP-2189M
Сброс
RESET
GND
Рис. 30. Цепи питания и сброса процессора при включении питания
49
В табл. 6 приведены допустимые отклонения напряжений от номинальных значений для двух вариантов температурного исполнения процессора. Входное напряжение логической единицы и логического нуля должно находиться в диапазоне U1 ВХ = 1.5 … 3.3 В, U0 ВХ = 0 … 0.6 В. Для сигнала синхронизации CLKIN напряжение U1 ВХ = 2.0 … 3.3 В. Изготовитель микросхемы гарантирует, что минимальное выходное напряжение логической единицы составляет
U1ВЫХ MIN = 2.0 В при минимальном напряжении питания UVDDEXT.
Если UVDDEXT = 3.0 В, то минимальное выходное напряжение U1ВЫХ MIN = 2.4 В соответствует уровню ТТЛ-микросхем. Необходимо учитывать, что выходы процессора выполнены по КМОП-технологии и не допускают подключения нагрузки с постоянным током.
Номинальный ток потребления от источника
питания составляет 36 мА,
в режиме пониженного энергопотребления он
уменьшается до 150 мкА. Входной ток одного вывода процессора составляет 10 мкА. Таблица 6. Предельные электрические параметры ADSP-2189M Параметр
Класс К диапазон Т = 0 … +70°С минимум
максимум
Класс В диапазон Т = -40 … +85°С минимум
максимум
Напряжение UVDDINT, В
2.37
2.63
2.25
2.75
Напряжение UVDDEXT, В
2.37
3.6
2.25
3.6
Входное напряжение, В
-0.3
3.6
-0.03
3.6
Глава 4. ПЕРИФЕРИЙНЫЕ МИКРОСХЕМЫ ПРОЦЕССОРА 4.1. Встроенная и внешняя память Процессор имеет встроенный контроллер прямого доступа для подключения внешних микросхем памяти, если 32К слов внутрикристальной памяти программ и 48К слов данных оказывается недостаточным. Восьмибитный порт 50
прямого доступа к памяти BDMA (Byte DMA) обеспечивает подключение микросхем памяти ПЗУ или ОЗУ с байтовой организацией емкостью до 4 Мбайт (рис. 31). Данное адресное пространство играет роль загрузочной области (boot memory). Байтовая память имеет организацию 256 страниц по 16К×8 бит. Для увеличения разрядности шины адреса кроме 14 сигналов А13-А0 программного счетчика в контроллере используются дополнительно 8 сигналов шины данных D23-D16. Общее количество адресных сигналов, равное 22, определяет максимальную емкость внешней памяти 222 = 4М, которую можно подключить к порту BDMA для хранения программ и данных. Контроллер обеспечивает передачу слова за один цикл и поддерживает начальную загрузку процессора при включении напряжения питания. ПЗУ или ОЗУ 14 ADDR 13 - 0 A13-A0
A21-A0 8
D23-D16 8 DATA 23 - 0
D7-D0 D15-D8
RD
OE
WR
WE
BMS
CS
ADSP-2189M Оверлейная память 14 ADDR A13-A0 8 DATA D23-D0 PMS
16К для программ
DMS
16К для данных
CMS
Рис. 31. Использование внешней памяти
51
Выходные сигналы процессора RD и WR определяют направление передачи по шине данных. Сигнал шины управления RD организует чтение данных, поступающих от микросхемы памяти, сигнал WR – запись данных во внешнюю микросхему памяти. В обоих случаях обмен выполняется между встроенной памятью процессора и внешней микросхемой. Сигнал BMS используется для включения и отключения Z-состояния внешней памяти. Высокий уровень сигнала BMS на выходе процессора переводит микросхему ПЗУ или ОЗУ в высокоомное (Z) состояние для отключения шины данных и шины адреса от соответствующих шин процессора DATA и ADDR. Низкий уровень BMS = 0 переводит внешнюю память в активное состояние, в котором контроллер процессора выполняет операции чтения и записи по двунаправленной шине данных, используя поочередно сигналы RD , WR . Обмен с внешней микросхемой памяти контроллер BDMA выполняет в фоновом режиме одновременно с выполнением секвенсором основной программы. Формат данных, передаваемых и принимаемых по шине DATA, автоматически определяется типом внутренней памяти. При обращении к памяти программ РМ длина слова составляет 24 бита, при выполнении обмена с памятью данных длину слова можно задать программно размером в 16 или 8 бит. 14-разрядный регистр BWCOUNT выполняет функцию счетчика переданных слов. Перед обменом по интерфейсу BDMA в счетчик программно записывается число слов для обмена. Контроллер уменьшает содержимое BWCOUNT на единицу после каждого переданного слова. Обмен данными завершается по условию BWCOUNT = 0. Максимальный размер одного блока данных составляет 214 = 16К слов. При запуске процессора по умолчанию в регистр записывается число 32. Это означает, что для начальной загрузки в процессор будет считано 32 слова из внешней микросхемы ПЗУ, которые используются для настройки контроллера BDMA на прием оставшейся части программного кода ПЗУ. Затем процессор начинает выполнение программы с адреса 0.
52
Разрядность программного счетчика (14 бит) позволяет процессору формировать 14 сигналов А13-А0 на шине адреса как для внутренней, так и внешней памяти. Это ограничивает максимальный размер исполняемого кода PM и данных DM до 214 = 16К слов. Чтобы преодолеть данное ограничение в процессоре используется оверлейный механизм для работы с программами, размер которых больше 16К слов. Расширение адресного пространства выполняется с помощью регистров процессора PMOVLAY (program memory overlay) и DMOVLAY (data memory overlay). Число, записанное в оверлейные регистры, используется процессором для выбора одной из нескольких страниц памяти размером по 8К слов памяти программ и 8К слов памяти данных. В указанные регистры необходимо программно записать одно из значений ряда 0,1,2,4,5,6,7. Страницы оверлея можно менять в ходе выполнения программы, но процессор может работать в определенный момент времени только с одной страницей. Распределение номеров сегментов оверлея между внутренней и внешней памятью для одного из возможных режимов процессора приведено на рис. 32. Внешняя память программ и данных может использовать только страницы 1 и 2.
Память программ РМ оверлеи 0,4,5 для внутренней памяти РМ оверлеи 1,2 для внешней памяти
адрес 0х3FFF 0х3FE0 0х3FDF
0х2000 0х1FFF
Внутренняя память программ РМ 0х0000
Память данных 32 регистра управления Внутренняя память данных DМ DМ оверлеи 0,4,5,6,7 для внутренней памяти DМ оверлеи 1,2 для внешней памяти
Рис 32. Структура памяти в режиме В = 0
53
Секвенсор и генераторы адреса используют абсолютный адрес текущей выполняемой команды и не контролируют состояние регистров PMOVLAY, DMOVLAY. Неправильное изменение сегментов оверлея в командах безусловного перехода и при вызове процедур может привести к сбою программы. Во время обращения к внешней памяти регистры управляют состоянием разряда А13 шины адреса. Если в регистр PMOVLAY записана единица, то выходной сигнал процессора А13 = 0, при PMOVLAY = 2 адресный сигнал А13 = 1. Не следует путать оверлейную память со страничной памятью, которая используется в универсальных процессорах Pentium. Загрузка оверлейного сегмента происходит под контролем программиста, в то время как распределением и загрузкой страниц в процессорах Pentium управляет операционная система. Оверлеи можно считать средством принудительного управления распределением памяти. 4.2. Последовательный кодек AD73322 Двухканальный кодек AD73322 с последовательным интерфейсом содержит 16-разрядные ЦАП И АЦП в одной микросхеме (рис. 33) и предназначен для приложений общего применения, включая обработку речи и телефонию. Каждый канал обеспечивает отношение сигнал/шум 77 дБ во всей полосе речевого сигнала. Усиление каналов АЦП и ЦАП программируется до 38 дБ и 21 дБ соответственно. При частоте внешнего генератора 16,384 МГц кодек формирует сигналы на выходе сигма-дельта АЦП и ЦАП с частотой дискретизации 64 кГц, 32 кГц, 16 кГц и 8 кГц. Одна из четырех перечисленных частот выбирается программно при начальной инициализации AD73322, когда процессор записывает числа в регистры управления A-H для выбора режима работы и установки параметров кодека.
54
Uвх1
ΣΔ АЦП Канал 1
16
Uвых1
ΣΔ ЦАП Канал 1
16
ΣΔ АЦП Канал 2
16
ΣΔ ЦАП Канал 2
16
VFBP1
Последовательный выход SDO
VOUT1
Uвх2
VFBP2
Uвых2
VOUT2
Последовательный интерфейс
SDI
Делитель частоты
Регистры управления Внешний генератор
Последовательный вход
A, B, C, D, E, F, G, H
SCLK
Битовая синхронизация SDOFS SDIFS
Кадровая синхронизация
MCLK
Рис. 33. Кодек AD73322 с последовательным интерфейсом
Последовательный интерфейс позволяет подключить одно или несколько устройств в соответствии с промышленным DSP стандартом, в том числе и сигнальные процессоры семейства ADSP-218х. Схема подключения кодека к процессору и внешнему генератору приведена на рис. 34. Напряжения аналоговых сигналов Uвх1 и Uвх2, подаваемые на входы VFBP1 и VFBP2 первого и второго каналов микросхемы кодека AD73322, преобразуются с помощью АЦП1 и АЦП2 в пропорциональные 16-разрядные двоичные числа и передаются последовательным кодом с выхода SDO (Serial Data Output) на вход DR (Data Read) последовательного порта SPORT сигнального процессора (рис. 35). Промежуток времени, который отводится порту на прием бита, определяется одним периодом сигнала битовой синхронизации SCLK. В начале каждого пакета данных из 16 бит кодек формирует импульс кадровой синхронизации SDOFS (SDO Framing Signal), от которого порт процессора начинает счет поступающих от АЦП бит. Для передачи двух 16-разрядных слов АЦП первого и второго каналов кодеку необходимо сформировать 32 им-
55
пульса битовой синхронизации SCLK и 2 импульса кадровой синхронизации SDOFS. Время передачи двух слов не должно превышать период дискретизации аналогового сигнала TS. Процессор ADSP-2189M
Кодек AD73322 Аналоговые сигналы кодека 1
TFS П о р т S P O R T
SDIFS Кодек 1
DT
SDI
SCLK
SCLK
DR
SDO
RFS
SDOFS 3B
10 к
SE
VOUT1 VFBP1
МCLK
Кодек 2
Генератор 16,384 МГц VOUT2 VFBP2
Аналоговые сигналы кодека 2
Рис. 34. Внешняя синхронизация приемника и передатчика порта SPORT
SCLK t SDOFS t SDO Слово АЦП канала 2
Слово АЦП канала 1
t
SDIFS t SDI Слово ЦАП канала 1
Слово ЦАП канала 2
t
Рис. 35. Тактирование сигналов при обмене данными между кодеком и процессором
56
Одновременно с приемом данных от АЦП процессор передает два 16разрядных слова в ЦАП двух каналов кодека. Принятые 32 бита автоматически записываются в регистр RX0 порта SPORT0 или RX1 порта SPORT1 – в зависимости от того, к какому последовательному интерфейсу подключена микросхема AD73322. Формирование сигнала SСLK показано на рис. 36. МСLK 16,384 МГц
Делитель частоты МСLK
DМСLK
SСLK
Делитель 1 частоты DМСLK
Битовая частота
Делитель 2 частоты DМСLK Частота FS MCD2 MCD1
MCD0
SCD1
SCD0
DIR1
DIR0
Регистр управления В
Рис. 36. Программное управление сигналом кодека SСLK
Программируемый делитель частоты внешнего генератора, подключенного ко входу кодека МСLK, может задать один из пяти коэффициентов деления 1, 2, 3, 4 и 5. Выбор коэффициента деления определяется
разрядами 4-6 регистра
управления В при формировании внутреннего сигнала DМСLK (табл. 7). По умолчанию устанавливается коэффициент деления 1 : 1. Второй программируемый делитель частоты микросхемы AD73322 определяет частоту выходного сигнала SСLK с помощью бит 2-3 регистра В (табл. 8). Частота дискретизации аналогового сигнала FS определяется битами 0-1 регистра В и может
принимать 4 значения: DMCLK/256, DMCLK/512,
DMCLK/1024 и DMCLK/2048 (табл. 9). После включения питания процессора по
умолчанию
устанавливается
минимальная
FS=DMCLK/2048 = 8 кГц.
57
частота
дискретизации
Таблица 7. Установка внутренней частоты DMCLK MCD2
MCD1
MCD0
Коэффициент
(бит 6)
(бит 5)
(бит 4)
деления MCLK
0
0
0
1:1
0
0
1
1:2
0
1
0
1:3
0
1
1
1:4
1
0
0
1:5
1
0
1
1:1
1
1
0
1:1
1
1
1
1:1
Таблица 8. Программная установка частоты сигнала SCLK SCD1
SCD0
Коэффициент
( бит 3)
( бит 2)
деления DMCLK
0
0
1:8
0
1
1:4
1
0
1:2
1
1
1:1
Таблица 9. Программирование частоты дискретизации FS DIR1
DIR0
Коэффициент
( бит 1)
( бит 0)
деления DMCLK
0
0
1 : 2048
0
1
1 : 1024
1
0
1 : 512
1
1
1 : 256
Для передачи двух слов длиной 32 бита в каждом направлении с битовой частотой
FSCLK = 2,048 МГц, принятой по умолчанию, необходимо время
15,625 мкс. Это время намного меньше периода дискретизации TS = 125 мкс.
58
Частоты кодека, рассмотренные в примере, соответствуют такому состоянию регистра управления В, при котором во всех его разрядах записаны нули. Обнуление всех управляющих регистров кодека происходит автоматически при поступлении сигнала низкого уровня на вход сброса RESET. Значения, отличные от принятых по умолчанию, записываются в программе пользователя при начальной инициализации. Для этого процессору необходимо передать в кодек от 8 до 16 управляющих 16-разрядных слов в зависимости от выбираемого режима кодека. Частота битовой синхронизации и коэффициенты деления выбираются из условия: (количество слов) × (размер слова) × FS < FSCLK . Для схемы подключения кодека, приведенной на рис. 34, необходимо выполнение неравенства 2 × 16 × FS < FSCLK . Если при инициализации кодека в программе записать в регистр
управления.
В
управляющее
слово
в
двоичном
коде
1000000100001111, то в младших 7 разрядах будут записана следующая информация DIR0 = 1 (бит 0), DIR1 = 1 (бит 1), SCD0 = 1 ( бит 2), SCD1 = 1 ( бит 3), MCD0 = 0 (бит 4), MCD1 = 0 (бит 5), MCD2 = 0 (бит 6). Пользуясь таблицами 6, 7, 8 определяем коэффициенты деления и частоту сигналов. FDMCLK = 16,384 МГц, FSCLK = 16,384 МГц, FS = 16,384/256 = 64 кГц. 4.3. Последовательный интерфейс процессора Рассмотрим пример подключения кодека к порту SPORT0. Во время приема и передачи информации последовательным кодом процессор может выполнять программу, не связанную с работой порта по приему и передаче каждого бита. В рассмотренном режиме работы на рис. 34 предполагается, что процессор должен не пропустить только те моменты времени, когда в регистр передатчика ТХ порта SPORT нужно записать передаваемое 32-разрядное слово и прочитать из регистра приемника RX принятое 32-разрядное слово. Преобразование параллельного кода в последовательный при передаче и последо-
59
вательного кода в параллельный при приеме выполняет аппаратно встроенный порт SPORT. К программно доступным регистрам RX0, TX0 порта SPORT0 и RX1, TX1 порта SPORT1 можно обратиться в любой момент времени. Для чтения принятого 16-разрядного слова RX0 и записи 16-разрядного слова в передатчик TX0 порта SPORT0 достаточно записать две команды АХ0 = RX0; TX0 = AY0. Первая ассемблерная команда записывает в регистр АХ0 число, принятое последовательным портом из кодека, вторая – записывает в передатчик число из регистра AY0, которое будет передано портом SPORT0 в кодек. Так как последовательные порты управляются контроллером прерываний, то для обеспечения максимальной производительности процессора указанные ассемблерные команды должны выполняться в подпрограмме обработки прерываний. Использование контроллера прерываний позволяет вводить данные из АЦП в память процессора и выводить из памяти в ЦАП с постоянным шагом во времени TS. Программирование последовательного порта можно разбить на две части. Первый программный блок задает режим работы порта и его параметры, выполняется обычно однократно в начале основной программы при инициализации устройств, подключенных к процессору (табл. 10). В некоторых случаях инициализация может проводиться повторно для изменения отдельных параметров. Вторая часть содержит подпрограмму обработки прерываний, выполняемую циклически с частотой дискретизации сигналов FS. Кроме выполнения команд ввода-вывода для обмена данными с кодеком она содержит программный код обработки поступающей информации в реальном времени. Например, расчет выходного сигнала цифрового фильтра низкой частоты n-го порядка.
60
Таблица 10. Регистры конфигурации портов SPORT Адрес 0x3FFA 0x3FF9 0x3FF8 0x3FF7 0x3FF6
0x3FF5 0x3FF4 0x3FF3 0x3FF2
0x3FF1 0x3FF0 0x3FEF
Назначение регистра Приемник RX0 порта SPORT0 , биты 31-16 Приемник RX0 порта SPORT0 , биты 15-10 Передатчик TX0 порта SPORT0 , биты 31-16 Передатчик TX0 порта SPORT0 , биты 15-10 Регистр управления порта SPORT0: источник битовой синхронизации, кадровая синхронизация, компандирование, длина слова Делитель битовой частоты SCLKDIV порта SPORT0 Делитель кадровой частоты RFSDIV порта SPORT0 Регистр управления автобуферизацией порта SPORT0 Регистр управления порта SPORT1: выходной сигнал флага, источник битовой синхронизации, кадровая синхронизация, компандирование, длина слова Делитель битовой частоты SCLKDIV порта SPORT1 Делитель кадровой частоты RFSDIV порта SPORT1 Регистр управления автобуферизацией порта SPORT1
На рис. 37 приведен формат регистра управления 0x3FF6 порта SPORT0. Состояние разрядов 8 и 9 регистра зависят от схемы подключения кодека к процессору и выбранного источника синхронизации. В схеме на рис. 38 кадровую синхронизацию выполняет выходной сигнал кодека SDOFS, который сформирован делением частоты опорного внешнего генератора 16,384 МГц. Если в качестве источника синхронизации выбран внешний генератор 16,384 МГц, то сигнал RFS процессора должен быть входом, для чего в разряд 8 регистра управления 0x3FF6 необходимо записать ноль при инициализации порта SPORT0. Сигнал процессора TFS в рассмотренной схеме при установленной перемычке может быть только входом. Поэтому в разряд 9 регистра управления 0x3FF6 необходимо также записать ноль. Если в схеме перемычку между выводами RFS и TFS убрать (рис. 34), то TFS необходимо запрограммировать на вывод, записав единицу в разряд 9. В этом случае сигнал кадровой синхронизации ТFS должен сформировать последовательный порт процессора.
61
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
SLEN (длина слова – 1) 00 – неиспользуемые биты равны 0 01 – неиспользуемые биты равны знаку 10 – μ-закон компрессии 11– А-закон компрессии Активный уровень сигнала кадровой синхронизации приемника RFS : 0 – высокий, 1 - низкий Активный уровень сигнала кадровой синхронизации передатчика ТFS: 0 – высокий, 1 - низкий Сигнал кадровой синхронизации приемника RFS : 0 – вход, 1 - выход Сигнал кадровой синхронизации передатчика ТFS: 0 – вход, 1 - выход Кадровая синхронизация передатчика: 0 – обычная, 1 - альтернативная Кадровая синхронизация передатчика: 0 – первого слова, 1 – каждого слова Кадровая синхронизация приемника: 0 – обычная, 1 - альтернативная Кадровая синхронизация приемника: 0 – первого слова, 1 – каждого слова Битовая синхронизация SCLK: 0 – внешняя (после сброса), 1 – внутренняя Режим работы порта: 0 – обычный, 1 – многоканальный
Рис. 37. Разряды регистров управления 0x3FF6 порта SPORT0 и 0x3FF2 порта SPORT1
Кадровая синхронизация кодека SDOFS тактирует только
приемник
порта SPORT. Начало приема и передачи могут не совпадать. Задержка между передачей и приемом зависит от количества команд подпрограммы обработки прерывания. Последний вариант синхронизации более удобен для смешанного режима работы, когда процессор вначале записывает управляющие слова для инициализации кодека, а затем переводит кодек в режим приема и передачи данных. При инициализации кодека передаваемые процессором данные не должны
62
Процессор ADSP-2189M
Кодек AD73322 Аналоговые сигналы кодека 1
TFS П о р т S P O R T
SDIFS Кодек 1
DT
SCLK
SDI
VOUT1 VFBP1
SCLK
МCLK
Генератор 16,384 МГц
DR
SDO
RFS
SDOFS Кодек 2
VOUT2 VFBP2
Аналоговые сигналы кодека 2
SE
10 к
3B
Рис. 38. Внешняя синхронизация приемника порта SPORT
поступать на вход ЦАП, принимаемые данные не должны восприниматься процессором как информация от АЦП. Пример программирования выводов процессора RFS и TFS при инициализации
SPORT0 для смешанного режима ра-
боты кодека приведен в листинге 2. При записи числа в регистр управления 0x3FF6 порта SPORT0 используется его имя SPORT0_Control_Reg, объявленное в файле constant.h. Инициализация последовательного порта SPORT0 в приведенной программе выполняется отдельной командой для каждого разряда. Если в выбранный разряд необходимо записать 0, то содержимое регистра умножается на константу с нулем в этом же разряде и единицами во всех остальных разрядах. Это позволяет обнулить только один из 16 разрядов, сохранив предыдущие значения в 15 разрядах, находившихся в регистре управления до умножения на константу (маску). Поразрядное умножение двух чисел с помощью команды ''and'' определяет результат умножения в каждом разряде 0 × Х = 0, 1 × Х = Х, где Х обозначает произвольное состояние бита (0 или 1). 63
Листинг 2.
Программирование сигнала RFS на ввод, TFS - на вывод
#include ''constant.h''; /* подключаем файл с именами регистров */ ax0 = dm(SPORT0_Control_Reg); /* читаем регистр 0x3FF6 и сохраняем его в регистре ax0 */ ay0 = b#1111111011111111; /* маска разряда 8 */ ar = ax0 and ay0; /* поразрядное умножение регистров ax0 и ay0 обнуляет разряд 8 регистра ar и сохраняет остальные 15 разрядов ax0 */ dm(SPORT0_Control_Reg) = ar; /* записываем ar в регистр 0x3FF6 с 0 в разряде 8, вывод RFS процессора запрограммирован на ввод */ ax0 = dm(SPORT0_Control_Reg); /* читаем регистр 0x3FF6 и сохраняем его в регистре ax0 */ ay0 = b#0000001000000000; /* маска разряда 9 */ ar = ax0 or ay0; /* поразрядное логическое сложение ax0 и ay0 устанавливает разряд 9 регистра ar и сохраняет 15 разрядов ax0 */ dm(SPORT0_Control_Reg) = ar; /* записываем ar в регистр 0x3FF6 с 1 в разряде 9, вывод TFS процессора запрограммирован на вывод */
Файл constant.h #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define
SPORT1_Autobuf SPORT1_RFSdiv SPORT1_SCLKdiv SPORT1_Control_Reg SPORT0_Autobuf SPORT0_RFSdiv SPORT0_SCLKdiv SPORT0_Control_Reg SPORT0_TX_Channels0 SPORT0_TX_Channels1 SPORT0_RX_Channels0 SPORT0_RX_Channels1 TSCALE TCOUNT TPERIOD DM_Wait_Reg System_Control_Reg
0x3FEF 0x3FF0 0x3FF1 0x3FF2 0x3FF3 0x3FF4 0x3FF5 0x3FF6 0x3FF7 0x3FF8 0x3FF9 0x3FFA 0x3FFB 0x3FFC 0x3FFD 0x3FFE 0x3FFC
Аналогично для записи единицы в один из 16 разрядов с сохранением остальных 15 разрядов используется поразрядное логическое сложение. Поразрядное логическое сложение двух чисел с помощью команды ''or'' определяет результат умножения в каждом разряде 0 + Х = Х, 1 + Х = 1. Единица должна быть в том же разряде константы, в котором необходимо записать единицу в регистр. Остальные 15 разрядов константы равны нулю.
64
В начале программы в секции памяти программ заполняется таблица векторов прерываний, которая связывает вектор с именем программы и подпрограммы прерывания (листинг 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 65
для хранения коэффициентов фильтра в массиве 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. После проведения процессором инициализации в начале программы схема, состоящая из процессора, кодека и внешних генераторов на рис. 39, выполняет циклическую обработку прерываний с периодом дискретизации TS в следующем порядке: - преобразование входного напряжения в 16-разрядный двоичный код; - передача последовательным кодом двух слов по 16 бит АЦП каждого канала с синхронизацией сигналами кодека SCLK и SDOFS;
66
Листинг 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; /* выход из подпрограммы обработки прерывания */
-формирование последовательным портом SPORT0 сигнала прерывания после приема двух слов от кодека; -передача контроллером прерывания вектора прерывания 0х0014;
67
DA1
R5 10K
1 NC
OUT
R7 33
5
3В 37. 5 МГц
Антиэлайсин-
DA2
говый фильтр 17 R1 100
16 4
UBX1
С1 47n
28
14 SDO 15 SDOFS 12 SCLK
SDIFS
VOUTP1
VFBN2
VOUTP2
26
C2 47n
23 21
REFCAP 6
VFBP2
11 RES 18 SE 13 MCLK
9 21 BMS 10 20 RD 11 19 WR 12 44 RES
3В
1
NC
OUT
4 1
PFI MR
RES
97 13 98 14 99 15 100 16 1 17 2 18 4 19 5 20 6 21 7 22 8 23 9 24 10 25 11 26
D16 D17 D18 D19 D20
76 77 78 79 81
27 28 29 30 31
ADSP-2189M
5 13 14 15 16 17 18 12 19 20 21 22 23 24 25 26 27 28 29 30 31 9 10 11
16. 384 МГц
R3 10К Сброс
R6 33
DA3
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13
C3 100n
AD733222L
R4 10К
DT0 31 TFS0 32
1 10 D8 9 D9 2 8 3 D10 4 7 D11 5 6 D12 6 5 D13 7 27 D14 8 26 D15
VFBN1
2 VFBP1
R2 100
UBX2
SDI
DD1
13 CLKIN 34 DR0 33 CPU RFS0 35 SCLK0
7
ADM7DBSAR
12 11 10 9 8 7 6 5 27 26 23 25 4 28 29 3 2 30 1 22 24 31
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 E G W
ROM S
D0 D1 D2 D3 D4 D5 D6 D7
13 14 15 17 18 19 20 21
M29W040B
Рис. 39. Электрическая схема обработки сигналов процессором ADSP-2189M 68
1 2 3 4 5 6 7 8
-временное прекращение основной программы main и переход на подпрограмму обработки прерывания, имя которой fir_start указано в таблице векторов (листинг 3); - выполнение подпрограммы обработки прерывания fir_start, которая начинается чтением регистра приемника с новым отсчетом АЦП (si=rx0) и завершается командой вывода выходного сигнала КИХ-фильтра на ЦАП (tx0 = mrl); - возвращение в прерванную программу main; - прием последовательным кодом за 32 такта сигнала синхронизации SCLK двух 16-разрядных слов в регистр кодека, одно из которых было рассчитано в подпрограмме fir_start; -преобразование цифрового двоичного кода в пропорциональный выходной аналоговый сигнал ЦАП одного или двух каналов. Временные диаграммы цифровой фильтрации входного аналогового сигнала приведены на рис. 40. Графики не отражают действительных задержек, вносимых отдельными блоками устройства цифровой обработки. Они характеризуют последовательность преобразований и поясняют синхронизацию под программы обработки прерываний сигналами кодека и последовательного порта процессора. Время задержки сигнала tЗС определяет минимальную временную задержку прохождения аналогового сигнала от входа АЦП до выхода ЦАП, вносимую кодеком и подпрограммой fir_start. Задержка tЗС не связана с частотными свойствами КИХ-фильтра и проявляется даже в том случае, когда выходной сигнал ЦАП повторяет входной сигнал АЦП. Фазовая задержка сигнала определяется типом фильтра и его порядком. Обмен данными между кодеком и процессором выполняется последовательным кодом за 32 такта сигнала синхронизации тактового генератора 16. 384 МГц. Скорость выполнения программы определяет внешний генератор 37. 5 МГц.
69
Преобразование АЦП t
АЦП
t SDOFS
TS
TS t 32TSCLK
32TSCLK Сигнал запроса прерывания
t 3TSCLK
Модуль main t Подпрограмма fir_start t tЗС SDIFS t Преобразование ЦАП
32TSCLK
32TSCLK
tАЦП
t
Рис. 40. Временные диаграммы цифровой обработки аналогового сигнала
Глава 5. ОБРАБОТКА ДАННЫХ СИГНАЛЬНЫМ ПРОЦЕССОРОМ 5.1. Ввод-вывод данных по прерываниям Ввод цифровых отсчетов аналогового сигнала Х(t) из АЦП и вывод данных в ЦАП программа должна выполнять циклически с периодом дискретизации TS. Для этого в процессорах обычно используется механизм векторного прерывания. Источниками прерываний являются сигналы, которые поступают
70
на вход контроллера прерываний и временно приостанавливают выполнение основной программы. Процессор, получив сигнал на входе контроллера, заканчивает выполнение текущей команды в произвольной точке основной программы и переходит к одной из подпрограмм обработки прерывания. В приведенном на рис. 41 примере прерывание вызвал импульсный сигнал, формируемый
Основная программа Адрес ячейки памяти
Код команды Команда 1 Команда 2 Команда 3 Команда 4 ………… ………… ………… Команда n Команда n+1 Команда n+2 ………… ………… ………… Останов
0x0050 0x0051 0x0052 0x0053
0x0210 0x0211 0x0212
Подпрограмма обработки прерывания 1 Адрес ячейки памяти 0x0500 0x0501 0x0502 0x0503
0x0610 0x0611
Код команды Команда 1 Команда 2 Команда 3 Команда 4 ………… ………… ………… Команда m Команда m+1 ………… ………… Возврат из подпрограммы (RTI)
Подпрограмма обработки прерывания 2 Адрес ячейки памяти 0x0710 0x0711 0x0712 0x0713
0x0790 0x0791
Код команды Команда 1 Команда 2 Команда 3 Команда 4 ………… ………… ………… Команда m Команда m+1 ………… ………… Возврат из подпрограммы (RTI)
Стек для хранения регистров ASTAT, MSTAT, IMASK и программного счетчика РС
Внешние cигналы ADSP-2189M . . Сигналы от встроенных устройств
Запрос 1 Запрос 2
Встроенный контроллер прерываний
Запрос на прерывание выполняемой программы
Рис. 41. Вызов подпрограмм контроллером прерываний ADSP-2189M
71
периодически с интервалом TS на входе контроллера, встроенного в микросхему процессора ADSP-2189M. Внешний сигнал поступил на вход микросхемы в тот момент времени, когда процессор выполнял команду n, расположенную в ячейке памяти программ РМ с адресом 0x0210. Прерывание изменяет линейный порядок выполнения программы. После завершения текущей команды n процессор автоматически заносит в стек информацию о состоянии программы в данный момент времени, расположенную в системных регистрах, для ее дальнейшего восстановления по окончании обработки прерывания. Содержимое программного счетчика сохранится в стеке PC, регистры секвенсора ASTAT, MSTAT, IMASK запоминаются в блоке STATUS STACK. Затем вместо следующего адреса 0x0211, на единицу больше текущего, процессор запишет в программный счетчик адрес начала подпрограммы обработки, который определяется таблицей векторов прерываний (табл. 11). Таблица 11. Источники и векторы прерываний ADSP-2189M Источник прерывания
Адрес вектора прерывания
Сброс (Reset)
0x0000 (наивысший приоритет)
Снижение энергопотребления
0x 002С
IRQ2
0x 0004
IRQL1
0x 0008
IRQL0
0x 000C
Передатчик порта SPORT0
0x 0010
Приемник порта SPORT0
0x 0014
IRQE
0x 0018
Байтовый обмен ПДП (DMA)
0x 001C
Передатчик порта SPORT1 или сигнал IRQ1
0x 0020
Приемник порта SPORT1 или сигнал IRQ0
0x 0024
Таймер (timer)
0x 0028 (самый низкий приоритет)
Примечание:
IRQ2, IRQL1, IRQL0, IRQE, IRQ1, IRQ0 – внешние сигналы, поступающие на
входы процессора. Адреса векторов записаны в 16-ричной системе счисления.
72
Последовательность выполняемых при этом переходов: сигнал на входе контроллера → вектор на выходе контроллера → таблица → адрес начала подпрограммы. Для каждого сигнала контроллера в таблице зарезервировано 4 ячейки памяти и определен вектор. Вектор – это число, соответствующее порядковому номеру сигнала и передаваемое контроллером процессору по внутренней шине с той целью, чтобы процессор смог определить источник прерывания. Прерывания могут вызываться как внешними устройствами по отношению к процессору, так и внутренними. Для определения вектора необходимо адрес, указанный в таблице, разделить на четыре (каждому источнику в памяти отведено четыре ячейки памяти). Если, например, периодические прерывания вызывает сигнал внутреннего таймера, то контроллер передает процессору вектор 0х000А. Умножением на четыре процессор рассчитывает первый адрес 0х0028 четырех ячеек памяти и записывает его в программный счетчик. Поскольку разместить реальную подпрограмму обработки в четырех ячейках памяти невозможно, то здесь обычно записывают команду безусловного перехода на начало подпрограммы обработки прерывания таймера. В программах пользователя на языке ассемблера при заполнении таблицы векторов указывается имя подпрограммы в строке, соответствующей вектору 0х000А. Выполнив подпрограмму обработки прерывания, процессор после команды завершения RTI автоматически восстанавливает системные регистры, читая их содержимое из стека, записывает в программный счетчик адрес команды n+1 и продолжает выполнение основной программы с той точки, в которой произошел выход на подпрограмму. Поэтому приведенная в листинге 1 программа расчета выходного сигнала КИХ-фильтра должна находиться не в основной программе, а в подпрограмме обработки прерывания таймера или последовательного порта, к которому подключены АЦП и ЦАП. Регистр маскирования IMASK разрешает или запрещает прерывания индивидуально по каждому внешнему сигналу или встроенному устройству (табл.
73
12). Если обнулить бит 0 регистра IMASK, то процессор прекратит выполнять подпрограмму, определенную вектором таймера 0х000А. Таблица 12. Регистр маскирования прерываний IMASK Биты
9
Устройство IRQ2 или сигнал
8
7
6
5
4
IRQL1 IRQL0 SPORT0 SPORT0 IRQE TX0
RX0
3
2
1
0
BDMA SPORT1 SPORT1 Таймер TX1 RX1 (IRQ1) (IRQ0)
Программа пользователя может разрешить обработку отдельного прерывания, если соответствующий бит установить (записать в него единицу), или запретить - при сброшенном бите. Допускается менять содержимое регистра в процессе выполнения программы. При включении питания или сбросе процессора регистр IMASK автоматически обнуляется, т.е. все маскируемые прерывания запрещены. Запись в регистр двоичного числа 0000000001 разрешит прерывания только от таймера. Чтобы разрешить прерывания от приемника последовательного порта SPORT0 (RX0) и от внешнего сигнала IRQ2 необходимо записать в регистр число 1000100000 с установленными битами в разрядах 9 и 5. Прерывания передатчика порта SPORT0 (TX0) будут запрещены. Поступающие сигналы на контроллер не вызовут выполнения процессором подпрограммы обработки прерывания передатчика порта SPORT0. Встроенным контроллером прерываний обрабатывается десять маскируемых и два немаскируемых прерывания. Немаскируемые прерывания, вызываемые сбросом и выключением питания, программно запретить нельзя, они всегда разрешены. Процессор может временно приостановить подпрограмму обработки устройства с более низким приоритетом, если до завершения подпрограммы поступил запрос от устройства с более высоким приоритетом. Подпрограмму обработки прерывания таймера, имеющего самый низкий приоритет, может приостановить любой другой сигнал, одновременно поступивший на вход контроллера и разрешенный регистром IMASK и регистром ICNTL.
74
Регистр управления ICNTL содержит 5 разрядов. Бит 4 ICNTL разрешает или запрещает вложенные прерывания, т.е. одновременное выполнение нескольких подпрограмм прерываний с временной приостановкой тех, которые имеют более низкий приоритет (рис. 42). Импульсный сигнал запроса 2 с более высоким приоритетом приостановил выполнение подпрограммы обработки прерывания сигнала 1. Подпрограмма 1 будет продолжена только после того, как полностью завершится подпрограмма 2. Сигнал запроса 1 не может прервать подпрограмму 2. Запрос 1 t Запрос 2 t Выполнение п/программы 1
останов п/программы 1
продолжение п/программы 1 t
Выполнение п/программы 2 t
Рис. 42. Обработка контроллером вложенных прерываний
Если бит 4 в регистре ICNTL установлен, то вложенные прерывания разрешены, при сброшенном бите – запрещены. Разряд 3 в регистре не используется. Биты 0,1,2 ICNTL определяют реакцию контроллера на форму внешних сигналов IRQ0, IRQ1 и IRQ2 соответственно. При установленном бите контроллер реагирует на фронт импульса, при сброшенном бите – на уровень сигнала. Регистр управления ICNTL не обладает чувствительностью к форме сигналов встроенных устройств, подключенных к контроллеру.
75
Задержка между предоставлением прерывания и выполнением первой команды подпрограммы составляет 3 командных цикла и равна 40 нс для таймера, сигналов IRQx и последовательного порта SPORT. После сброса процессора прерывания разрешены по умолчанию. Команда DIS INTS запрещает все прерывания, независимо от содержимого регистра маскирования IMASK. Противоположная по действию команда ENA INTS разрешает процессору выполнять все прерывания, определенные в IMASK. Таблица векторов прерываний занимает в памяти программ РМ фиксированную область адресов от 0х0000 до 0х002F. Программы и подпрограммы пользователя являются перемещаемыми. Начальные адреса подпрограмм в примере на рис. 41 могут изменяться на этапах трансляции и компоновки. Значения 0x0050, 0x0500 и 0х0710 приведены только для наглядности и не служат правилом для определения начальных адресов. Распределение адресов памяти программ и памяти данных процессора приведено в табл. 13. Распределение начальных адресов в памяти программ и памяти данных выполняет автоматически операционная система на этапе трансляции и компоновки. Программисту необходимо учитывать максимальный размер каждой области памяти, которая используется в программе пользователя. Таблица 13. Области памяти программ РМ и памяти данных DM ADSP-2189 Начальный
Конечный
Длина слова
адрес
адрес
(биты)
Сегмент прерываний РМ
0х00000
0х0002F
24
Сегмент кода РМ
0х00030
0х01840
24
Сегмент кода 2 РМ
0х02000
0х02600
24
Сегмент данных DM
0х00000
0х036AF
16
Сегмент инициализации DM
0х036B0
0х036BF
16
Сегмент страниц DM
0х036C0
0х036CF
16
Сегмент данных DM
0х036D0
0х03C00
16
76
5.2. Организация циклического буфера Во многих задачах цифровой обработки сигналов используется хранение в памяти программы массива из N последних цифровых отсчетов, накопленных за постоянный интервал времени. Дискретные значения аналогового сигнала X(t) из АЦП могут поступать на вход циклического буфера процессора, если в программе пользователя указаны параметры буфера и порт, к которому подключен аналого-цифровой преобразователь. На рис. 43 показано десять цифровых значений Х, постепенно заполняющих четыре ячейки буфера памяти. При поступлении нового отсчета в буфере изменяется
содержимое одной
16-
разрядной ячейки памяти и сохраняется N-1 предыдущих значений.
X1
X2
X3
X4
X5
X6
X7
X8
X9
X10
N=4 N=4
.........
N=4
Рис. 43. Заполнение циклического буфера длиной N = 4
Рассмотрим применение циклического буфера для программной реализации фильтра с конечной импульсной характеристикой (КИХ) четвертого порядка. После заполнения буфера первыми четырьмя числами Х1, Х2, Х3, Х4 рассчитывается свертка Y = k1·X1 + k2·X2 + k3·X3 +k4·X4, где k1, k2, k3, k4 – постоянные коэффициенты фильтра. Чтобы выполнить свертку из четырех произведений и трех сумм в программе на языке ассемблера необходимо указать с помощью косвенной адресации номера ячеек буфера, в которых хранятся числа Х Y = k1·x(0) + k2·x(1) + k3·x(2) + k4· x(3).
77
При чтении из памяти индексы массива x для расчета Y меняются в следующем порядке: 0, 1, 2, 3. Генератор адреса DAG при следующем обращении к массиву x автоматически повторит цикл перебора индексов, независимо от того, какая будет выполняться команда в программе – чтение или запись. Следующая команда алгоритма – запись числа Х5 в ячейку памяти буфера. Поскольку следующим индексом цикла адреса является 0, то Х5 запишется в буферный элемент массива х(0). Затем следует новый цикл расчета выходного сигнала фильтра с продолжением перебора индекса при чтении переменных из памяти Y = k2·x(1) + k3·x(2) + k4· x(3) + k1·x(0), т.е. Y = k2·X2 + k3·X3 +k4·X4 + k1·Х5. Самый старый отсчет Х1 из буфера удален, три значения Х2, Х3 и Х4 сохранились без изменения. Порядок перебора индексов 1, 2, 3, 0 при расчете Y отличается от того, который был ранее. После записи Х6 в ячейку х(1) расчет выходного сигнала выполняется с перебором индексов 2, 3, 0, 1 Y = k3·x(2) + k4· x(3) + k1·x(0) + k2·x(1) = k3·X3 +k4·X4 + k1·Х5 + k2·X6. Этот способ применяется при любом числе звеньев фильтра. При такой адресации ячеек памяти генератор адреса должен выдавать лишь последовательные значения адресов, вне зависимости от того, какая операция с памятью – чтение или запись – осуществляется в настоящий момент. Буфер такого типа называется циклическим, потому что когда при записи или чтении достигается последняя ячейка, указатель памяти автоматически устанавливается на начало буфера. Выборка коэффициентов из памяти осуществляется одновременно с выборкой данных. При рассмотренной схеме адресации самые старые отсчеты извлекаются из памяти первыми. Поэтому порядок выборки
коэффициентов
должен соответствовать очередности выбираемых данных. Для расчета фильтра
78
в программе необходимо организовать два циклических буфера – один для данных Х, другой – для коэффициентов k. Одновременная выборка двух операндов k и Х в сигнальном процессоре осуществляется по двум независимым шинам: шине данных памяти программ и шине данных памяти данных. Кроме того, имеются отдельные шина адреса памяти программ и шина адреса памяти данных. Таким образом, МАС может получать входные данные по каждой шине данных одновременно. Для задания длины циклического буфера в программе можно использовать только регистры L0 – L7, указателя адреса – регистры I0 – I7, шага изменения адреса – регистры М0 – М7. В листинге 6 приведен фрагмент программы вычисления одного значения выходного сигнала КИХ-фильтра N-го порядка по следующему алгоритму: - выборка коэффициента из циклического буфера коэффициентов; - обновление указателя адреса буфера коэффициентов; - выборка отсчета из циклического буфера входного сигнала; - обновление указателя адреса буфера входного сигнала; - умножение коэффициента на отсчет; - добавление нового слагаемого к промежуточному результату; - переход в начало цикла программы, если просуммированы не все произведения. Листинг 6.
Расчет фильтра с циклической буферизацией
ADSP – 21xx Пример ассемблерного кода: М1, М5 = 1 ; L0, L4 = N ; MR = 0, MX0 = DM (I0, M1), MY0 = PM (I4, M5) ; CNTR = N – 1 ; DO convolution UNTIL CE ; Convolution : MR = MR + MX0 * MY0 (SS), MX0 = DM (I0, M1), MY0 = PM (I4, M5) ; MR = MR + MX0 * MY0 (RND) ; IF MV SAT MR ;
79
Буфер коэффициентов использует память программ (РМ), буфер входного сигнала – память данных (DM). Перед выполнением программы коэффициенты и отсчеты входного сигнала должны находиться в ячейках РМ и DM соответственно. Указателем адреса памяти циклического буфера коэффициентов является регистр I4, циклического буфера входного сигнала – I0. Область адресов памяти для организации буферов в программе определять не нужно, так как эту задачу решает операционная система пакета проектирования Visual DSP++ на этапе компоновки (Linker). Первые команды во второй и третьей строках листинга задают параметры буферов. Модификаторы адреса М1 и М5 равны единице (шаг изменения адреса). В регистрах L0, L4 задается длина буфера, равная порядку фильтра (L0 = N, L4 = N). Команды четвертой строки очищают регистр MR и заполняют первым значением Х из памяти данных и первым значением k из памяти программ. Затем в программе реализуется свертка данных Х и коэффициентов k. Для этого в следующей строке листинга переменная CNTR определяет количество циклов: CNTR=N–1. Регистр CNTR используется в качестве счетчика циклов умножения со сложением в устройстве МАС. Для выполнения цикла не требуется дополнительных команд по проверке условия его завершения. Выход из цикла выполнятся процессором автоматически при выполнении условия CNTR = 0 после N–1 проходов. Начало цикла определено меткой Convolution после оператора DO UNTIL, окончание – первой точкой с запятой. Результат вычислений заносится в регистр MR. Многофункциональная команда MR=MR+MX0*MY0 (SS), MX0=DM(I0, M1), MY0=PM (I4, M5) выполняется за один машинный цикл (13,3 нС). Последние две строки программы умножают, суммируют N-ый раз и проверяют окончательный результат в регистре MR на переполнение с помощью бита MV. Заключительная команда умножения с накоплением выполняется с включенным режимом округления RND до старших 24 разрядов регистра MR. В случае переполнения (MV=1) процес-
80
сор командой SAT запишет в регистр MR максимально возможное число для формата, принятого в программе. Благодаря такому подходу, при накоплении результата используются преимущества регистра MR 40-разрядной точности. Насыщение происходит только в том случае, если вычисление заключительного результата привело к переполнению 32 младших значащих разрядов регистра MR. Ограничение на число звеньев фильтра, реализующего программу КИХфильтрации в реальном масштабе времени, определяется, прежде всего, длительностью процессорного цикла, частотой дискретизации и требуемым объемом других вычислений. Программа КИХ-фильтра, представленная в примере, требует общего количества циклов N+5 для фильтра с числом звеньев N. Для DSP-процессора ADSP-2189M, обладающего быстродействием 75 MIPS, реализация фильтра с числом звеньев 100 требует 13,3 нс · 100 + 5 · 13,3 нс = 1,4 мкс. Это соответствует максимально возможной частоте дискретизации 714 кГц, ограничивая, таким образом, ширину полосы частот обрабатываемого сигнала несколькими сотнями килогерц. Аппаратная реализация циклических буферов разрешает устанавливать в программе параметры буфера (адрес начала буфера, длина и т.д.) вне тела цикла, непосредственно вычисляющего алгоритм. Это позволяет избежать включения дополнительных команд в тело цикла. Отсутствие аппаратной реализации циклических буферов может существенным образом ухудшить возможности DSP-процессора по реализации алгоритмов цифровой обработки сигналов. 5.3. Форматы представления чисел При разработке устройств, использующих сигнальные процессоры, необходимо учитывать конечную точность представления чисел в цифровых системах. Математический пакет MATLAB при синтезе проектируемого устройства позволяет анализировать эффекты, связанные с шумами квантования анало-
81
го-цифрового преобразования, учитывать переполнение разрядной сетки в процессе вычислений и искажения характеристик из-за квантования коэффициентов цифровых фильтров. В процессорах семейства ADSP 21xx максимальная скорость вычислений достигается для чисел, представленных в формате с фиксированной запятой 1.15. Формат используется 16-разрядными процессорами и означает, что целая часть числа содержит только один разряд – знаковый. Дробная часть использует 15 разрядов (рис. 44). Числа, которые можно представить в данном формате, по модулю не превосходят единицы. Двоичный код после запятой делится на постоянный коэффициент 215 = 32768. Ноль в знаковом разряде соответствует положительным числам, единица – отрицательным. Пятнадцать разрядов после запятой обеспечивают дискретность представления, равную единице в младшем разряде 2-15 = 1/32768 ≈ 3·10-5. Бит Вес
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
13 9 2 14 2 2 12 2 11 2 10 2
28
27
26
25
24
23
22
21
20
Знаковый бит Рис. 44. Дробное число со знаком в формате 1.15
Из данных табл. 14 видно, что максимальное положительное число в формате 1.15 отличается от единицы и равно 32767/32768 ≈ 0,9999695. При проектировании цифровых устройств, использующих формат 1.х, необходимо масштабирование коэффициентов уравнений с той целью, чтобы привести их значения к диапазону [-1,1]. Для масштабирования все коэффициенты уравнения делятся на одну и ту же константу, затем на нее же умножается правая часть уравнения. В качестве масштабирующего множителя удобно выбирать степень двойки, поскольку умножение в этом случае сводится к поразрядному сдвигу двоичного числа влево.
82
Таблица 14. Формат с фиксированной запятой 1.15 Двоичный код
Шестнадцатеричный код
Число в формате 1.15
0000 0000 0000 0000
0000Н
0
0000 0000 0000 0001
0001Н
1/32768 = 0,0000305
0000 0000 0000 0010
0002Н
2/32768 = 0,0000610
….
….
….
0111 1111 1111 1110
7FFEH
32766/32768 = 0,9999390
0111 1111 1111 1111
7FFFH
32767/32768 = 0,9999695
1000 0000 0000 0000
8000H
-32768/32768 = -1
1000 0000 0000 0001
8001H
-32767/32768 = -0,9999695
….
….
….
1111 1111 1111 1110
FFFEH
-2/32768 = -0,0000610
1111 1111 1111 1111
FFFFH
-1/32768 = -0,0000305
Рассмотрим пример масштабирования коэффициентов эллиптического фильтра нижних частот 4-го порядка с частотой среза, равной 20 % от частоты Найквиста, пульсациями в полосе пропускания 1 дБ и подавлением сигнала в полосе задерживания 60 дБ. Перечисленные параметры фильтра зададим в командной строке MATLAB с помощью функции ellip » [b, a] = ellip(4, 1, 60, 0.2) b = 0.0059
0.0053
0.0096
0.0053
0.0059
a = 1.0000
-3.0477
3.8240
-2.2926
0.5523
Из полученного решения видно, что максимальный по модулю коэффициент больше единицы и равен 3,824. Уравнение рекурсивного фильтра y(k) = 0,0059 x(k) + 0,0053 x(k – 1) + 0.0096 x(k – 2) + 0.0053 x(k – 3) + + 0.0059 x(k – 4) + 3.0477 y(k – 1) – 3.8240 y(k – 2) + 2.2926 y(k – 3)
–
– 0.5523 y(k – 4). Для масштабирования разделим и умножим правую часть уравнения на 4 y(k) = 4(0,0015 x(k) + 0,0013 x(k – 1) + 0,0024 x(k – 2) + 0,0013 x(k – 3) + + 0,0015 x(k – 4) + 0,7619 y(k – 1) – 0,9560 y(k – 2) + 0,5731 y(k – 3) – –
0,1381 y(k – 4)). 83
Округление коэффициентов из-за конечной разрядности процессора может заметно сказаться на рекурсивных фильтрах с крутым спадом АЧХ между полосами пропускания и задерживания. Предположим, что фильтр реализован на 9-разрядном процессоре в формате 1.8. В этом случае коэффициенты округляются с точностью до 1/256, так как у них остаются 8 двоичных разрядов после запятой. » bm=b/4; % масштабирование коэффициентов числителя » am=a/4; % масштабирование коэффициентов знаменателя » [h,f]=freqz(b,a); % АЧХ до округления » hm=freqz(bm,am); » subplot(1,2,1) » plot(f/pi,abs(hm))
% график АЧХ до округления
» bq=round(bm*256)/256; % округление масштабированных » aq=round(am*256)/256; % кооэффициентов » hq=freqz(bq,aq);
% АЧХ после округления
» subplot(1,2,2) » plot(f/pi,abs(hq))
% график АЧХ после округления
Из сравнения графиков на рис. 45 видно, что амплитудно-частотная характеристика фильтра изменилась существенно: в несколько раз увеличилась амплитуда пульсаций в полосе пропускания, скат АЧХ стал более пологим. Заданный параметр пульсаций в полосе пропускания 1 дБ фильтр с форматом 1.8 не обеспечивает. Округление коэффициентов фильтра приведенного примера в формате 1.15 приводит к небольшим искажениям частотной характеристики. В этом случае графики АЧХ без учета квантования и с квантованием практически сливаются. График амплитудно-частотной характеристики фильтра в формате 1.15 совпадает с графиком АЧХ на рис. 45,а. Отсюда можно сделать вывод о том, что разрядность процессора в рассмотренном примере не оказывает влиния на вид АЧХ.
84
1
0.8
0.9
0.7
0.8 0.6 0.7 0.5
0.6 0.5
0.4
0.4
0.3
0.3 0.2 0.2 0.1
0.1 0
0 0
0.5
1
0
а)
0.5
1
б)
Рис. 45. АЧХ рекурсивного ФНЧ: а) до округления коэффициентов; б) после округления в формате 1.8
В некоторых случаях удобно использовать для процессоров ADSP2189M целочисленный формат 16-разрядных двоичных чисел без знака или со знаком. Целые числа без знака имеют диапазон [0,65535], диапазон целых чисел со знаком составляет [-32768, 32767]. Коэффициенты деления частоты генератора, задающие период квантования сигналов в АЦП и ЦАП, в рассматриваемой далее программе задаются в виде 16-разрядных целых чисел без знака. Программы на языке С поддерживают 16- и 32-разрядные переменные со знаком и без знака.
85
6. СИНТЕЗ И РЕАЛИЗАЦИЯ ЦИФРОВОГО ФИЛЬТРА 6.1. Выбор фильтра и входного сигнала Процедура синтеза любого цифрового фильтра сводится к выбору типа фильтра, обеспечивающего заданные требования, определению частоты дискретизации и расчету коэффициентов фильтра с учетом требований к объему вычислительных операций. Тип фильтра в курсовой работе задан в исходных данных одним из четырех вариантов амплитудно-частотной характеристики: фильтр низких частот (ФНЧ), полосовой (ПФ), режекторный (РФ) и фильтр высоких частот (ФВЧ). Вторым заданным параметром в исходных данных, влияющим на вид фильтра, служит обратная связь. В курсовой работе необходимо выполнить расчет одного из двух вариантов структуры: КИХ - или БИХ-фильтр. Обратная связь БИХ-фильтра (IIR) при определенных условиях может вызвать неустойчивость.
В КИХ-фильтрах (FIR) обратная связь отсутствует, поэтому они все-
гда устойчивы. Сравнение основных параметров фильтров с обратной связью и без обратной связи приведено в табл. 15. Таблица 15. Свойства фильтров различных структур БИХ-фильтры Требуют меньшего количества вычислений при одинаковых АЧХ Есть аналоговый эквивалент Могут быть нестабильными Нелинейная фазовая характеристика Большее влияние ложных сигналов
КИХ-фильтры Требуют большего количества вычислений при одинаковых АЧХ Нет аналогового эквивалента Всегда стабильны Линейная фазовая характеристика Меньшее влияние ложных сигналов
В микропроцессорных системах используются различные способы кодирования информации. Внутри компьютера или радиотелефона обычно применяется потенциальное кодирование, при котором логической единице соответствует высокий уровень напряжения UЦС, нулю – низкий (рис. 46).
86
UЦС
1
0
1
0
1 t
T
UАМ
t
UЧМ
f1
f2 t
UФМ
φ1
φ2 t
Рис. 46. Амплитудная (АМ), частотная (ЧМ) и фазовая манипуляция (ФМ)
При передаче данных по линии связи потенциальное кодирование применимо только для проводных каналов высокого качества, вызывающих небольшие искажения прямоугольных импульсов. В радиоканалах или проводных каналах низкого качества необходимо преобразование передатчиком потенциального сигнала в синусоидальный сигнал, выполняемое модемом. В курсовой работе задан один из трех вариантов аналогового сигнала модема (табл. 17, рис. 46), который поступает на вход микропроцессорной системы обработки - амплитудная манипуляция UАМ, частотная UЧМ и фазовая UФМ. Частота (частоты) входного сигнала задана в табл. 18. Частота манипуляции сигнала АМ, ЧМ, ФМ зависит от скорости передачи данных V =1 / Т, где Т – время одного битового интервала. При манипуляции (модуляции) дискретная информация представляется синусоидальным сигналом той частоты, которую хорошо передает выбранная линия связи. В глобальных сетях данные передаются через аналоговые телефонные каналы, разработанные для передачи голоса в аналоговой форме. Спектр частот 87
ограничен полосой 300 – 3400 Гц, поэтому они плохо подходят для непосредственной передачи импульсов. Передатчики радиосистем преобразуют манипулированные данные в высокочастотный сигнал несущей частоты, приемник восстанавливает низкочастотные колебания с помощью демодулятора АМ, ЧМ или ФМ. Графики, приведенные на рис. 46, не учитывают влияния помех и искажения формы сигнала при прохождении входного усилителя и демодулятора приемника. Такой идеальный сигнал может далее используется для оценки фазового запаздывания, вносимого цифровым фильтром. Синтез в среде MATLAB выполняется обычно без учета указанного параметра. Если запаздывание превышает допустимое значение, сигнал на выходе фильтра будет искаженным или равным нулю в полосе пропускания, несмотря на то, что АЧХ синтезированного устройства удовлетворяет заданным требованиям. Программы, приведенные в приложениях, позволяют оценить искажения формы выходного сигнала, вызванные запаздыванием фильтра. Уравнения входного манипулированного сигнала для цифрового фильтра для трех вариантов манипуляции
A sin( 2πf1t ) , ЧМ = Х ВХ A sin( 2πf 2 t ) ,
U ЦС = 1; U ЦС = 0.
A sin(2πf1t ), U ЦС = 1; АМ Х ВХ = U ЦС = 0. 0, A sin(2πf1t + ϕ1 ) , U ЦС = 1; ФМ Х ВХ = A sin(2πf 2 t + ϕ 2 ) , U ЦС = 0. где ϕ1 = 0, ϕ 2 = π .
88
6.2. Частота дискретизации аналогового сигнала В соответствии с теоремой Котельникова требуемая частота дискретизации должна превышать как минимум в два раза верхнюю граничную частоту в спектре аналогового сигнала
FS ≥ 2FMAX. Максимальные частоты фильтров с
различными частотными характеристиками приведены в табл. 16. Таблица 16. Верхняя граница спектра обрабатываемых сигналов Фильтр FMAX
Рассмотрим
ФНЧ
ФВЧ
ПФ
РФ
f3
2 f2
f5
1.2 f6
пример синтеза режекторного КИХ-фильтра c частотно-
манипулированным входным сигналом. Порядок расчета можно использовать для всех остальных вариантов амплитудно-частотных характеристик (ФНЧ, ФВЧ, ПФ), манипуляции входного сигнала (АМ, ФМ) КИХ- и БИХ-фильтров. Исходные данные примера . V=1100 бит/с, f1=2V=2200 Гц, f2=3V=3300 Гц, Rp=0.8 дБ, RS=30 дБ, f3=1.15f2=3795 Гц, f4=1.55f2 =5115 Гц, f5=1.9f2=6270 Гц, f6=2.4f2=7920 Гц. При заданном параметре режекторного фильтра f6 = 7920Гц максимальная частота сигнала FMAX=1.2f6 =9504 Гц (табл. 16), частота дискретизации FS≥2FMAX =19008 Гц. Это наиболее общее требование к номиналу FS. Для ряда практических задач такая оценка является заниженной. Например, устройствам тактовой синхронизации демодулятора необходима более высокая частота дискретизации. В условиях низкого отношения сигнал/помеха частота определяется скоростью манипуляции [5] и составляет в среднем FS =10…50V, в некоторых случаях выбираются большие значения. При скорости манипуляции V=1100 бит/с, частота FS=10…50V=11000…55000 Гц. Возможные частоты дискретизации при программировании микросхемы кодека AD73322 составляют 8,16,32 и 64 кГц. Выбираем из двух возможных значений в рассчитанном диапазоне 11000…55000 Гц наибольшую частоту 89
FS=32 кГц, исходя из ограничения 2FMAX=19008 Гц, найденного из теоремы Котельникова. Если при расчете оказывается возможным выбрать не одну, а несколько частот дискретизации, то выбор FS зависит от типа цифрового фильтра, его реализуемости. Дополнительным условием принятия решения может быть в этом случае требование
минимального искажения фильтром манипулированного
сигнала на битовом интервале. Частоты кодека и необходимые коэффициенты деления выбираем с помощью табл. 7,8,9. Синхронизация кодека выполняется внешним генератором 16.384 МГц (рис. 39). KMCLK=1:1, FDMCLK=FMCLK= 6.384 МГц. KDMCLK1=1:8, FSCLK=2.048 МГц. KDMCLK2=1:512, FS=32 кГц. Время передачи двух слов по 32 бита t32=32TSCLK=15.625 мкс не превышает периода дискретизации TS=1/FS=31.25 мкс. Определим количество точек АЦП за один период манипулированного сигнала. При частоте логического нуля f2=3300 Гц количество дискретных отсчетов АЦП на одном периоде низкочастотного колебания составляет nT0= =int(FS/f 2)=int(32000/3300)=9. Для логической единицы количество точек на период синусоиды nT1=int(FS/f)=int(32000/2200)=14. Максимальной частоте входного сигнала соответствует минимум точек дискретизации nTMIN= =int(FS/fMAX)=int(32000/9504)=3. На практике частота дискретизации часто выбирается в 3-5 раз больше того значения, которое определяется теоремой Котельникова [10]. Поэтому допустима для данного варианта также и более высокая частота дискретизации FS=64 кГц, которая обеспечивает большее количество отсчетов на один период входного сигнала. Окончательный выбор FS выполняется после расчета выходного сигнала фильтра от времени в течение нескольких битовых интервалов. Предпочтение следует отдать варианту, который обеспечивает меньшие откло-
90
нения заданного параметра от номинала (амплитуды, частоты, фазы при АМ, ЧМ, ФМ соответственно). При небольшом количестве отсчетов (4-6) на одном периоде входного синусоидального сигнал выходной сигнал цифрового фильтра заметно искажается по форме из-за дискретизации по времени и требует тщательного подбора постоянной времени τФЦАП для аналоговой фильтрации сигнала на выходе ЦАП (рис. 47). Выходной аналоговый фильтр должен преобразовать ступенчатую дискретную функцию в синусоидальный сигнал. В этом случае может потребоваться перестройка постоянной времени τФЦАП при изменении частоты входного сигнала. UЦАП
t 1
2
3
5
4
6
Рис. 47. Выходной сигнал ЦАП при 6 точках на период
6.3. Расчет коэффициентов фильтра Для определения минимального порядка КИХ-фильтра n в приведенном примере используем функцию kaiserord пакета MATLAB. Частотные параметры для этой функции задаются в абсолютных единицах (Герцах). Погрешность отклонения АЧХ использует абсолютные значения. Перевод исходных данных RP, RS из децибел в абсолютные значения пульсаций Kp и максимальный коэффициент в полосе задерживания Кm выполняется по формуле
91
К р = 10
R
p
10
K p = 0,4497 ,
−1;
R − S K m = 10 10 . K m = 0,0316 .
Коэффициенты фильтра b рассчитываются с помощью функции fir1 и окна Кайзера. » Rp = 0.8; Rs = 30; % пульсации и миним-ое ослабление в децибелах » Kp =(10^(Rp/10)-1)^0.5; Km = 10^(-Rs/10); % пересчет Rp, Rs » f1 = 2.0*V; f2 = 3.0*V; % частота логической единицы и нуля » f3 = 1.15*f2; f4=1.55*f2; f5 = 1.9*f2; f6 = 2.4*f2; » [n,Wn,beta,ftype] = kaiserord ([f3,f4,f5,f6], [1 0 1], [Kp,Km,Kp], Fs); » b = fir1(n, Wn, ftype, kaiser (n+1, beta), 'noscale'); Функция kaiserord возвращает минимальный порядок фильтра n = 38, функция fir1 определяет коэффициенты b: -0.0119 0.0002 0.0162 0.0140 -0.0046 -0.0134 -0.0043 -0.0006 -0.0126 -0.0090 0.0305 0.0570 0.0066 -0.0853 -0.0950 0.0233 0.1412 0.1004 -0.0689 0.8350 -0.0689 0.1004 0.1412 0.0233 -0.0950 -0.0853 0.0066 0.0570 0.0305 -0.0090 -0.0126 -0.0006 -0.0043 -0.0134 -0.0046 0.0140 0.0162 0.0002 -0.0119 Найденные коэффициенты не превышают по модулю единицы, следовательно, не требуют масштабирования при вводе в формате 1.15. Функция kaiserord использует простые эмпирические формулы для расчета параметров и поэтому может давать неточные результаты, особенно если в заданной АЧХ имеются частоты среза, близкие к нулю или частоте Найквиста. Поэтому после синтеза фильтра с помощью функции fir1 необходимо проверить его АЧХ функцией freqz. В некоторых вариантах курсовой работы при определении коэффициентов b возможно появление сообщения об ошибке и подсказки в MATLAB о 92
необходимости увеличения порядка n. Тогда порядок фильтра подбирается вручную изменением параметра с n+1 на n+2 и т.д. » b = fir1(n, Wn, ftype, kaiser (n+2, beta), 'noscale'); Проверяем влияние округления коэффициентов b из-за конечной разрядности процессора ADSP-2189M » [h,f]=freqz(b);
% расчет АЧХ фильтра
» subplot(1,2,1) » plot(f/pi,20*log10(abs(h)))
% 1-ый график АЧХ c коэфф-ми b
» grid on » bq=round(b*65536)/65536;
% округление коэфф-ов b (формат 1.15)
» [hq,f]=freqz(bq); » subplot(1,2,2) » plot(f/pi,20*log10(abs(hq)))
% 2-ой график АЧХ c коэфф-ми bq
» grid on Сравнение графиков на рис. 48 показывает, что амплитудно-частотные характеристики фильтров практически совпадают, дискретностью младшего разряда можно пренебречь. Формат чисел процессора 1.15 не оказывает влияния на частотную характеристику фильтра. Структурная схема синтезированного фильтра приведена на рис. 49, его уравнения имеют вид y(k) = b0 x(k) + b1 x(k – 1) + b2 x(k – 2) + ··· + b37 x(k – 37) + b38 x(k – 38). Выполним синтез режекторного БИХ-фильтра с такими же исходными данными. Функция ellipord определяет порядок эллиптического фильтра n, функция ellip возвращает его коэффициенты b и a » f1 = 2.0*V; f2 = 3.0*V
% f1,f2- частоты входного сигнала
» f3 = 1.15*f2; f4=1.55*f2; f5 = 1.90*f2; f6 = 2.4*f2;
% точки АЧХ РФ
» w3 = 2*f3/Fs; w4 = 2*f4/Fs; w5 = 2*f5/Fs; w6 = 2*f6/Fs; % нормированные частоты
93
10
10
0
0
-10
-10
-20
-20
-30
-30
-40
-40
-50
-50
-60
-60
-70
-70
-80
-80
-90
-90 0
0.5
1
а)
0
б)0.5
1
Рис. 48. АЧХ фильтра с точными коэффициентами (а) и округленными (б) X(k)
Z-1
Z-1 b0
b1
Z-1 b2
Z-1
...
b3
...
Z-1
b36
X(k-38)
b37
b38
+ Y(k) Рис. 49. Структурная схема нерекурсивного фильтра 38-го порядка
» [n, Wn] = ellipord ([w3,w6], [w4,w5], Rp, Rs); % расчет коэфф-ов b РФ
» [b,a] = ellip (n,Rp,Rs,Wn, 'stop');
Синтезированные коэффициенты фильтра (рис. 50) и уравнение b = 0.4532 -1.1644 2.2943 -2.5584 2.2943 -1.1644 0.4532 a = 1.0000 -1.9385 2.7091 -2.3638 1.6587 -0.5849 0.1273 y(k) = b0 x(k) + b1 x(k –1) + b2 x(k– 2) + b3 x(k – 3) + b4 x(k – 4) + b5 x(k– 5) + +b6 x(k–6) + a1 y(k–1) + a2 y(k–2) + a3 y(k–3) + a4 y(k – 4) + a5 y(k – 5) +a6 y(k – 6). 94
X(k)
Z-1
Z-1 b0
Z-1
Z-1 b2
b1
b3
Z-1 b4
Z-1
X(k-6)
b6
b5
Y(k)
+ a5
a6 Z-1
Z-1
a2
a3
a4
Z-1
Z-1
a1 Z-1
Z-1
Y(k-6)
Рис. 50. Структурная схема рекурсивного эллиптического фильтра 6-го порядка
Преобразуем найденные коэффициенты b и a в секции второго порядка с помощью функций tf2zp и zp2sos. » [z,p,k] = tf2zp (b,a); » sos = zp2sos (z,p,k); sos = 0.5868 -0.5171 0.5868 1.0000 -0.5171 0.1737 0.6952 -0.3290 0.6952 1.0000 -0.0647 0.8321 1.1110 -1.3495 1.1110 1.0000 -1.3567 0.8806 Набор секций второго порядка представлен в виде 6-столбцовой матрицы sos, каждая строка которой соответствует одной секции и располагает коэффициенты в следующем порядке [b0 b1 b2 1 a1 a2 ]. Одной строке соответствует передаточная функция Hi (z) = ( b0 + b1 z -1 + b2 z –2 ) / (1 + a1 z -1 + a2 z –2 ) . Последовательная (каскадная) форма реализации часто используется на практике, поскольку она позволяет ослабить нежелательные эффекты, связанные с ошибками округления. Преобразование означает разложение H(z) рекурсивного фильтра на линейные множители и эквивалентно перемножению пере-
95
даточных функций секций второго порядка. В данном примере результирующая передаточная функция образована тремя секциями второго порядка H (z) = H1 (z) H2 (z) H3 (z), где H1 (z), H2 (z), H3 (z) - передаточные функции, составленные из коэффициентов первой, второй и третьей строк матрицы sos. H1 (z) = (0.5868 – 0.5171·z -1 + 0.5868·z –2 ) / (1 – 0.5171·z -1 + 0.1737·z –2 ), H2 (z) = (0.6952 – 0.3290·z -1 + 0.6952·z –2 ) / (1 – 0.0647·z -1 + 0.8321·z –2 ), H3 (z) = (1.1110 – 1.3495·z -1 + 1.1110·z –2 ) / (1 – 1.3567·z -1 + 0.8806·z –2 ). Для записи чисел в формате 1.15 найденные коэффициенты передаточной функции необходимо масштабировать. Числитель и знаменатель делим на два, результат масштабирования запоминаем в массиве sosmas. Дискретность коэффициентов учитываем в массиве sosq. С помощью функции sos2tf выполняем преобразование секций второго порядка, параметры которых масштабированы и округлены, в коэффициенты полиномов числителя и знаменателя bq, aq. Тем самым осуществляем обратный переход записи уравнений - от каскадной формы к одной передаточной функции шестого порядка. » sosmas = sos/2; » sosq = round(sosmas*65536)/65536;
% округление коэфф-ов
» [bq,aq]= sos2tf(sosq); » [hq,f] = freqz(bq,aq); » [h,f]=freqz(b,a);
% расчет АЧХ фильтра
» subplot(1,2,1) » plot(f/pi,20*log10(abs(h))) » grid on » subplot (1,2,2)
% 2-ой график АЧХ c bq
» plot(f/pi,20*log10(abs(hq))) » grid on На рис. 51 показаны частотные характеристики БИХ-фильтра с точными коэффициентами b, a и округленными bq, aq после масштабирования и дис-
96
кретизации с учетом разрядности сигнального процессора ADSP-2189M. Как и в случае КИХ-фильтра, учет квантования не оказывает заметного влияния на вид АЧХ.
0
10
-10
0 -10
-20 -20 -30 -30 -40 -40 -50 -50 -60
-60
-70
-70 0
0.5
1
0
а)
0.5
1
б)
Рис. 51. АЧХ режекторного фильтра: а) до округления; б) после округления коэффициентов
6.4. Анализ параметров фильтра Синтез и анализ рассчитываемых фильтров рекомендуется проводить в графической среде MATLAB – SIMULINK [3, 4] или с помощью программ, приведенных в приложениях к курсовой работе. На рис. 52 приведены зависимости сигналов синтезированного фильтра от времени, полученные с помощью программы в приложении 7. Входной сигнал манипулирован
меандровым
цифровым сигналом на интервале 6 бит при скорости V=1100 бит/с. На каждом битовом
интервале
длительностью 0.9 мс происходит скачкообразное
изменение частоты синусоиды с двумя номинальными значениями 2200 Гц и
97
3300 Гц в соответствии с исходными данными рассмотренного примера. Выходной сигнал показан на последних 4 битовых интервалах, когда переходный процесс закончился. Фазовая задержка, вносимая нерекурсивным фильтром, определяется по формуле tЗ = n TS / 2, где n - порядок фильтра. 5
6
4 4
3 2
2 1 0
0
-1 -2 -2 -3
-4
-4 -5
-6 0
2
4
6
2
3
4
-3
5 -3
x 10
x 10
а)
б)
Рис. 52. Сигналы режекторного КИХ-фильтра: а) входной; б) выходной
В данном примере n=38, TS=1/ FS=1/32000=31,25 мкс, tЗ=594 мкс. Количество битовых интервалов, определяющих запаздывание выходного сигнала фильтра относительного входного воздействия nпер= round(tЗ⋅V)=round(594⋅10-6⋅1100)=1, где round - округление до ближайшего целого числа. Графики мгновенной частоты на входе и выходе фильтра построены как функции, зависящие от номера дискретного отсчета АЦП (рис. 53). Время, не98
обходимое процеессору ADSP-2189M для расчета одного значения на выходе КИХ-фильтра, составляет tЦКИХ = (n + 5) TЦ , где – время одного командного цикла процессора. 16000
8000
14000
7000
12000
6000
10000
5000
8000
4000
6000
3000
4000
2000
2000
1000
0
0 0
50
100
150
200
0
а)
50
100
150
200
б)
Рис. 53. КИХ-фильтр: а) частота входного сигнала фильтра; б) частота выходного сигнала фильтра
tЦКИХ = ( 38 + 5) · 13.3 = 572 нс. Время для расчета одного значения на выходе БИХ-фильтра tЦБИХ = (4 n + 5) TЦ , tЦБИХ = (4 · 3 + 5) · 13.3 = 226 нс. В обоих вариантах выполняется условие tЦ < TS. Постоянная времени антиэлайсингового фильтра определяется по формуле
99
τАФ = 1/ (π FS ) = RC, τАФ = 1/ (π· 32000) = 10 · 10 –6 с. Выберем элементы, реализующие антиэлайсингового фильтр, R1 = R2 = 100 Ом, С1 = С2 = 0.1 мкФ.
МЕТОДИЧЕСКИЕ УКАЗАНИЯ К
ВЫПОЛНЕНИЮ КУРСОВОЙ
РАБОТЫ 1. Цели и задачи курсовой работы Выполнение курсовой работы является завершающей стадией изучения дисциплины "Микропроцессоры и цифровая обработка сигналов" и имеет своей целью углубленное изучение работы сигнального процессора ADSP-2189M, математическое моделирование микропроцессорных систем, выполняющих цифровую обработку сигналов. Базовыми дисциплинами являются " Теория электрических сигналов" (синтез фильтров в среде MATLAB), "Вычислительная техника и информационные технологии" (разделы ЦАП, АЦП, последовательный, параллельный обмен данными). Курсовая работа решает следующие задачи: - изучение структурной схемы сигнального процессора ADSP-2189M; - анализ работы электрической схемы цифровой обработки сигналов; - синтез цифрового фильтра с заданными частотными свойствами; - анализ работы основных программных модулей процессора ADSP2189M при реализации цифрового фильтра;
100
2. Задание на курсовую работу Номер варианта курсовой работы выбирается по последней цифре номера зачетной книжки студента (табл. 17), номер подварианта – по предпоследней цифре (табл. 18). Таблица 17. Варианты исходных данных Вариант (последняя цифра номера) Параметр Структура фильтра
0 КИХ
1 БИХ
2 КИХ
3 БИХ
4 КИХ
5 БИХ
6 КИХ
7 БИХ
8 КИХ
9 БИХ
АЧХ
ФНЧ
ФВЧ
ПФ
РФ
ФВЧ
ФНЧ
РФ
ПФ
ФНЧ
ПФ
ЧМ
АМ
ФМ
АМ
ЧМ
ФМ
ЧМ
АМ
ФМ
ЧМ
Манипуляция
Таблица 18. Подварианты исходных данных Подвариант (предпоследняя цифра номера) Параметр Скорость цифрового сигнала V, бит/c Частота АМ-сигнала f1= f2 Частота ФМ-сигнала f1 = f 2 Частоты ЧМ-сигнала f1, f2 Пульсации АЧХ в полосе пропускания RP, дБ Максимальный коэффициент в полосе задерживания RS, дБ Частоты АЧХ ФНЧ f3, f4 Частоты АЧХ ФВЧ f3, f4 Частоты АЧХ ПФ f3, f4, f5, f6 Частоты АЧХ РФ f3, f4, f5, f6
0 600
1 800
2 1000
3 1200
4 1500
5 1800
6 2000
7 2200
8 2400
9 2600
6V
5V
4V
3V
5V
4V
3.5V
3V
3V
3V
4V
3V
.5V
2V
3V
2.5 V
3V
2V
3V
2.5V
4V, 6V
3V, 4.5V
2.5V, 3.5V
2V, 3V
2V, 3V
2V, 2.5V
2V, 3V
2V, 3V
2.5V, 3V, 3.5V 4.5V
1.5
2
1.8
1.2
1.6
1.4
1.8
1.1
1.5
1
25
30
30
25
20
25
30
25
30
20
1.2f2 1.65f2 0.5f1 0.85f1 0.4f1 0.85f1 1.35f2 1.75f2 1.2f2 1.65f2 1.95f2 2.35f2
1.25f2 1.6f2 0.4f1 0.9f1 0.45f1 0.8 f1 1.3 f2 1.8f2 1.15f2 1.55f2 1.95f2 2.35f2
1.15f2 1.5f2 0.45f1, 0.95f1 0.35 f1 0.8f1 1.4f2 1.8f2 1.25f2 1.6 f2 1.9f2 2.3f2
1.2f2 1.55f2 0.5 f1 0.9f1 0.4 f1 0.8f1 1.25f2 1.7f2 1.05f2 1.45f2 1.8f2 2.3f2
1.15f2 1.45 f2 0.4f1 0.9f1 0.45f1 0.85f1 1.25f2 1.65f2 1.2f2 1.6f2 1.8f2 2.2 f2
1.1 f2 1.45f2 0.5 f1 0.9 f1 0.4 f1 0.8 f1 1.3 f2 1.65f2 1.1f2 1.5f2 1.75f2 2.1f2
1.2 f2 1.4 f2 0.45f1 0.9f1 0.35f1 0.8f1 1.35f2 1.7f2 1.05f2 1.45f2 1.7f2 2.1 f2
1.15f2 1.35f2 0.5f1 0.95f1 0.40f1 0.75f1 1.25f2 1.60f2 1.25f2 1.55f2 1.75f2 2.05f2
1.05f2 1.45f2 0.4 f1 0.7 f1 0.45f1 0.80f1 1.3 f2 1.65f2 1.1f2, 1.5f2, 1.7f2, 2.1f2
1.1f2 1.4f2 0.45f1 0.95f1 0.35 f1 0.75f1 1.3 f2 1.75f2 1.05f2 1.4f2 1.65f2 2.0f2
Рассмотрим пример определения исходных данных из таблиц 17 и 18 для двух последних цифр номера зачетной книжки 79. Вариант 9, подвариант 101
7. Структура фильтра – БИХ (IIR), полосовой фильтр. На вход фильтра поступает частотно-манипулированный сигнал со скоростью потока 2200 бит /с. Частота логического нуля и логической единицы f 1 = 2V = 4400 Гц, f 2 = 3V = 6600 Гц соответственно. В полосе пропускания f1 – f2 пульсации коэффициента передачи КП не должны превышать RP = 1.1 дБ. В полосе задерживания при частотах f ≤ f3 и f ≥ f6 ослабление сигнала RS должно быть не менее 25 дБ. Точки, которыми задана характеристика, равны f3=0.4f1=880 Гц, f4=0.75f1= =1650Гц , f5 =1.25f2 = 8250 Гц , f6 =1.6f2 =10650 Гц.
KП
ФВЧ
KП
ФНЧ
1
1
f f1 f2 f3 KП 1
f f3
f4
f4
KП
ПФ
f1 f2 РФ
1
f
f
f3 f4 f1 f2 f5 f6
f1f4 ff25 f3
f4 f5
f6
Рис. 54. Амплитудно-частотные характеристики фильтров
3. Указания к оформлению пояснительной записки Пояснительная записка к курсовой пишется от руки на листах формата А4 или набирается на компьютере и должна иметь объем 20-25 листов. Рекомендуется следующая последовательность расположения материала пояснительной записки: - титульный лист; - исходные данные к курсовой работе; 102
- содержание; - введение; - структурная схема цифровой обработки сигналов; - структурная схема сигнального процессора; - описание работы основных блоков сигнального процессора, определяющих реализуемость цифрового фильтра; - электрическая схема устройства цифровой обработки; - синтез цифрового фильтра; - заключение; - список использованных источников; - приложение. В заключении необходимо дать оценку реализуемости фильтра с заданными параметрами на сигнальном процессоре. Рекомендуется дать оценку устойчивости и фазового запаздывания синтезированного фильтра. В приложениях размещаются листинги используемых программных модулей. Порядок расположения литературных источников в перечне определяется очередностью появлением ссылок в тексте пояснительной записки или объемом и приоритетом использованных данных. На каждый источник, приведенный в списке, должна быть одна ссылка. Графическая часть курсовой работы выполняется в виде рисунков, расположенных по тексту записки, или выносится в приложение. Условные графические обозначения элементов электрических схем должны соответствовать действующим ГОСТам. Оформленная курсовая работа сдается студентом руководителю на проверку и после исправления ошибок допускается к защите. При защите студент получает вопрос о работе отдельного блока структурной или электрической схемы и полученных расчетных параметрах для выбранного блока. После ответа и дополнительных вопросов руководителя курсовая работа оценивается по четырехбальной системе.
103
ПРИЛОЖЕНИЕ 1 Синтез КИХ-фильтра НЧ для частотной манипуляции %
КИХ-фильтр нижних частот, частотная манипуляция
%
окно Кайзера
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах Kp =(10^(Rp/10)-1)^0.5; Km = 10^(-Rs/20); % пересчет Rp, Rs в абсолют-ные значения f1 = 2.0*V; f2 = 3.0*V; % частота логической единицы и нуля f3 = 1.20*f2; f4=1.65*f2;
% точки АЧХ фильтра НЧ
[n,Wn,beta,ftype] = kaiserord ([f3,f4], [1 0], [Kp,Km], Fs); % определен порядок n фильтра с окном Кайзера b = fir1(n, Wn, ftype, kaiser (n+1, beta), 'noscale');
% расчет коэфф-ов
% расчет АЧХ фильтра
[h,f]=freqz(b);
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе grid on
% включение сетки на графике
title ('АЧХ в децибелах'); 2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp]) grid on
% диапазон Rp в децибелах % включение сетки на графике
title ('АЧХ в децибелах'); disp порядок_и_параметр_фильтра ; n,beta hh=impz(b);
% расчет импульсной характеристики
figure plot(hh)
% график импульсной характеристики
title ('Импульсная характеристика'); interv=6; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11=A*sin(2*pi*f1*t).*(t<1/V); phi1=2*pi*f1/V; % сигнал ЧМ на 1-ом интервале s12=A*sin(2*pi*f2*(t-1/V)+phi1).*(t>1/V).*(t<2/V);phi2=2*pi*f2/V;% 2-ой интервал
104
s13=A*sin(2*pi*f1*(t-2/V)+phi1+phi2).*(t>2/V).*(t<3/V); s14=A*sin(2*pi*f2*(t-3/V)+2*phi1+phi2).*(t>3/V).*(t<4/V);
% 3-ий интервал % 4-ый интервал
s15=A*sin(2*pi*f1*(t-4/V)+2*phi1+2*phi2).*(t>4/V).*(t<5/V); % 5-ый интервал s16=A*sin(2*pi*f2*(t-5/V)+3*phi1+2*phi2).*(t>5/V).*(t<6/V); % 6-ой интервал s17=A*sin(2*pi*f1*(t-6/V)+3*phi1+3*phi2).*(t>6/V).*(t<7/V); % 7-ой интервал s18=A*sin(2*pi*f2*(t-7/V)+4*phi1+3*phi2).*(t>7/V).*(t<8/V); % 8-ой интервал s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,1,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5; z21(1) =(f1+f2)/2; for m = 2:maxt if abs(s(m+1)) > 0.01 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
% расчет частоты входного сигнала
end m=1:maxt; con2=length(z21); figure
105
subplot(1,2,1) plot(m,z21)
% график мгновенной частоты FВХ (m)
grid on
% время t = m/FS
title ('частота входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z22(1) = (f1+f2)/2; for m = 1:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); else z1 = 0.7; end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала end m=1:maxt; subplot(1,2,2) plot(m,z22)
% график мгновенной частоты FВЫХ (m)
grid on
% время t = m/FS
title ('частота выходного сигнала от m');
ПРИЛОЖЕНИЕ 2 Синтез БИХ-фильтра ВЧ при амплитудной манипуляции %
БИХ-фильтр верхних частот, амплитудная манипуляция
%
функция - ellip
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах f1 = 6.0*V; f2 = f1; % f1 - частота входного сигнала f3 = 0.50*f1; f4=0.85*f1;
% точки АЧХ ВЧ-фильтра
w3 = 2*f3/Fs; w4 = 2*f4/Fs; % нормированная частота [n, Wn] = ellipord(w4,w3, Rp,Rs); % определен порядок n фильтра 106
% n=60; % меняем порядок n фильтра, найденный функцией ellipord [b,a] = ellip(n,Rp,Rs,Wn,'high');
% расчет коэфф-ов
% расчет АЧХ фильтра
[h,f]=freqz(b,a);
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе % диапазон
ylim([-60 10])
% включение сетки на графике
grid on
title ('АЧХ в децибелах'); 2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp])
% диапазон Rp в децибелах % включение сетки на графике
grid on
title ('АЧХ в децибелах'); disp порядок_фильтра ; n % pause hh=impz(b,a);
% расчет импульсной характеристики
figure % график импульсной характеристики
plot(hh)
title ('Импульсная характеристика'); interv=8; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11 = A*sin(2*pi*f1*t).*(t<1/V); s12 = 0.*(t>1/V).*(t<2/V);
% сигнал ЧМ на 1-ом битовом интервале % 2-ой битовый интервал
s13 = A*sin(2*pi*f1*t).*(t>2/V).*(t<3/V); s14 = 0.*(t>3/V).*(t<4/V);
% 4-ый битовый интервал
s15 = A*sin(2*pi*f1*t).*(t>4/V).*(t<5/V); s16 = 0.*(t>5/V).*(t<6/V);
% 5-ый битовый интервал
% 6-ой битовый интервал
s17 = A*sin(2*pi*f1*t).*(t>6/V).*(t<7/V); s18 = 0.*(t>7/V).*(t<8/V);
% 3-ий битовый интервал
% 7-ой битовый интервал
% 8-ой битовый интервал
s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
107
title ('входной сигнал от времени'); s1 = filter (b,a,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1)
xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5;z21(1) = 0;z24(1)= 0; for m = 2:maxt if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1);else z1 =0.5; end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
%
частота входного сигнала
% расчет амплитуды входного сигнала z3=sqrt(abs(s(m+1)^2-s(m)*s(m+2))); if abs(z21(m)) > 0.02 z24(m)=z3*Fs/(2*pi*z21(m)); else z24(m)=z24(m-1) ;%
амплитуда входного сигнала
end end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z24)
% график мгновенной амплитуды A_ВХ (m)
grid on
% время t = m/FS
title ('амплитуда входного сигнала от m');
108
% расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z34(1) = 0; z22(1) = (f1+f2)/2; for m = 2:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); else z1 = 0.9; end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала z3=sqrt(abs(s1(m+1)^2-s1(m)*s1(m+2))); if abs(z22(m)) > 0.02 z34(m)=z3*Fs/(2*pi*z22(m)); else z34(m) = 0
;% расчет амплитуды выходного сигнала
end end m=1:maxt; subplot(1,2,2) plot(m,z34)
% график мгновенной амплитуды А_ВЫХ (m)
grid on
% время t = m/FS
title ('амплитуда выходного сигнала от m');
ПРИЛОЖЕНИЕ 3 Синтез полосового КИХ-фильтра при фазовой манипуляции %
Полосовой КИХ-фильтр, фазовая манипуляция
%
окно Кайзера
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 28; % пульсации и минимальное ослабление в децибелах Kp =(10^(Rp/10)-1)^0.5; Km = 10^(-Rs/20); % пересчет Rp, Rs в абсолютные значения f1 = 4.0*V; f2 = f1; % f1 - частота входного сигнала f3 = 0.40*f1; f4=0.85*f1; f5 = 1.35*f2; f6 = 1.75*f2;
% точки АЧХ ПФ
[n,Wn,beta,ftype] = kaiserord ([f3,f4,f5,f6], [0 1 0], [Km,Kp,Km], Fs); % определен порядок n фильтра с окном Кайзера 109
% расчет коэфф-ов ПФ
b = fir1(n, Wn, ftype, kaiser (n+1, beta), 'noscale'); % расчет АЧХ фильтра
[h,f]=freqz(b);
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе % включение сетки на графике
grid on
title ('АЧХ в децибелах'); 2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp])
% диапазон Rp в децибелах % включение сетки на графике
grid on
title ('АЧХ в децибелах'); disp порядок_и_параметр_фильтра ; n,beta % расчет импульсной характеристики
hh=impz(b); figure
% график импульсной характеристики
plot(hh)
title ('Импульсная характеристика'); % pause interv=8; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11 = A*sin(2*pi*f1*t).*(t<1/V);
% сигнал ЧМ на 1-ом битовом интервале % 2-ой битовый интервал
s12 = -A*sin(2*pi*f2*t).*(t>1/V).*(t<2/V);
% 3-ий битовый интервал
s13 = A*sin(2*pi*f1*t).*(t>2/V).*(t<3/V);
% 4-ый битовый интервал
s14 = -A*sin(2*pi*f2*t).*(t>3/V).*(t<4/V); s15 = A*sin(2*pi*f1*t).*(t>4/V).*(t<5/V);
% 5-ый битовый интервал
s16 = -A*sin(2*pi*f2*t).*(t>5/V).*(t<6/V);
% 6-ой битовый интервал % 7-ой битовый интервал
s17 = A*sin(2*pi*f1*t).*(t>6/V).*(t<7/V);
% 8-ой битовый интервал
s18 = -A*sin(2*pi*f2*t).*(t>7/V).*(t<8/V); s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,1,s); % s1 - выходной сигнал фильтра
110
subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5; for m = 1:maxt if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
% расчет частоты входного сигнала
end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z21)
% график мгновенной частоты FВХ (m)
grid on
% время t = m/FS
title ('частота входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; for m = 1:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1));
111
end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала end m=1:maxt; subplot(1,2,2) plot(m,z22)
% график мгновенной частоты FВЫХ (m)
grid on
% время t = m/FS
title ('частота выходного сигнала от m');
ПРИЛОЖЕНИЕ 4 Синтез режекторного БИХ-фильтра при амплитудной манипуляции %
Режекторный БИХ-фильтр, амплитудная манипуляия
%
функция ellip
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах f1 = 6.0*V; f2 = f1; % f1 - частота входного сигнала f3 = 1.20*f2; f4=1.65*f2; f5=1.95*f2; f6=2.35*f2;
% точки АЧХ ВЧ-фильтра
w3 = 2*f3/Fs; w4 = 2*f4/Fs; w5 = 2*f5/Fs; w6 = 2*f6/Fs; % нормированная частота [n, Wn] = ellipord([w3,w6],[w4,w5],Rp,Rs); % определен порядок n фильтра % n=3; % меняем порядок n фильтра, найденный функцией ellipord [b,a] = ellip (n,Rp,Rs,Wn,'stop');
% расчет коэфф-ов
% расчет АЧХ фильтра
[h,f]=freqz(b,a);
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе % диапазон
ylim([-60 10]) grid on
% включение сетки на графике
title ('АЧХ в децибелах'); subplot(1,2,2) %
2-ой график АЧХ для определения пульсаций
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp]) grid on
% диапазон Rp в децибелах % включение сетки на графике 112
title ('АЧХ в децибелах'); disp порядок_фильтра ; n % расчет импульсной характеристики
hh=impz(b,a); figure
% график импульсной характеристики
plot(hh) xlim([0 100])
% диапазон графика
title ('Импульсная характеристика'); interv=8; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11 = A*sin(2*pi*f1*t).*(t<1/V);
% сигнал ЧМ на 1-ом битовом интервале % 2-ой битовый интервал
s12 = 0.*(t>1/V).*(t<2/V);
s13 = A*sin(2*pi*f1*t).*(t>2/V).*(t<3/V);
% 3-ий битовый интервал
% 4-ый битовый интервал
s14 = 0.*(t>3/V).*(t<4/V);
s15 = A*sin(2*pi*f1*t).*(t>4/V).*(t<5/V);
% 5-ый битовый интервал
% 6-ой битовый интервал
s16 = 0.*(t>5/V).*(t<6/V);
s17 = A*sin(2*pi*f1*t).*(t>6/V).*(t<7/V);
% 7-ой битовый интервал
% 8-ой битовый интервал
s18 = 0.*(t>7/V).*(t<8/V);
s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,a,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5;z21(1) = 0;z24(1)= 0;
113
for m = 2:maxt if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1);else z1 =0.5; end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
%
частота входного сигнала
% расчет амплитуды входного сигнала z3=sqrt(abs(s(m+1)^2-s(m)*s(m+2))); if abs(z21(m)) > 0.02 z24(m)=z3*Fs/(2*pi*z21(m)); else z24(m)=z24(m-1) ;%
амплитуда входного сигнала
end end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z24)
% график мгновенной амплитуды A_ВХ (m)
grid on
% время t = m/FS
title ('амплитуда входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z34(1) = 0; z22(1) = (f1+f2)/2; for m = 2:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); else z1 = 0.9; end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала z3=sqrt(abs(s1(m+1)^2-s1(m)*s1(m+2))); if abs(z22(m)) > 0.02 z34(m)=z3*Fs/(2*pi*z22(m)); else z34(m) = z34(m-1) ;% расчет амплитуды выходного сигнала
114
end end m=1:maxt; subplot(1,2,2) plot(m,z34)
% график мгновенной амплитуды А_ВЫХ (m)
grid on
% время t = m/FS
title ('амплитуда выходного сигнала от m');
ПРИЛОЖЕНИЕ 5 Синтез КИХ-фильтра ВЧ при частотной манипуляции %
КИХ-фильтр верхних частот, частотная манипуляция
%
окно Кайзера
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах Kp =(10^(Rp/10)-1)^0.5; Km = 10^(-Rs/20); % пересчет Rp, Rs в абсолют-ные значения f1 = 2.0*V; f2 = 3.0*V; % частота логической единицы и нуля f3 = 0.50*f1; f4=0.85*f1;
% точки АЧХ фильтра ВЧ
[n,Wn,beta,ftype] = kaiserord ([f3,f4], [0 1], [Km,Kp], Fs); % определен порядок n фильтра с окном Кайзера b = fir1(n, Wn, ftype, kaiser (n+2, beta), 'noscale');
% расчет коэфф-ов
% расчет АЧХ фильтра
[h,f]=freqz(b);
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе grid on
% включение сетки на графике
title ('АЧХ в децибелах'); 2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp]) grid on
% диапазон Rp в децибелах % включение сетки на графике
title ('АЧХ в децибелах'); disp порядок_и_параметр_фильтра ; n,beta 115
% pause % расчет импульсной характеристики
hh=impz(b); figure
% график импульсной характеристики
plot(hh)
title ('Импульсная характеристика'); % pause interv=6; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11=A*sin(2*pi*f1*t).*(t<1/V); phi1=2*pi*f1/V; % сигнал ЧМ на 1-ом интервале s12=A*sin(2*pi*f2*(t-1/V)+phi1).*(t>1/V).*(t<2/V);phi2=2*pi*f2/V;% 2-ой интервал s13=A*sin(2*pi*f1*(t-2/V)+phi1+phi2).*(t>2/V).*(t<3/V); s14=A*sin(2*pi*f2*(t-3/V)+2*phi1+phi2).*(t>3/V).*(t<4/V);
% 3-ий интервал % 4-ый интервал
s15=A*sin(2*pi*f1*(t-4/V)+2*phi1+2*phi2).*(t>4/V).*(t<5/V);
% 5-ый интервал
s16=A*sin(2*pi*f2*(t-5/V)+3*phi1+2*phi2).*(t>5/V).*(t<6/V);
% 6-ой интервал
s17=A*sin(2*pi*f1*(t-6/V)+3*phi1+3*phi2).*(t>6/V).*(t<7/V);
% 7-ой интервал
s18=A*sin(2*pi*f2*(t-7/V)+4*phi1+3*phi2).*(t>7/V).*(t<8/V);
% 8-ой интервал
s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,1,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % pause % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5; z21(1) =(f1+f2)/2; for m = 2:maxt
116
if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
% расчет частоты входного сигнала
end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z21)
% график мгновенной частоты FВХ (m)
grid on
% время t = m/FS
title ('частота входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z22(1) = (f1+f2)/2; for m = 1:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); else z1 = 0.7; end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала end m=1:maxt; subplot(1,2,2) plot(m,z22)
% график мгновенной частоты FВЫХ (m)
grid on
% время t = m/FS
title ('частота выходного сигнала от m');
117
ПРИЛОЖЕНИЕ 6 Синтез БИХ-фильтра НЧ при фазовой манипуляции %
БИХ-фильтр нижних частот, фазовая манипуляция
%
функция - ellip (эллиптический фильтр)
clear all; % уничтожаем все переменные A = 5; Fs =64000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах f1 = 4.0*V; f2 = f1; % f1 - частота входного сигнала f3 = 1.20*f1; f4=1.65*f1; w3 = 2*f3/Fs; w4 = 2*f4/Fs;
% точки АЧХ ВЧ-фильтра % нормированная частота
[n, Wn] = ellipord(w3,w4, Rp,Rs); % определен порядок n фильтра [b,a] = ellip (n,Rp,Rs,Wn);
% расчет коэфф-ов
[h,f]=freqz(b,a);
% расчет АЧХ фильтра
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе grid on
% включение сетки на графике
title ('АЧХ в децибелах'); 2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp]) grid on
% диапазон Rp в децибелах % включение сетки на графике
title ('АЧХ в децибелах'); disp порядок_фильтра ; n hh=impz(b,a);
% расчет импульсной характеристики
figure plot(hh)
% график импульсной характеристики
title ('Импульсная характеристика'); interv=8; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11 = A*sin(2*pi*f1*t).*(t<1/V);
% сигнал ЧМ на 1-ом битовом интервале % 2-ой битовый интервал
s12 = -A*sin(2*pi*f2*t).*(t>1/V).*(t<2/V);
118
% 3-ий битовый интервал
s13 = A*sin(2*pi*f1*t).*(t>2/V).*(t<3/V);
% 4-ый битовый интервал
s14 = -A*sin(2*pi*f2*t).*(t>3/V).*(t<4/V); s15 = A*sin(2*pi*f1*t).*(t>4/V).*(t<5/V);
% 5-ый битовый интервал
s16 = -A*sin(2*pi*f2*t).*(t>5/V).*(t<6/V);
% 6-ой битовый интервал % 7-ой битовый интервал
s17 = A*sin(2*pi*f1*t).*(t>6/V).*(t<7/V);
% 8-ой битовый интервал
s18 = -A*sin(2*pi*f2*t).*(t>7/V).*(t<8/V); s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,a,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5; z21(1) = 0.5; za1(1) =0; phi1(1) = 0; for m = 2:maxt if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
% частота входного сигнала
if abs(z21(m)) > 0.01 za1(m) = Fs*sqrt(s(m+1)^2-s(m)*s(m+2))/(2*pi*z21(m)); else za1(m) = 0.005;
% мгновенная амплитуда входного сигнала
end end
119
m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z21)
% график мгновенной частоты FВХ (m)
grid on
% время t = m/FS
title ('частота входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z22(1) = 0.5; for m = 2:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала end m=1:maxt; subplot(1,2,2) plot(m,z22)
% график мгновенной частоты FВЫХ (m)
grid on
% время t = m/FS
title ('частота выходного сигнала от m');
ПРИЛОЖЕНИЕ 7 Синтез режекторного КИХ-фильтра при частотной манипуляции %
Режекторный КИХ-фильтр, частотная манипуляция
%
окно Кайзера
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 1100; % амплитуда, частота дискрет - ии, скорость Rp = 0.8; Rs = 30; % пульсации и минимальное ослабление в децибелах Kp =(10^(Rp/10)-1)^0.5; Km = 10^(-Rs/20); % пересчет Rp, Rs в абсолют-ные значения
120
f1 = 2.0*V; f2 = 3.0*V; % частота логической единицы и нуля % точки АЧХ
f3 = 1.15*f2; f4=1.55*f2; f5 = 1.9*f2; f6 = 2.4*f2;
[n,Wn,beta,ftype] = kaiserord ([f3,f4,f5,f6], [1 0 1], [Kp,Km,Kp], Fs); % определен порядок n фильтра с окном Кайзера % расчет коэфф-ов РФ
b = fir1(n, Wn, ftype, kaiser (n+1, beta), 'noscale'); % расчет АЧХ фильтра
[h,f]=freqz(b);
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе grid on title ('АЧХ в децибелах'); 2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp]) grid on
% диапазон Rp в децибелах % включение сетки на графике
title ('АЧХ в децибелах'); disp порядок_и_параметр_фильтра ; n,beta hh=impz(b);
% расчет импульсной характеристики
figure plot(hh)
% график импульсной характеристики
title ('Импульсная характеристика'); interv=6; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11=A*sin(2*pi*f1*t).*(t<1/V); phi1=2*pi*f1/V; % сигнал ЧМ на 1-ом интервале s12=A*sin(2*pi*f2*(t-1/V)+phi1).*(t>1/V).*(t<2/V);phi2=2*pi*f2/V;% 2-ой интервал s13=A*sin(2*pi*f1*(t-2/V)+phi1+phi2).*(t>2/V).*(t<3/V); s14=A*sin(2*pi*f2*(t-3/V)+2*phi1+phi2).*(t>3/V).*(t<4/V);
% 3-ий интервал % 4-ый интервал
s15=A*sin(2*pi*f1*(t-4/V)+2*phi1+2*phi2).*(t>4/V).*(t<5/V);
% 5-ый интервал
s16=A*sin(2*pi*f2*(t-5/V)+3*phi1+2*phi2).*(t>5/V).*(t<6/V);
% 6-ой интервал
s17=A*sin(2*pi*f1*(t-6/V)+3*phi1+3*phi2).*(t>6/V).*(t<7/V);
% 7-ой интервал
s18=A*sin(2*pi*f2*(t-7/V)+4*phi1+3*phi2).*(t>7/V).*(t<8/V);
% 8-ой интервал
s = s11+s12+s13+s14+s15+s16+s17+s18;
%
figure subplot(1,2,1)
121
расчет входного сигнала
plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,1,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5; z21(1) =(f1+f2)/2; for m = 2:maxt if abs(s(m+1)) >0.01 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
% расчет частоты входного сигнала
end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z21)
% график мгновенной частоты FВХ (m)
grid on
% время t = m/FS
title ('частота входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z22(1) = (f1+f2)/2; for m = 1:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); else z1 = 0.7; end
122
if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала end m=1:maxt; subplot(1,2,2) plot(m,z22)
% график мгновенной частоты FВЫХ (m)
grid on
% время t = m/FS
title ('частота выходного сигнала от m');
ПРИЛОЖЕНИЕ 8 Синтез полосового БИХ-фильтра при амплитудной манипуляции %
Полосовой БИХ-фильтр , амплитудная манипуляция
%
функция - ellip
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах f1 = 6.0*V; f2 = f1; % f1 - частота входного сигнала f3 = 0.40*f1; f4=0.85*f1; f5=1.35*f2; f6=1.75*f2;
% точки АЧХ ВЧ-фильтра
w3 = 2*f3/Fs; w4 = 2*f4/Fs; w5 = 2*f5/Fs; w6 = 2*f6/Fs; % нормированная частота [n, Wn] = ellipord([w4,w5],[w3,w6], Rp,Rs); % определен порядок n фильтра % n=7; % меняем порядок n фильтра, найденный функцией ellipord [b,a] = ellip (n,Rp,Rs,Wn);
% расчет коэфф-ов
[h,f]=freqz(b,a);
% расчет АЧХ фильтра
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-80 10]) grid on
% включение сетки на графике
title ('АЧХ в децибелах');
123
2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp])
% диапазон Rp в децибелах % включение сетки на графике
grid on
title ('АЧХ в децибелах'); disp порядок_фильтра ; n hh=impz(b,a);
% расчет импульсной характеристики
figure % график импульсной характеристики
plot(hh) xlim([0 150])
title ('Импульсная характеристика'); interv=8; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11 = A*sin(2*pi*f1*t).*(t<1/V);
% сигнал ЧМ на 1-ом битовом интервале % 2-ой битовый интервал
s12 = 0.*(t>1/V).*(t<2/V);
s13 = A*sin(2*pi*f1*t).*(t>2/V).*(t<3/V);
% 3-ий битовый интервал
% 4-ый битовый интервал
s14 = 0.*(t>3/V).*(t<4/V);
s15 = A*sin(2*pi*f1*t).*(t>4/V).*(t<5/V);
% 5-ый битовый интервал
% 6-ой битовый интервал
s16 = 0.*(t>5/V).*(t<6/V);
s17 = A*sin(2*pi*f1*t).*(t>6/V).*(t<7/V);
% 7-ой битовый интервал
% 8-ой битовый интервал
s18 = 0.*(t>7/V).*(t<8/V);
s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,a,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-6)/V interv/V])
% вых-ой сигнал на 6 последних интервалах
grid on title ('выходной сигнал на 6 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t)
124
maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5;z21(1) = 0;z24(1)= 0; for m = 2:maxt if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
%
частота входного сигнала
% расчет амплитуды входного сигнала z3=sqrt(abs(s(m+1)^2-s(m)*s(m+2))); if abs(z21(m)) > 0.02 z24(m)=z3*Fs/(2*pi*z21(m)); else z24(m)= 0 ;%
амплитуда входного сигнала
end end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z24)
% график мгновенной амплитуды A_ВХ (m)
grid on
% время t = m/FS
title ('амплитуда входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z34(1) = 0; z22(1) = (f1+f2)/2; for m = 2:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); else z1 = 0.9; end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end
125
z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала z3=sqrt(abs(s1(m+1)^2-s1(m)*s1(m+2))); if abs(z22(m)) > 0.02 z34(m)=z3*Fs/(2*pi*z22(m)); else z34(m) = z34(m-1) ;% расчет амплитуды выходного сигнала end end m=1:maxt; subplot(1,2,2) % график мгновенной амплитуды А_ВЫХ (m)
plot(m,z34)
% время t = m/FS
grid on
title ('амплитуда выходного сигнала от m');
ПРИЛОЖЕНИЕ 9 Синтез КИХ-фильтра НЧ при фазовой манипуляции %
КИХ-фильтр нижних частот, фазовая манипуляция
%
окно Кайзера
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах Kp =(10^(Rp/10)-1)^0.5; Km = 10^(-Rs/20); % пересчет Rp, Rs в абсолют-ные значения f1 = 4.0*V; f2 = f1; % f1 - частота входного сигнала f3 = 1.20*f2; f4=1.65*f2;
% точки АЧХ фильтра НЧ
[n,Wn,beta,ftype] = kaiserord ([f3,f4], [1 0], [Kp,Km], Fs); % определен порядок n фильтра с окном Кайзера b = fir1(n, Wn, ftype, kaiser (n+1, beta), 'noscale');
% расчет коэфф-ов
% расчет АЧХ фильтра
[h,f]=freqz(b);
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе grid on
% включение сетки на графике
title ('АЧХ в децибелах'); subplot(1,2,2) %
2-ой график АЧХ для определения пульсаций
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp])
% диапазон Rp в децибелах
126
% включение сетки на графике
grid on
title ('АЧХ в децибелах'); disp порядок_и_параметр_фильтра ; n,beta % pause % расчет импульсной характеристики
hh=impz(b); figure
% график импульсной характеристики
plot(hh)
title ('Импульсная характеристика'); % pause interv=8; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11 = A*sin(2*pi*f1*t).*(t<1/V);
% сигнал ЧМ на 1-ом битовом интервале % 2-ой битовый интервал
s12 = -A*sin(2*pi*f2*t).*(t>1/V).*(t<2/V);
% 3-ий битовый интервал
s13 = A*sin(2*pi*f1*t).*(t>2/V).*(t<3/V);
% 4-ый битовый интервал
s14 = -A*sin(2*pi*f2*t).*(t>3/V).*(t<4/V); s15 = A*sin(2*pi*f1*t).*(t>4/V).*(t<5/V);
% 5-ый битовый интервал
s16 = -A*sin(2*pi*f2*t).*(t>5/V).*(t<6/V);
% 6-ой битовый интервал % 7-ой битовый интервал
s17 = A*sin(2*pi*f1*t).*(t>6/V).*(t<7/V);
% 8-ой битовый интервал
s18 = -A*sin(2*pi*f2*t).*(t>7/V).*(t<8/V); s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,1,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % pause % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
127
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5; for m = 1:maxt if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1)); end z21(m) = Fs*acos(z1)/(2*pi);
% расчет частоты входного сигнала
end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z21)
% график мгновенной частоты FВХ (m)
grid on
% время t = m/FS
title ('частота входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; for m = 1:maxt if abs(s1(m+1)) > 0.02 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала end m=1:maxt; subplot(1,2,2) plot(m,z22)
% график мгновенной частоты FВЫХ (m)
grid on
% время t = m/FS
128
title ('частота выходного сигнала от m');
ПРИЛОЖЕНИЕ 10 Синтез полосового БИХ-фильтра при частной манипуляции %
Полосовой БИХ-фильтр, частотная манипуляция
%
функция - ellip (эллиптический фильтр)
clear all; % уничтожаем все переменные A = 5; Fs =32000; V = 600; % амплитуда, частота дискрет - ии, скорость Rp = 1.5; Rs = 25; % пульсации и минимальное ослабление в децибелах f1 = 2.0*V; f2 = 3.0*V; % f1,f2 - частоты входного сигнала f3 = 0.40*f1; f4=0.85*f1; f5=1.35*f2; f6=1.75*f2;
% точки АЧХ фильтра
w3 = 2*f3/Fs; w4 = 2*f4/Fs; w5 = 2*f5/Fs; w6 = 2*f6/Fs; % нормированная частота [n, Wn] = ellipord([w4,w5],[w3,w6], Rp,Rs); % определен порядок n фильтра [b,a] = ellip (n,Rp,Rs,Wn);
% расчет коэфф-ов
[h,f]=freqz(b,a);
% расчет АЧХ фильтра
subplot(1,2,1) % 1-ый график АЧХ с автоматическим выбором масштаба plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе % диапазон АЧХ
ylim([-60 10]) grid on
% включение сетки на графике
title ('АЧХ в децибелах'); 2-ой график АЧХ для определения пульсаций
subplot(1,2,2) %
plot(f/pi,20*log10(abs(h))) % график АЧХ в логарифмическом масштабе ylim([-Rp Rp]) grid on
% диапазон Rp в децибелах % включение сетки на графике
title ('АЧХ в децибелах'); disp порядок_фильтра ; n % pause hh=impz(b,a);
% расчет импульсной характеристики
figure plot(hh)
% график импульсной характеристики
129
title ('Импульсная характеристика'); % pause interv=6; % количество битовых интервалов t = 0:1/Fs:interv/V;
% диапазон времени равен interv битовым интервалам
s11=A*sin(2*pi*f1*t).*(t<1/V); phi1=2*pi*f1/V; % сигнал ЧМ на 1-ом интервале s12=A*sin(2*pi*f2*(t-1/V)+phi1).*(t>1/V).*(t<2/V);phi2=2*pi*f2/V;% 2-ой интервал s13=A*sin(2*pi*f1*(t-2/V)+phi1+phi2).*(t>2/V).*(t<3/V); s14=A*sin(2*pi*f2*(t-3/V)+2*phi1+phi2).*(t>3/V).*(t<4/V);
% 3-ий интервал % 4-ый интервал
s15=A*sin(2*pi*f1*(t-4/V)+2*phi1+2*phi2).*(t>4/V).*(t<5/V);
% 5-ый интервал
s16=A*sin(2*pi*f2*(t-5/V)+3*phi1+2*phi2).*(t>5/V).*(t<6/V);
% 6-ой интервал
s17=A*sin(2*pi*f1*(t-6/V)+3*phi1+3*phi2).*(t>6/V).*(t<7/V);
% 7-ой интервал
s18=A*sin(2*pi*f2*(t-7/V)+4*phi1+3*phi2).*(t>7/V).*(t<8/V);
% 8-ой интервал
s = s11+s12+s13+s14+s15+s16+s17+s18;
%
расчет входного сигнала
figure subplot(1,2,1) plot(t,s)
% график входного сигнала от времени
title ('входной сигнал от времени'); s1 = filter (b,a,s); % s1 - выходной сигнал фильтра subplot(1,2,2) plot(t,s1) xlim([(interv-4)/V interv/V])
% вых-ой сигнал на 4 последних интервалах
grid on title ('выходной сигнал на 4 интервалах'); % расчет мгновенной частоты по трем точкам входного сигнала s(t) maxt =length(t)-5;
% последние 5 точек вектора t не используются
m = 1:maxt; % m - количество точек для расчета частоты con1=length(m); z1=0.5; z21(1) =(f1+f2)/2; for m = 2:maxt if abs(s(m+1)) >0.02 z1 =0.5*(s(m)+s(m+2))/s(m+1); end if m > 1 z21(m) = z21(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s(m)+s(m+2))/s(m+1));
130
end z21(m) = Fs*acos(z1)/(2*pi);
% расчет частоты входного сигнала
end m=1:maxt; con2=length(z21); figure subplot(1,2,1) plot(m,z21)
% график мгновенной частоты FВХ (m)
grid on
% время t = m/FS
title ('частота входного сигнала от m'); % расчет мгновенной частоты по трем точкам выходного сигнала s1(t) z1=0.5; z22(1) = (f1+f2)/2; for m = 2:maxt if abs(s1(m+1)) > 0.01 z1 =0.5*(s1(m)+s1(m+2))/s1(m+1); end if m > 1 z22(m) = z22(m-1); end if abs(z1) > 1 z1 = sign(0.5*(s1(m)+s1(m+2))/s1(m+1)); end z22(m) = Fs*acos(z1)/(2*pi); % расчет частоты выходного сигнала end m=1:maxt; subplot(1,2,2) plot(m,z22)
% график мгновенной частоты FВЫХ (m)
grid on
% время t = m/FS
title ('частота выходного сигнала от m');
131
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Корнеев В.В., Киселев А.В. Современные микропроцессоры. – СПб.: БХВ-Петербург, 2003. 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. Новиков Ю.В., Скоробогатов П.К. Основы микропроцессорной техники. – М.: ИНТУИТ.РУ, 2003. 8.
Микропроцессорные системы / Под ред. Д.В. Пузанкова. – СПб.: По-
литехника, 2002. 9.
Щелкунов Н.Н., Дианов А.П. Микропроцессорные средства и сис-
темы. - М.: Радио и связь, 1989. 10. Осипов Л.А. Обработка сигналов на цифровых процессорах. Линейноаппроксимирующий метод. – М.: Горячая линия, 2001. 11. Щелкунов Н.Н., Дианов А.П. Микропроцессорные средства и системы. - М.: Радио и связь, 1989. 12. Угрюмов Е.П. Цифровая схемотехника. – СПб.: БХВ-Петербург, 2001. 13. Микропроцессоры. В 3 кн. Кн. 2: Средства сопряжения. Контролирующие и информационно-управляющие системы /Под ред. Л.Н. Преснухина. – Минск: Высш. шк., 1987. 14. Шахнович И. Современные технологии беспроводной связи. – М.: Техносфера, 2004.
132
ОГЛАВЛЕНИЕ Введение .......................................................................................................................3 Глава 1. СТРУКТУРА И ЗАДАЧИ ЦИФРОВОЙ ОБРАБОТКИ аНАЛОГОВЫХ СИГНАЛОВ ....................................................................................4 Глава 2. ОРГАНИЗАЦИЯ МИКРОПРОЦЕССОРНЫХ СИСТЕМ .....................10 2.1. Состав вычислительной системы..............................................................10 2.2. Системная магистраль..................................................................................13 2.3. Шины серийных микропроцессоров..........................................................18 2.4. Способы обмена процессора с внешними устройствами ..........................23 Глава 3. СИСТЕМНЫЙ ИНТЕРФЕЙС ADSP-2189M ..........................................28 3.1. Структура процессора ADSP-2189M........................................................28 3.2. Режимы работы микросхемы ADSP-2189M ...........................................35 3.3. Подключение устройств к сигнальному процессору............................44 Глава 4. ПЕРИФЕРИЙНЫЕ МИКРОСХЕМЫ ПРОЦЕССОРА.......................50 4.1. Встроенная и внешняя память...................................................................50 4.2. Последовательный кодек AD73322 ...........................................................54 4.3. Последовательный интерфейс процессора ...............................................59 Глава 5. ОБРАБОТКА ДАННЫХ СИГНАЛЬНЫМ ПРОЦЕССОРОМ ..............70 5.1. Ввод-вывод данных по прерываниям .......................................................70 5.2. Организация циклического буфера............................................................77 5.3. Форматы представления чисел...................................................................81 6. СИНТЕЗ И РЕАЛИЗАЦИЯ ЦИФРОВОГО ФИЛЬТРА .................................86 6.1. Выбор фильтра и входного сигнала.........................................................86 6.2. Частота дискретизации аналогового сигнала .........................................89 6.3. Расчет коэффициентов фильтра .................................................................91 6.4. Анализ параметров фильтра .......................................................................97 МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ ...................................................................................................................100 1. Цели и задачи курсовой работы ..................................................................100 133
2. Задание на курсовую работу..........................................................................101 3. Указания к оформлению пояснительной записки.......................................102 ПРИЛОЖЕНИЕ 1 Синтез КИХ-фильтра НЧ для частотной манипуляции.......104 ПРИЛОЖЕНИЕ 2 Синтез БИХ-фильтра ВЧ при амплитудной манипуляции .106 ПРИЛОЖЕНИЕ 3 Синтез полосового КИХ-фильтра при фазовой манипуляции.............................................................................................................109 ПРИЛОЖЕНИЕ 4 Синтез режекторного БИХ-фильтра при амплитудной манипуляции.............................................................................................................112 ПРИЛОЖЕНИЕ 5 Синтез КИХ-фильтра ВЧ при частотной манипуляции .....115 ПРИЛОЖЕНИЕ 6 Синтез БИХ-фильтра НЧ при фазовой манипуляции.........118 ПРИЛОЖЕНИЕ 7 Синтез режекторного КИХ-фильтра при частотной манипуляции.............................................................................................................120 ПРИЛОЖЕНИЕ 8 Синтез полосового БИХ-фильтра при амплитудной манипуляции.............................................................................................................123 ПРИЛОЖЕНИЕ 9 Синтез КИХ-фильтра НЧ при фазовой манипуляции.........126 ПРИЛОЖЕНИЕ 10 Синтез полосового БИХ-фильтра при частной манипуляции.............................................................................................................129 БИБЛИОГРАФИЧЕСКИЙ СПИСОК ....................................................................132
134
Учебное издание Аксенов Владимир Петрович Сигнальные процессоры
Редактор В.В. Сизова Техн. редактор Н.М. Белохонова Компьютерная верстка автора
Подписано в печать. Формат 60x84/16. Усл. печ. л. 7,9. Уч.-изд. л. 5,26. Тираж 100 экз. Заказ. ___________________________________________________________________ Издательство ДВГТУ, 690950, Владивосток, Пушкинская,10 Типография издательства ДВГТУ, 690950, Владивосток, Пушкинская, 10 135