Text
                    Разра№ка устройств на основе
цифровых ситнальвых процессоров
фирмы Шоу Detices
с исвопьзоваиием Visual DSP++

О. Д. Валь па Разработка устройств иа основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ Москва Горячая линия - Телеком 2007
УДК 681.325.5 ББК 32.84 В16 Вальпа О. Д. В16 Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++. - М.: Горячая линия-Телеком, 2007 . - 270 с. ISBN 5-93517-342-5. Книга предназначена для самостоятельного изучения и применения на практике цифровых сигнальных процессоров DSP (Digital Signal Processor). На примере популярной микросхемы ADSP2181 фирмы Analog Devices рас- смотрены устройство, архитектура и технические характеристики цифрового сигнального процессора. Приведено описание вычислительных блоков про- цессора, средств разработки программного обеспечения, языка программи- рования и системы команд процессора. Разработанные автором книги прак- тические схемы с применением сигнального процессора, исходные тексты программ и схемы вспомогательных устройств, полезных при отладке про- грамм для процессора помогут получить необходимые практические навыки, с помощью которых читатель легко освоит другие типы сигнальных процес- соров. На прилагаемом к книге диске находятся исходные тексты и испол- няемые файлы программ, а так же некоторые полезные утилиты и средства разработки программного обеспечения для сигнальных процессоров. Для специалистов в области разработки цифровой электронной аппара- туры, будет полезна студентам и аспирантам. ББК 32.84 Адрес издательства в Интернет www.techbook.ru Справочное издание Вальпа Олег Дмитриевич Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++. Редактор А. Ю. Петкин Корректор А. К. Степанова Верстка Ю. Н. Рыськова Обложка художника В. Н. Мятникова Подписано в печать 30.10.2006. Формат 60x88/16. Бумага офс. Усл. печ. л. 17. Тираж 2000 экз. Изд. № 6342 ISBN 5-93517-342-5 © О. Д. Вальпа, 2007 © Оформление издательства «Горячая линия-Телеком», 2007
Предисловие В настоящее время цифровые сигнальные процессоры, или сокращенно DSP (Digital Signal Processor), приобрели большую популярность в мире и даже признаны отдельной областью науки и техники. Эта книга является практическим руководством по самостоя- тельному изучению и применению на практике одного из цифровых сигнальных процессоров фирмы Analog Devices. Она включает в себя подробное описание процессора, схемы для его практического применения и технологию программирования. Книга написана простым языком и позволяет очень быстро ос- воить сигнальный процессор и применить его на практике в собст- венных разработках, включает в себя разработанные автором кни- ги практические схемы с применением сигнального процессора, исходные тексты программ и схемы вспомогательных устройств, полезных при отладке программ для процессора. Состоит из четырех частей: часть I посвящена схемотехнике сигнальных процессоров; в части II рассмотрено программирование устройств; далее в части III описаны вычислительные и аппаратные устойства; в части IV представлены установка, запуск, работа, спек- тральный анализ сигнала, а также программирование на СИ в сре- де разработки Visial DSP++. На прилагаемом электронном диске находятся исходные тексты и исполняемые файлы программ из книги, а также некоторые по- лезные утилиты и средства разработки программного обеспечения для сигнальных процессоров. Изучив материалы этой книги, читатель получит фундаменталь- ные знания, с помощью которых легко освоит другие типы сигналь- ных процессоров. Книга будет полезна как начинающим разработчикам, так и спе- циалистам в области разработки цифровой электронной аппарату- ры. Кроме того, она будет полезна студентам технических вузов, инженерам и программистам. Автор 3
ЧАСТЬ I. СХЕМОТЕХНИКА В этой части книги освещается история развития раз- личных сигнальных процессоров и дается обзор техниче- ских характеристик сигнальных процессоров семейства ADSP-21XX. Кроме того, в ней приводится практическая схема применения процессора ADSP-2181, описываются его архитектура и программно-логическая модель, дается опи- сание системы прерываний процессора. 4
Глава 1. Обзор В настоящее время большую популярность приобрели цифро- вые сигнальные процессоры, или сокращенно DSP (digital signal processor). Эта книга приподнимет завесу таинственности этих компонентов и позволит читателям самостоятельно заняться их освоением и применением в собственных разработках. Свое название сигнальные процессоры получили в связи с встроенной в них возможностью обработки звуковых и видеосигна- лов. Это реализовано благодаря высокой скорости работы этих процессоров и заложенной в них специальной системе команд под- держивающей функции цифровой фильтрации и быстрого преобра- зования Фурье. Ниже перечислены основные отличия сигнальных процессоров от обычных микропроцессоров. • Наличие аппаратного умножителя. • Наличие специальных блоков обработки данных. • Специальная система команд для цифровой обработки сигналов. • Высокое быстродействие. • Внутренний умножитель тактовой частоты. • RISC архитектура. • Возможность одновременного выполнения нескольких команд. • Гарвардская архитектура построения процессора. • Наличие конвейеризации команд и данных. • Наличие циклических буферов. • Развитая система внешних интерфейсов. Некоторые типы данного семейства процессоров имеют также встроенные аналого-цифровой преобразователь АЦП и цифро- аналоговый преобразователь ЦАП, что позволяет подавать на процес- сор непосредственно аналоговые сигналы, которые после оцифровки обрабатываются в цифровом виде этим же процессором. Под обра- боткой понимается, как правило, спектральный анализ сигнала, т.е. определение наличия в этом сигнале определенной частоты заданной амплитуды, фильтрация сигнала от ненужных частот, сравнение сиг- нала с эталонным сигналом-шаблоном, синтез и генерация речи, сжа- тие и декомпрессия звуковых и видеосигналов и т.п. В современном 5
Часть I. Схемотехника мире существует огромное количество подобных задач в самых раз- личных областях человеческой деятельности. Решение этих задач требуется в радиоэлектронике, радиолокации, навигации, связи, ме- дицине, автомобильной промышленности, космонавтике и др. науко- емких областях. Ввиду своей важности, цифровая обработка сигна- лов в настоящее время признана даже отдельной областью науки и техники. По всему видно, что для этих процессоров открывается большое будущее. Именно поэтому, находясь у истоков развития сигнальных процессоров, важно вовремя познакомиться с ними, что- бы в дальнейшем они не казались нам недоступными и закрытыми. Проведем небольшой экскурс в историю развития данного се- мейства процессоров. Первые сигнальные процессоры появились в начале 80-х годов. Одной из первых компаний начавшей производ- ство этих процессоров, была японская корпорация NEC, выпустив- шая однокристальный сигнальный процессор MPD7720. Однако этот процессор не получил широкого распространения, поскольку в 1982 г. на смену ему пришел более производительный и развитый процессор TMS32010, выпущенный фирмой Texas Instruments. Бла- годаря удачной архитектуре и ряду технических решений он стал стандартом де-факто для сигнальных процессоров. Ниже приведе- ны основные технические характеристики данного процессора. Разрядность данных...................16 бит Производительность...................5 млн. операций в секунду Объем оперативной памяти.............256 слов Объем памяти программ................4 К слов Объем подключаемой внешней памяти....4 К слов Разрядность арифметико-логического устройства...........................32 бит Разрядность умножителя...............6x16 бит с 32-битным результатом Разрядность портов ввода-вывода......16 бит Количество портов ввода-вывода.......8 Пропускная способность внешней шины.....50 Мбит Освоение новых микронных технологий и, как следствие, повы- шение степени интеграции микросхем позволили значительно улучшить характеристики процессоров. И уже в середине 1980-х годов появились сигнальные процессоры второго поколения. К ним можно отнести процессоры все той же фирмы Texas Instruments TMS320C25 и TMS320C5X. Эти процессоры более скоростные и имеют больший объем памяти. Кроме того, у них появилась разви- тая система обработки прерываний и энергосберегающие режимы работы. В некоторых моделях процессоров снижено напряжение 6
Гпава 1. Обзор питания. Появились теневые регистры для автоматического сохра- нения результатов работы в случае возникновения аппаратного или программного прерывания программы. В состав архитектуры про- цессора добавились таймеры и последовательные синхронные порты с развитой конфигурацией настройки. В свою очередь, фирма Motorola выпустила сигнальные процессоры семейства DSP56000, которые имеют разрядность 24 бита, двойную внутреннюю шину данных X и Y, удобную при операциях с комплекс- ными числами, и обладают высокой степенью конвейеризации и па- раллелизма. Эти свойства делают данные процессоры еще более производительными и удобными для цифровой обработки сигналов. Еще один производитель в лице фирмы AT&T Microelectronics выпускает сигнальные процессоры серии DSP16, которые отлича- ются наличием кэш памяти и встроенного высокоскоростного, до 30 Мбайт, параллельного порта. Фирма Analog Devices вышла на рынок сигнальных процессоров со своей серией ADSP-21XX, которые конкурируют с выше рас- смотренными моделями по некоторым техническим параметрам, а кроме того, по цене. Например, процессор ADSP-21msp50 имеет встроенные АЦП и ЦАП и в то же время его стоимость составляет несколько долларов. На этом развитие сигнальных процессоров не остановилось, и уже в конце 1980-х годов на рынке появились процессоры третьего поколения от перечисленных выше фирм. Отличительной особенно- стью этого поколения стало появление двоичной плавающей ариф- метики, увеличение разрядности шины данных, емкости памяти и программ. К этому числу процессоров можно отнести TMS320C30 фирмы Texas Instruments, DSP96002 фирмы Motorola, DSP32C фир- мы AT&T Microelectronics и ADSP21020 фирмы Analog Devices. Впоследствии на рынке появились сигнальные процессоры дру- гих фирм. Однако в настоящее время, лидирующее положение в этой области занимают фирмы Texas Instruments, Motorola, AT&T Microelectronics и Analog Devices. История развития сигнальных процессоров на этом не заканчи- вается, и можно было бы продолжать ее повествование, но целью данной книги является не исторический рассказ, а практическое руководство по освоению и приобретению навыков работы с этими перспективными компонентами. Поэтому я хочу остановиться на более подробном описании внутренней архитектуры и практическо- го применения одного из сигнальных процессоров фирмы Analog Devices. Именно об этом и пойдет речь в следующей главе. 7
Глава 2. Архитектура В этой главе описывается внутренняя архитектура одного из сигнальных процессоров фирмы Analog Devices ADSP-2181 и примеры его подключения. Фирма Analog Devices разработала целые семейства сигналь- ных процессоров и постоянно продолжает выпускать на рынок но- вые модели. В настоящее время существуют следующие семейст- ва: ADSP-21XX, Shark DSP, BlackFin DSP и др. Но, несмотря на все многообразие этих групп, все они имеют похожую друг на друга ар- хитектуру. Отличие семейств друг от друга заключается, например, в арифметических блоках, которые поддерживают вычисления с фиксированной или плавающей запятой. Кроме того, семейства отличаются производительностью, разрядностью шин данных, структурой внутренних регистров, интерфейсами и т.п. Отличие процессоров друг от друга внутри семейства состоит в основном в объеме и организации внутренней памяти и типе встроенных ин- терфейсов. В состав каждого из процессоров этого семейства вхо- дят следующие функциональные устройства. • Арифметико-логическое устройство АЛУ. • Умножитель-накопитель. • Устройство сдвига. • Два генератора адреса данных. • Программный автомат. • Таймер. • Последовательный многоканальный порт. Н иже приведена табл. 2.1 с отличительными характеристиками сигнальных процессоров семейства ADSP-21XX. Остановимся на рассмотрении архитектуры одного из самых распространенных на сегодняшний день процессоров семейства ADSP-21XX, а именно на процессоре ADSP-2181. Этот компонент является самым развитым в своем семействе и включает в себя наибольший объем памяти и множество встроенных интерфейсов. Сигнальный процессор ADSP-2181 представляет собой одно- кристальный чип, выпускаемый в 128 выводных корпусах типа 8
Глава 2. Архитектура Таблица 2.1 Характеристики сигнальных процессоров семейства ADSP-21XX Ресурсы 2101 2103 2105 2111 2115 00 L0 Q. (Л Е см 2171 2173 2181 2183 Объем оперативной памяти программ (слов) СМ СМ т— СМ т— см см см (О Т— (О т— Объем оперативной памяти данных (слов) ы т— Ы т— СМ L0 т— см LO см см см (О (О 1— Второй последова- тельный порт - + + Порт хост интер- фейса - - - + - + + + - - Порт прямого дос- тупа к памяти - + + Максимальная внешняя тактовая частота, МГц о CXI 10,24 13,82 о см о см 16,67 16,67 16,67 о см о см Аналого-цифровые преобразователи и фильтры - - - - - + - - - - Режим малого по- требления - - - - - + + + + + Напряжение пита- ния, В LO со со" L0 LO L0 L0 L0 со со L0 со со Количество сигнальных выво- дов 00 со 00 (О 00 (О о о Г" 00 (О О О Г" 00 СМ т— 00 см 00 см 00 см 9
Часть I. Схемотехника PQFP-128 или TQFP-128. Из вышеприведенной информации уже можно составить общее представление о возможностях, зало- женных в данный процессор. Но для полноты картины рассмот- рим структурную схему внутренней архитектуры этого чипа, при- веденную на рис. 2.1. Процессор имеет сильно развитую структуру внутренних шин ад- реса и данных. К их числу относятся шина адреса памяти программ PROGRAM MEMORY ADDRESS, шина адреса памяти данных DATA MEMORY ADDRESS, шина данных памяти программ PROGRAM MEMORY DATA и шина данных памяти данных DATA MEMORY DATA. Слева на схеме изображен базовый блок архитектуры всего семейства ADSP-2100 BASE ARCHITECTURE включаемый в со- став любого из процессоров данного семейства. Он состоит из блока генераторов адреса данных DATA ADRESS GENERATORS, программного автомата PROGRAM SEQUENCER и арифметиче- ского блока ARITHMETIC UNITS. Блок генераторов адреса данных содержит два генератора: DAG1 и DAG2, предназначенных для инвертирования бит адреса во время выполнения процессором операций быстрого преобразо- вания Фурье (БПФ). Рис. 2.1. Структурная схема внутренней архитектуры чипа 10
Гпава 2. Архитектура Программный автомат осуществляет поддержку операций с ус- ловными переходами, вызов подпрограмм и возврат в основную программу, ускоряя тем самым работу процессора в целом. Арифметический блок включает в себя арифметико-логическое устройство ALU, умножитель с накопителем МАС и устройство сдвига SHIFTER. Первый из этих блоков предназначен для выпол- нения арифметических и логических операций над данными, а вто- рой для выполнения арифметического умножения чисел. SHIFTER позволяет нормировать числа после выполнения арифметических операций. Рассмотрим блоки, расположенные справа вверху по схеме. Блок управления пониженным питанием POWER DOWN CONTROL обеспечивает управление процессором для перехода в режим по- ниженного потребления после выполнения соответствующей инст- рукции и возврат из этого режима после возникновения прерывания или после перезапуска. Блок памяти MEMORY состоит из памяти данных DATA MEMORY и памяти программ PRORAM MEMORY. Таким образом, оперативная память всего процессора разделена на две независимых части в соответствии с Гарвардской архитекту- рой построения процессоров. Тем не менее, система команд этого процессора позволяет использовать память программ для хранения данных. Блок программируемых входов-выходов PROGRAMMABLE I/O позволяет запрограммировать несколько выводов по усмотрению разработчика на ввод или на вывод битовых сигналов, что обеспечи- вает возможность гибкого применения этих выводов. Блок флагов FLAGS управляет тремя битовыми выводами, организованными как сигнальные выходы. Наконец, блок байтового контроллера прямого доступа к памяти BYTE DMA CONTROLLER, сокращенное и часто употребляемое в дальнейшем название которого BDMA, обеспечи- вает быстрый аппаратный ввод и вывод байтовых данных через внешнюю шину данных процессора. Теперь рассмотрим блоки, расположенные справа внизу по схе- ме. Одним из самых популярных и полезных является блок после- довательных многофункциональных портов SERIAL PORTS, кото- рый включает в себя два последовательных порта SPORT1 и SPORT2. Отличительной особенностью этих портов является то, что они программируемые, синхронные и многоканальные. Т.е. ка- ждый из этих портов способен принимать и передавать информа- цию от однословного до тридцатидвухсловного последовательного потока бит. Каждое слово в потоке может иметь длину от трех до шестнадцати бит. Этот формат передачи данных часто применяет- 11
Часть I. Схемотехника ся при построении телекоммуникационных систем. К такому порту можно подключить одновременно до 32 кодеков и получить на их выходе соответственно 32 аналоговых канала ввода-вывода. Со- гласитесь - это мощный инструмент, который можно применить во многих областях. Кроме того, порты могут программироваться на внешнюю или внутреннюю синхронизацию. Управляющие вы- воды портов также могут быть запрограммированы на ввод или вывод. Следующий блок таймера TIMER, обеспечивает организацию отсчета необходимых интервалов времени и прерываний по тайме- ру. Прерывание генерируется каждый раз, когда обнуляется счет- чик таймера, который после обнуления загружается значением из шестнадцатиразрядного регистра, хранящего период таймера. И, наконец, блок внутреннего порта INTERNAL DMA PORT IDMA, сокращенное название которого IDMA, предназначен для организа- ции прямого доступа к памяти данных и памяти программ процес- сора по шестнадцатиразрядной внешней шине. Этот порт играет важную роль при работе с процессором, поскольку позволяет за- гружать программу и данные непосредственно в память процессора до его старта, стартовать процессор и производить операции чте- ния и записи данных в память во время его работы, незначительно влияя при этом на производительность процессора. С внешним миром процессор общается посредством четырна- дцатиразрядной шины адреса EXTERNAL ADDRESS BUS, двадца- ти четырехразрядной шины данных EXTERNAL DATA BUS и шест- надцатиразрядной шины IDMA DMA BUS. На рис. 2.2 приведена более подробная структурная схема про- цессора, с указанием разрядности внутренних и внешних шин и бо- лее детальным изображением всех описанных выше блоков. Более подробную структуру процессора мы рассмотрим позже, когда будем изучать его внутренние регистры и примеры программ. На рис. 2.3 и 2.4 представлены варианты исполнения процессо- ра в корпусах PQFP-128 и TQFP-128, соответственно. На этих же рисунках изображено назначение всех контактов процессора и при- ведена их нумерация. Изображения дают вид сверху TOP VIEW, выводами вниз PINS DOWN. Сигналы с низкими активными уровнями имеют обозначения с чертой над сигналом. Выводы двойного назначения, определяемо- го программированием этих выводов, обозначаются через символ «/». 12
Рис. 2.2. Структурная схема процессора Гпава 2. Архитектура
Часть I. Схемотехника i О Т- CSI СО q-toQQCOCOr-Cog’v- Т- Т- т- OOOOOQZOOQOOOO О Q О О 97 BMS i_1 DMS CMS GND I VDD c 128 PF0 RD IOMS 96 3 021 3 020 J D19 PMS AO A1 A2 A3 A4 A6 A7 XTAL CLKIN GND VDD A8 A9 А11 А13 IRQE MMAP 32 33 128LPQFP (28 MM x 28 MM) TOP VIEW (PINS DOWN; 3 D16 j 015 ] GND j VDD J GND 3 D14 3 D13 3 D12 3 011 3 D10 ...I I D7 ----Г—I D6 ~..I ' I D5 3 D3 3 D2 J 01 33 VDD Z3 BG_ □ EBR =□ BR il 65 64 Рис. 2.3. Вариант исполнения процессора в корпусе PQFP-128 В табл. 2.2 дается описание назначения выводов процессора. Способ подключения к процессору различных периферийных устройств показан на структурной схеме, приведенной на рис. 2.5. В качестве примера, на этой схеме показано, как подключаются следующие устройства: 14
Гпава 2. Архитектура 128 103 1 TOP VIEW (PINS DOWN) ' 102 IALI I '1 ' I GND PF3EZLZT ~~T' 4 D23 PF2I—I —ZE—I D22 PF 11 1 1—I D21 PFOl 1 4 1 D20 WR □= 1_J D19 RDl L ' 'I. I D18 IOMS1 1 _ - '•I ' ID17 BMSL I....Z 7Г.77Г' ''.I D16 dms ii : Z__i_J D15 CMS1—1 -~-r l GND GNDL__L_ — Г-l VDD VDDl l —T I GND pms 1—f I ! П1Л ДП i—i L—J U 14 r\U I 1 1—1 D13 1 1 гио A21 1 1 1 U1Z 1—I D11 АЗ Г 1 " I I D10 A4l 1 I I D9 A5 1 1 I I D8 A6I L_ —L, I D7 A7 L_J I I D6 XTALI 1 I I D5 CL KIN Г 1. I J GND GNDI 1 I I D4 CLKOUTI—L— I I D3 GNDI 1 I I D2 VDDl 1 I I D1 A8I 1 I I DO A9I 1 I I VDD A10C 1—I BG A11 I I —L-J EBG А12ГТ~~~~ BR A13[=n= I i ebr IRQE I—I 1—I EINT MMAPCZZZEZZZ I I ELIN PWD I I. — I I ELOUT IRO7 L_l. I I ECI К Рис. 2.4. Вариант исполнения процессора в корпусе TQFP-128 15
Часть I. Схемотехника Таблица 2.2 Описание выводов процессора ADSP-2181 Наименова- ние Вы- вод I/O Функция А0...А13 0 Адресные выводы для адресации области внеш- ней памяти программ, памяти данных, байтовой памяти (BDMA) и устройств ввода-вывода D0...D23 I/O Выводы данных для обмена данными с внешней памятью программ и памятью данных. Восемь старших разрядов также используются как адрес байтовой памяти. -WR -RD -IOMS -BMS -DMS -CMS -PMS 0 0 0 0 0 0 0 Сигнал записи Сигнал чтения Выбор области памяти Выбор байтовой памяти Выбор памяти данных Выбор комбинированной памяти Выбор программной памяти FLO, FL1, FL2 PF0...PF7 0 I/O Выходы-флаги Программируемые выводы MMAP -PWD BMODE PWDACK I I I 0 Выбор карты памяти процессора Управление потреблением Режим загрузки O-ROM, 1-IDMA Контроль низкого потребления питания XTAL CLKIN CLKOUT I I 0 Соединение с кварцем Внешний генератор, или соединение с кварцем Выходная тактовая частота -RESET -ERESET I I Сброс процессора Разрешение сброса -IRQLO -IRQL1 -IRQ2 -IRQE I I I I Потенциальный запрос прерывания 0 Потенциальный запрос прерывания 1 Динамический или потенциальный запрос пре- рывания 2 Динамический запрос прерывания 16
Гпава 2. Архитектура Наименова- ние Вы- вод I/O Функция -BR -BG -BGH I 0 0 Внешний запрос шины Внешнее предоставление шины Внешнее предоставление шины, подтянутое к питанию IAD0...IAD15 -IACK -IWR -IRD -IS IAL I/O 0 I I I I Шина адреса/данных порта IDMA Подтверждение доступа к порту IDMA Вход записи в порт IDMA Вход чтения из порта IDMA Вход выборки порта IDMA Вход защелки адреса порта IDMA DT0 TFS0 RFSO DR0 SCLK0 0 I/O I/O I I/O Передача данных Кадровая синхронизация передачи Кадровая синхронизация приема Прием данных Программируемый генератор порта 0 DT1/FO TFS1/IRQ1 RFS1/IRQ0 DR1/FI SCLK1 0 I/O I/O I I/O Передача данных, или выходной флаг Кадровая синхронизация передачи, или внешний запрос прерывания 1 Кадровая синхронизация приема, или внешний запрос прерывания 0 Прием данных, или входной флаг Программируемый генератор порта 1 -EMS ЕЕ ECLK ELOUT ELIN EINT -EBR -EBG Сигналы, используемые только в режиме эмуля- ции GND Выводы заземления VDD Выводы питания Примечание:! - вход, О - выход; минус перед сигналом означает низкий активный уровень сигнала. 17
Часть I. Схемотехника Рис. 2.5. Способ подключения к процессору различных периферийных устройств Внешний генератор или кварцевый резонатор с половинной так- товой частотой процессора 1/2х CLOCK OR CRYSTAL. Последовательные устройства SERIAL DEVICE, например кодеки. Системный интерфейс или микроконтроллер SYSTEM INTERFACE OR MICROCONTROLLER. Байтовая память BYTE MEMORY. До 2048 периферийных устройств ввода-вывода I/O SPACE PERIPHERALS. Внешняя память OVERLAY MEMORY. При использовании внешней памяти, допускается подключение двух 8К-словных сегмента памяти программ TWO 8К РМ SEGMENTS и двух 8К-словных сегмента памяти данных TWO 8К DM SEGMENTS. Из схемы видно также, какие именно сигналы процессора ис- пользуются для подключения всех перечисленных внешних уст- ройств. 18
Гпава 2. Архитектура Рис. 2.6. Способ подключения кварцевого резонатора к сигнальному процессору На рис. 2.6 показан способ подключения кварцевого резонатора к сигнальному процессору. Конденсаторы должны иметь номиналь- ную емкость от 22 до 33 пФ, а максимальная частота кварцевого резонатора должна быть вдвое ниже максимальной внутренней частоты процессора, поскольку внутри процессора производится аппаратное умножение внешней задающей тактовой частоты. Эта удвоенная частота выводится на сигнальный вывод CLKOUT процес- сора. Вместо кварцевого резонатора, для формирования задающей частоты синхронизации можно использовать интегральный генера- тор, который, однако, несколько дороже резонатора. В этом случае выход генератора необходимо подключить к выводу CLKIN процес- сора, а вывод XTAL оставить неподключенным. Карта памяти процессора изображена в табл. 2.3. На первых двух фрагментах таблицы показаны режимы использования памяти про- грамм. Эти режимы задаются с помощью внутреннего регистра PMOVLAY и подключения внешнего вывода процессора ММАР к нуле- вому потенциалу или к источнику питания соответственно. При сбросе процессора регистр PMOVLAY обнуляется, и подключается внутренняя память. В процессе выполнения программы содержимое этого регист- ра можно изменить, и переключить тем самым процессор на использо- вание внешней памяти программ. Адресация памяти приведена в ше- стнадцатеричном формате записи. Память программ может быть внутренней INTERNAL, т.е. раз- мещенной на кристалле самого процессора, или внешней EXTERNAL, т.е. размещенной во внешних микросхемах памяти. Поскольку память программ организована 24 разрядными словами, суммарный объем внутренней памяти программ процессора может быть равен (8К слов+8К слов) х Збайта - 48 Кбайт. На последнем фрагменте рисунка приведена карта памяти дан- ных. Ее режим работы, как внешней или внутренней, определяется с помощью внутреннего регистра процессора DMOVLAY, который 19
Часть I. Схемотехника Таблица 2.3 Карта памяти процессора Параметр Адрес Память программ Адрес Память данных Адрес 8 Келов ВНУТРЕННИЕ (PMOVLAY=0, ММАР=0) или 8 Келов ВНЕШНИЕ (PMOVLAY=1 или 2, ММАР=0) 0x3FFF 0x2000 8К слов ВНУТРЕННИЕ (PMOVLAY=0, ММАР=1) 0x3FFF 0x2000 32 РЕГИСТРА 0x3FFF 0x3FE0 8160 слов ВНУТРЕННИЕ 0x3FDF 0x2000 8К слов ВНУТРЕННИЕ 0x1FFF 0x0000 8К слов ВНЕШНИЕ 0x1FFF 0x0000 8К слов ВНУТРЕННИЕ (DMOVLAY=0) или 8К слов ВНЕШНИЕ (DMOVLAY=1 или 2) 0x1FFF 0x0000 аналогично регистру PMOVLAY обнуляется при сбросе или включении процессора, обеспечивая тем самым включение режима использова- ния внутренней памяти данных. В самой верхней области памяти дан- ных размещены 32 служебных регистра процессора, которые органи- зованы как память данных. Поэтому память данных усечена по объему на это количество ячеек памяти. Память данных организована шестна- дцатиразрядными словами, поэтому суммарный объем внутренней памяти данных процессора составляет (8К слов + 8К слов) х 2 байта = 32 Кбайт. Учитывая разрядность банков памяти программ и памяти дан- ных, суммарная емкость памяти процессора составляет 80 Кбайт. Это довольно большой объем памяти, достаточный для решения многих задач, написанных на языках ассемблера или Си. В следующих главах, приведены примеры электрических прин- ципиальных схем с применением описываемого сигнального про- цессора и рассказ о способах его программирования. 20
Глава 3. Практические схемы включения В этой главе приводятся примеры принципиальных схем с при- менением сигнального процессора ADSP-2181, показывающие спо- соб его подключения для применения в различных разработках. Итак, приступим непосредственно к практике по освоению сиг- нального процессора. На рис. 3.1 изображена принципиальная схема тестовой платы для изучения процессора и отладки про- грамм. Файл этой схемы, созданный в системе автоматического проектирования PCAD 4.5, записан на компакт-диск, прилагаемый к данной книге. На схеме показан способ включения самого сигналь- ного процессора и периферийных устройств, подключаемых к нему. Рассмотрим последовательно все сигнальные выводы процессора и их назначение. Как видно из схемы, процессор D1 имеет несколько выводов для подключения питания, что связано с необходимостью распределе- ния токоведущих цепей для обеспечения помехоустойчивости. Ис- пользуемый в схеме сигнальный процессор допускает питание от источника напряжением 4,5...5,5 В. Стабилизированное напряже- ние питания 5 В поступает с разъема питания ХР1. Конденсаторы СР2 и СЗ-С7 обеспечивают фильтрацию напряжения по низким и высоким частотам соответственно. Индикатор HL4 с токоограничи- вающим резистором R3 индицирует наличие питания в схеме. Для питания аналоговой части схемы используются дополнительные элементы фильтрации L1 и С8-С10. Следующими важными цепями являются входы и выходы гене- раторных сигналов XTAL, CLKIN и CLKOUT. Первые две цепи предназначены для подключения внешнего источника синхрониза- ции. На приведенной схеме показан способ подключения к процес- сору кварцевого резонатора BQ1. В случае применения интеграль- ного генератора выход генератора подключается к выводу CLKIN, а вывод XTAL не используется. Стоимость генераторов на сего- дняшний день еще превышает стоимость кварцевых резонаторов, поэтому к процессору подключен более дешевый кварцевый резо- натор. Номинальная резонансная частота такого резонатора или 21
Часть I. Схемотехника AD0 , XU1 ^2 AD1 АО 2 1 ц > AD3 АО 4 5б AD5 АО Б >8 AD7 АО В 9 у ц-. >10 AD9 АО 10 >12 AD11 AD12 13х I >1 Л AD13 AD14 15? m 516 AO1S 0V 17х >18 -0RD -DUR 14 >20 0V -1АСК 21> >22 -5EL -RESI х24 0V -AWR 25^ >26 0V +SV 1 ^XU2 2 +sv 0V 3 > Е > 4 0V 5 > 7 < 6 7 > £ < 8 9 > < 10 AD0 2 А0 Al А2 АЗ А4 ш В0 В1 В2 ВЗ 84 IS IAO0 АО! 5 17 J ADI AD2 4 16 1 A02 AD3 5 15 I ДОЗ АО 4 6 14 IAD4 АО 5 7 13 I AOS АО 6 8 А5 I В5 12 1006 АО 7 9 R6 Гх ВБ И IA07 87 -1 RD 1 20 ♦ SV -15 А '♦В )ОЕ Vcc GND 10 0V 02 AD8 2 A0 Al A2 A3 A4 A5 -0 m B0 Bl 82 B3 B4 B5 B6 18 1AD8 AO 9 3 17 IA09 AD 10 4 16 IAO10 AOll 5 15 [ADIL ADI 2 6 14 I AO I 2 AD 13 7 13 I AO 13 AD I 4 e 12 I AO 14 AD15 9 A6 ’f 11 [A015 -IRQ 1 B7 20 ♦ SV -IS 19 < fl -*B 03 Vcc GND 10 0V -ORO 2 18 -I RO -OUR 4 00 B0 16 -I UR -5EL в Al Bl 14 - ] 5 -RE51 8 A2 <N B2 B3 12 -IR 0V 1 f A3 )0E T D4 1 -AWR СР1 10мк® 108 74L500 0, 1 XR51 D8R-9M CP4 10гн«Ф 106 XEZ - ВС.__________2 Н"14^J_____________0V - BR_______ 4 С. ^3___________-EBG - E1NT________6 x. <5___________-EBR Elin 8^ 3т ECLK J 0x >3 ELOUT -EMS__________I2x U i__________EE -ERESET 14^ 43_________-RESET Рис. 3.1. Принципиальная схема тестовой платы 22
Гпава 3. Практические схемы включения В01 16384КГа D5P 90 ll 90 90 20 21 DD0 20 CLK.IN 12 61 91 19 HC uv 22 DOI T 22 R1 13 92 A2 10 Al и i 23 0D2 Tn “Те? R2 14 93 93 17 Я2 иг 25 003 -RFSFT 58 93 94 03 )Rtbt 1 15 A4 П П 4 c-7 Q R4 15 H 4 U4 005 -ERE5ET Ь/ ( 16 95 A5 feRESET RS AB 17 96 96 14 на из 28 006 -IRQL0 18 AE 06 007 41 / )IRQL0 13 -IRQL1 4? R7 RB R9 R10 25 98 98 3 -IRQ2 34 ) IRQL1 )[R02 >IRQE 26 99 99 2 AB ( § -IROE 31, J 27 610 910 31 610 611 R12 2S 91 1 Al I 1 -BR. 66 ? )BR )BG >6GH Al 1 912 913 29 912 A12 12 1 J -ВС 68 f 30 913 913 r 38 D08 5 613 914 915 616 917 A13 00 70 009 11 JRD0 118 1600 1601 1602 1603 1004 IAD5 1906 1607 IAD8 1909 16010 19011 71 0010 10 3 AD1 1 17 01 72 □ Oi 1 6 1902 1 16 02 D3 73 0012 9 1903 115 74 IAD4 114 76 •ROM0 30 I 1RD5 1 13 05 06 77 -RO 32 ( > CE t ! + 5V IRD6 110 78 -UR 7 > OE iV 24 0V 1907 10Я 07 OB 09 D10 DI 1 DI 2 DI 3 014 79 000 > VE и/ UNU 1Я08 108 60 DD1 IR09 107 81 002 0013 1 E -ROM0 IRD10 105 52 □03 0014 2 UL 1 s .14 ЗАО» 1 105 83 □04 0015 3 H 1 S 19D12 104 84 □05 10013 103 IAD13 16014 16015 95 006 *5V 6 l Л Lri 1Й014 102 89 □07 0 V 5( IRD15 101 DI 5 DIB D17 90 008 -BMS 4, >E i 91 009 >E2 E IACK 37 I6CK >IWR )IRD >15 92 0010- -IWR DI В D19 020 93 001 1 -IRD 100 / 94 0D12 -5V 1 G13. i -15 1?4 95 □013 -8MS 2 1 10 IRL 125 D21 022 9? 0014 -I0M5 3 Q 1 IAL 97 0015 -RO 4 2 c 2 □ Г0 46 DT0 023 -UR 5 3 *- , и 1 1 13 TFS0 47 WR C RD ( -UR PF0 6 . 12| RFS0 48 TFS0 -RO PF 1 7 5 c I OR0 49 RF50 4 -I QMS PF 2 8 6 c r 013. 4 SCLK0 50 DR0 SCLK0 I QMS ( BM5 C QMS C CMS c PM5 C -BMS PF3 9 6 _J0_ 8 F0 51 DT 1 7 Г 9 52 £10 L TFS1 RF51 DR1 ) F 1 . 55 43 FL0 FL0 11 A B0 9 FLB0 56 FL0 44 FL1 FL I 13 Hlfl 7 7 FLBI 5CLK 1 ELI 45 PL2 FL2 IS A I D J 5 FLB2 -EMS )EH5 FL2 PF0 PF 1 1 PF0 PF7 17 A2 DZ 3 PFB7 ЕЕ 60 ( 128 PF 1 ECLK 61 EE 127 PF2 0V JL^ >DE ELDUT 6? EC LK PF2 PF3 PF4 128 PF3 0 4. 2 El in 63 ELOLJT ELIN >EINT >EBR 122 -EINT 64 z 121 PF0 i SB0-SB3 -E8R G5 J PF5 PF6 120 PFl SOI ] -ЕВС 119 PF 7 PF 2 s' )ebg PF7 PF3 sb: $J 0V 8 CND1 CND2 GND3 CND4 GND5 GN06 GND7 GND8 GND9 CND10 GN01 1 MMQP PUD < В MODE 3WDACK 32 0V F ILt 3 R5 t 21 ,33 *5V FLB0 P .5-R8 , 23 35 BMODE IK , 40 36 F <L1 L R6 > 54 FLBI 1/ ft ; 75 9 14 12 , 86 +5V1 ♦SV2 24 , F <l: > R7 ; 88 39 , FLB2 V P ft ; 98 +5V3 69 , 14 у , 112 1-5 V4 +SV5 +5VB 87 ( F 1L2 5 0V ' ; 173 01 1!1 ' -»5V PFB7 ГЧО -5V Рис. 3.1. Принципиальная схема тестовой платы (продолжение) HL0-HL3 L-934HC 23
Рис. 3.1. Принципиальная схема тестовой платы (окончание) !асть /. Схемотехника
Гпава 3. Практические схемы включения генератора не должна превышать половину предельно допустимой частоты для данного процессора. Так, для процессора с максимальной тактовой частотой 40 МГц она не должна превышать 20 МГц. Конден- саторы С1 и С2 должны быть керамического типа, емкостью от 18 до 30 пФ. Внутри процессора производится аппаратное умножение внеш- ней частоты, которая затем используется для синхронизации про- цессора. Внутренняя частота процессора будет составлять 40 МГц, а длительность выполнения команд 25 нс. Внутренняя частота вы- водится также на CLKOUT процессора и может быть использована для синхронизации других микросхем, подключаемых к процессору. Временная диаграмма сигналов синхронизации показана на рис. 3.2, а допустимые параметры этих сигналов приведены в табл. 3.1. Рис. 3.2. Временная диаграмма сигналов синхронизации Таблица 3.1 Допустимые параметры сигналов синхронизации процессора Параметр Минимум Максимум Единица измерения Сигналы синхронизации Требуемые длительности: tcKI 50 150 нс tcKIL 20 нс tcKIH 20 нс 25
Часть I. Схемотехника Параметр Минимум Максимум Единица измерения Сигналы синхронизации Характеристика переключения: tcKL 0,5tCK-7 нс tcKH 0,5tCK-7 нс tcKOH 0 20 нс tcK= 0,5*tcKi При выборе сигнального процессора необходимо пользоваться табл. 3.2, в которой приведены заводские маркировки и соответст- вующие им характеристики. Таблица 3.2 Характеристики сигнальных процессоров Заводская марки- ровка Рабочий темпера- турный диапазон, °C Макси- мальная тактовая частота, МГц Тип корпуса Услов- ное обо- значе- ние кор- пуса ADSP-2181KST-115 0...+70 28,8 TQFP-128* ST-128 ADSP-2181BST-115 -40...+85 28,8 TQFP-128 ST-128 ADSP-2181 KS-115 0...+70 28,8 PQFP-128** S-128 ADSP-2181 BS-115 -40...+85 28,8 PQFP-128 S-128 ADSR-2181KST-133 0...+70 33,3 TQFP-128 ST-128 ADSP-2181BST-133 -40...+85 33,3 TQFP-128 ST-128 ADSP-2181 KS-133 0...+70 33,3 PQFP-128 S-128 ADSP-2181 BS-133 -40...+85 33,3 PQFP-128 S-128 ADSP-2181 KST-160 0...+70 40 TQFP-128 ST-128 ADSP-2181 KS-160 0...+70 40 PQFP-128 S-128 * TQFP - Plastic Thin Quad Flatpack (пластиковый тонкий четырехуголь- ный плоский корпус). ** PQFP - Plastic Quad Flatpack (пластиковый четырехугольный плоский корпус). 26
Гпава 3. Практические схемы включения В нашем случае использован процессор ADSP-2181KS-133 в корпусе PQFP-128, как получивший большое распространение и легко доступный. В табл. 3.3 приведено соответствие выводов кор- пуса этого процессора его сигналам. Таблица 3.3 Соответствие выводов корпуса сигналам процессора Вы- вод Сигнал Вы- вод Сигнал Вы ВОД Сиг- нал Вы- вод Сиг- нал 1 PF0 33 PWD 65 EBR 97 D23 2 WR 34 IRQ2 66 BR 98 GND 3 RD 35 BMODE 67 EBG 99 IWR 4 IOMS 36 PWDACK 68 BG 100 IRD 5 BMS 37 IACK 69 VDD 101 IAD15 6 DMS 38 BGH 70 DO 102 IAD14 7 CMS 39 VDD 71 D1 103 IAD13 8 GND 40 GND 72 D2 104 IAD12 9 VDD 41 IRQLO 73 D3 105 IAD11 10 PMS 42 IRQL1 74 D4 106 IAD10 11 AO 43 FLO 75 GND 107 IAD9 12 A1 44 FL1 76 D5 108 IAD8 13 A2 45 FL2 77 D6 109 IAD7 14 A3 46 DTO 78 D7 110 IAD6 15 A4 47 TFSO 79 D8 111 VDD 16 A5 48 RFSO 80 D9 112 GND 17 A6 49 DRO 81 D10 113 IAD5 18 A7 50 SCLKO 82 D11 114 IAD4 19 XTAL 51 DT1/FO 83 D12 115 IAD3 20 CLKIN 52 TFS1/IRQ1 84 D13 116 IAD2 21 GND 53 RFS1/IRQ0 85 D14 117 IAD1 22 CLKOUT 54 GND 86 GND 118 IAD0 23 GND 55 DR1/FI 87 VDD 119 PF7 24 VDD 56 SCLK1 88 GND 120 PF6 27
Часть I. Схемотехника Вы- вод Сигнал Вы- вод Сигнал Вы вод Сиг- нал Вы- вод Сиг- нал 25 А8 57 ERESET 89 D15 121 PF5 26 А9 58 RESET 90 D16 122 PF4 27 А10 59 EMS 91 D17 123 GND 28 А11 60 ЕЕ 92 D18 124 IS 29 А12 61 ECLK 93 D19 125 IAL 30 А13 62 ELOUT 94 D20 126 PF3 31 IRQE 63 ELIN 95 D21 127 PF2 32 ММАР 64 EINT 96 D22 128 PF1 Сигнал -RESET обеспечивает сброс процессора в исходное со- стояние. Этот сигнал должен находиться в активном низкоуровневом состоянии при включении и перезагрузке процессора в течение не менее пяти тактовых периодов внешней синхронизации процессора. Обычно для надежного сброса процессора этот сигнал удерживается в активном состоянии не менее нескольких микросекунд. Формирова- ние сигнала сброса в схеме возможно от любого из двух источников. Первый источник этого сигнала реализован на зарядной цепочке R1, СР1. В момент подачи питания на схему, конденсатор СР1 разряжен и на нем удерживается низкий потенциал в течении времени его за- ряда, достаточного для приведения процессора в исходное состоя- ние. Диод VD1 обеспечивает быстрый разряд этого конденсатора в момент отключения или кратковременного пропадания питания. Кнопка SB4 предназначена для принудительного сброса процессора вручную. Резистор R2 ограничивает ток разряда, предохраняя кон- такты кнопки от образования искр, и устраняет дребезг контактов со- вместно с конденсатором СР1. Вторым источником сигнала сброса является сигнал - RESI с разъема XU1, который буферируется шин- ным повторителем D4.1 и поступает на микросхему D6. С помощью элементов D6.3 и D6.4 оба сигнала объединяются в один сигнал сброса процессора в инверсном (-RESET) и неинверсном виде (RESET). Наличие неинверсного сигнала требуется для сброса дру- гих микросхем с активным высокоуровневым входом сброса. Сигнал -ERESET и сигналы на выводах 59...65 и 67 процессора предназначены для подключения к нему специального аппаратного эмулятора EZ-ICE, который можно приобрести через представите- лей фирмы Analog Device в России. Выводы эмулятора подключены к разъему XEZ в соответствии с рекомендациями по применению 28
Гпава 3. Практические схемы включения данного сигнального процессора. Однако на практике вполне можно обходиться и без этого эмулятора. Следующая группа сигналов -IRQLO, -IRQL1, -IRQ2 и -IRQE отве- чает за передачу процессору внешних прерываний. В качестве источ- ников прерываний могут выступать различные микросхемы, датчики, кнопки и т.п. Так, к сигнальному выводу-IRQE подключена кнопка SB5 через цепочку устранения дребезга контактов R22 и СР4. Резистор R23 предназначен для удержания сигнала прерывания в пассивном со- стоянии. В дальнейшем с ее помощью можно будет принудительно вызывать прерывание процессора при необходимости. Следующие три сигнала обеспечивают запрос и предоставление внешней шины процессора другим внешним устройствам. На схеме сигнал запроса шины -BR используется только при подключении к схеме эмулятора EZ-ICE и подключен к разъему XEZ. Этот сигнал подтянут к шине питания для приведения его в пассивное состоя- ние. Выходной сигнал -BG, подтверждающий предоставление ши- ны процессором, также подключен к разъему XEZ. Сигнал -BGH не используется и остается не подключенным. Далее следует группа важных сигналов порта прямого доступа к памяти процессора. Это шестнадцать мультиплексированных сигна- лов шины адреса данных IAD0-IAD15 и сигналы управления IACK, -IWR, -IRD, -IS, IAL. Данный порт можно использовать для загрузки программ и данных во внутреннюю память процессора и, кроме того, читать содержимое памяти процессора во время его работы. Это позволяет обходиться без эмулятора EZ-ICE, облегчает отладку про- грамм и дает большую гибкость при разработке многопроцессорных схем. На схеме все эти сигналы подключены через буферные микро- схемы D2, D3, D4.1, D5.1, D5.5 и D5.5 к внешнему разъему XU1. В дальнейшем мы рассмотрим специальный адаптер, который позво- лит нам оперативно загружать программы в процессор, читать и за- писывать данные в его память и окажет большую помощь в изучении самого процессора и освоении его системы команд и способов про- граммирования. Цепочка элементов R4 и С11 фильтрует высокочас- тотные импульсы, проникающие на чувствительный вход IAL процес- сора, обеспечивая тем самым повышенную помехозащищенность. Резисторные сборки RN1 и RN2 подтягивают сигналы порта IDMA и прерываний к высокому пассивному уровню. Следующие две группы сигналов последовательных портов SPORTO и SPORT1 обеспечивают работу с последовательными устройствами. К порту SPORTO в схеме подключен кодек DA1 типа MC14LC5480, который содержит в себе кодер и декодер с фильт- рами и компандер. В отличие от аналого-цифрового и цифро- 29
Часть I. Схемотехника аналогового преобразователей, он отличается тем, что выполняет преобразование сигналов по A-типу или ц-типу. Фактически оба эти типа преобразования являются аппроксимацией логарифмической функции с различной степенью приближения. Они активно приме- няются в телекоммуникационных системах для цифрового преоб- разования и сжатия информации с максимальным сохранением соотношения сигнал-шум. Для этого аналоговые сигналы малой амплитуды дискретизируются чаще. Для сжатия цифровой инфор- мации используется функция компандирования, встроенная в кодек и сигнальный процессор. С помощью этой функции производится прямое и обратное преобразование 13- или 14-разрядных слов в 8-разрядные, за счет нелинейного прореживания. В цифровых каналах связи используются именно такие 8-битные данные. Для нормальной работы кодеку необходимы сигналы синхронизации и кадровые стробы приемника и передатчика. Эти сигналы формиру- ются портом SPORTO на выводах SCLKO, RFS0 и TFS0 соответст- венно. Все перечисленные сигналы синхронизации и стробов про- граммируются в процессоре по направлению, частоте, длительно- сти и фазовому сдвигу. Цифровые данные приемника и передатчи- ка порта транслируются на кодек по сигнальным выводам DR0 и DT0 соответственно. Помимо перечисленных узлов, кодек содержит в се- бе операционные усилители и источник опорного напряжения для смещения напряжения на входах усилителей относительно нулевого потенциала. Аналоговый сигнал на кодек заведен с разъема XIN типа тюльпан, через развязывающий конденсатор С16. Стабилитроны VS1 и VS2 защищают вход кодека от сигналов большой амплитуды. Резисторы R9 и R10 определяют коэффициент усиления входного сигнала. Опорное напряжение подведено к неин- версному входу кодека через резистор R12. Цепочка R11-C17 кор- ректирует смещение по высоким частотам. Конденсатор С18 являет- ся фильтрующим. Оцифрованный сигнал поступает в процессор на вход DR0 для обработки или цифровой записи. В свою очередь, про- цессор посылает в кодек цифровые сигналы для последующего их преобразования в аналоговый сигнал. После цифро-аналогового преобразования сигнала DT0 от процессора выходной аналоговый сигнал с кодека поступает через ограничительный резистор R14 на разъем XOUT. Кроме того, этот же сигнал поступает на низкочастот- ный усилитель, выполненный на транзисторах VT1 и VT2. В нагрузку усилителя, через развязывающий конденсатор СРЗ, включена ми- ниатюрная динамическая головка ВА1. Она позволит прослушивать сигналы, генерируемые процессором через кодек. Резисторы R13 и R16 определяют коэффициент усиления всего каскада, а резистор 30
Гпава 3. Практические схемы включения R15 обеспечивает необходимое смещение на базах транзисторов. Выводы порта SPORT1 являются многофункциональными. Они мо- гут быть запрограммированы как на работу с последовательными уст- ройствами подобно порту SPORTO, так и в альтернативном режиме как флаги входа-выхода и входы прерывания. В нашей схеме использует- ся второй способ их применения. Вывод 51 порта будет работать как выход, а вывод 55 как вход. Кроме того, задействован вход прерыва- ния IRQ1, для формирования прерывания процессора при поступлении информации по сигнальному выводу FI. Эти выводы задействованы для организации последовательного порта RS-232 или проще - ком- пьютерного СОМ порта. Для этого они подключены к микросхеме пре- образования уровней DA2. Эта микросхема преобразует ТТЛ уровни сигнала в уровни стандарта RS-232. Конденсаторы С12-С15 обеспе- чивают работу внутренних умножителей напряжения в микросхеме. Сигналы порта RS-232 выведены на девятиштырьковый разъем XRS1. Назначение сигналов на этом разъеме соответствует стандарту, при- нятому для персональных компьютеров IBM PC. В дальнейшем к этому порту можно подключить компьютер, с помощью нульмодемного кабе- ля, для загрузки обучающих программ с помощью программного пакета EZ-KIT Lite, распространяемого фирмой Analog Device. Сигналы А0-А13 являются адресными и предназначены для адре- сации внешней памяти или устройств ввода-вывода. В схеме они под- ключены к адресным выводам микросхемы постоянной памяти D7, а некоторые из них, к дешифратору устройств ввода-вывода D9. Сигналы D0-D23 предназначены для передачи данных и для адресации. Младшие восемь бит этой шины участвуют в обмене данными только с расширенной памятью. В нашей схеме эта па- мять не подключена и, соответственно, сигналы D0-D7 не задейст- вованы. Разряды D8-D15 используются для передачи данных при обращении к байтовой памяти BDMA. В нашей схеме эту роль выполняет микросхема постоянной флэш-памяти D7. Наконец, старшие разряды этой шины D16-D23 выполняют двоякую роль. При обращении к байтовой памяти они несут функцию старших адресных линий, а при обращении к устрой- ствам ввода-вывода являются старшими разрядами шины данных. Далее следуют сигналы записи -WR, чтения -RD и выборки внешних устройств. В нашей схеме из внешних устройств будет ис- пользоваться байтовая память D7, выбираемая сигналом -BMS с помощью дешифратора D8, и устройства ввода-вывода, выбираемые сигналом -IOMS с помощью дешифратора D9 и логических элемен- тов D13.1, D13.2. В схеме присутствует восьмиразрядный регистр ввода D11 и восьмиразрядный регистр вывода D12. Первый из них 31
Часть I. Схемотехника позволяет снимать дискретные сигналы с различных цифровых дат- чиков, контактов и пр. А второй обеспечивает возможность управле- ния цифровыми ключами, индикаторами и т.п. Выводы этих регист- ров заведены на разъемы XI и ХО соответственно. Временные диаграммы циклов чтения и записи данных процес- сором, представлены на рис. 3.3 и 3.4, соответственно. Параметры сигналов для этих циклов приводятся в табл. 3.4 и 3.5. Рис.3.4. Временная диаграмма цикла записи 32
Гпава 3. Практические схемы включения Таблица 3.4 Параметры сигналов для цикла чтения данных процессором Параметр Минимум Максимум Единица измерения Чтение памяти Требуемые длительности: tRDD 0,5 tcK - 9 + w нс tAA 0,25 tcK — 10.5 + w нс tRDH 0 нс Характеристика переключения: tRP 0,5 tcK - 5 + w 0,25tCK + 7 нс tcRD 0,25 tcK - 5 НС tASR 0,25 tcK-6 нс tRDA 0,25 tcK - 3 нс tRWR 0,5 tcK — 5 нс Таблица 3.5 Параметры сигналов для цикла записи данных процессором Параметр Минимум Максимум Единица измерения Запись памяти Характеристика переключения: tow 0,5 tcK - 7 + w нс tDH 0,25 tCK - 2 нс twp 0,5 tcK - 5 + w нс twDE 0 нс tASW 0,25 tcK — 6 нс tDDR 0,25 tcK - 7 нс tcWR 0,25 tCK - 5 нс tAW 0,75 tcK — 9 + w 0,25 tCK + 7 нс twRA 0,25 tCK - 3 нс twWR 0,5 tcK — 5 нс w - число циклов задержки * 1ск 33
Часть I. Схемотехника Из приведенных данных видно, что чтение и запись данных в процессор необходимо производить по нарастающему фронту сиг- налов чтения или записи соответственно, когда обеспечена досто- верность данных на шине. Следующая группа сигналов FL0-FL2 является битовыми выход- ными сигналами, которые работают только на вывод. К ним подключе- ны индикаторы HL0-HL2 через буферный повторитель D4.2. В отличие от FL0-FL2, выводы PF0-PF7 являются двунаправ- ленными битовыми сигналами и могут быть запрограммированы как на ввод, так и на вывод побитно. Так, к выводу PF7 подключен ин- дикатор HL3, а выводы PF0-PF3 будут запрограммированы как вхо- ды и к ним подключены кнопки SB0-SB3. Резисторы R5 - R8 явля- ются токоограничивающими, а резисторная сборка RN3 подтягива- ет сигналы управления и входные сигналы к высокому уровню. Назначение сигнала ММАР было показано в предыдущей главе при рассмотрении способов организации памяти процессора. По- скольку в нашей схеме используется внутренняя память процессо- ра и задействован механизм загрузки процессора, этот вывод под- ключен к нулевому потенциалу. Сигнал -PWD отвечает за формирование немаскируемого пре- рывания при снижении питания процессора ниже нормы. Для его использования необходимо подключить к нему выход узла, отсле- живающего напряжение питания и формирующего потенциал низ- кого уровня для формирования прерывания при снижении напря- жения питания ниже установленной границы. В результате процес- сор успевает сохранить необходимые данные в энергонезависимой внешней памяти или выполнить другие необходимые инструкции для предотвращения неблагоприятных последствий, связанных с пропа- данием питания. В нашей схеме данный сигнал подключен непо- средственно к плюсовому выводу шины питания и не используется. Также не используется и выходной сигнал PWDACK, предназначен- ный для транзита сигнала, уведомляющего о снижении питания. Наконец последний вывод процессора BMODE определяет ин- терфейс, через который будет производиться загрузка процессора. Если на этот вывод подан нулевой потенциал, загрузка процессора будет производиться через интерфейс BDMA, т.е. из байтовой па- мяти. В противном случае процедура загрузки будет производиться через интерфейс IDMA. В дальнейшем мы рассмотрим оба вариан- та загрузки. Для автоматизации процесса загрузки в схеме приме- нен триггер, выполненный на элементах D4.1 и D4.2. В зависимости от источника сброса, триггер переключается в такое состояние, ко- торое обеспечивает установку на выводе BMODE сигнала, необхо- димого для загрузки через соответствующий интерфейс. 34
Гпава 3. Практические схемы включения А С19.С20 19пФ BQ2 11059КГи,1С XTAL1 XTAL2 RESET C2ZI А0 28 Al 7/ А2 26 0V 25, 000 L DOI 2 DD2 T DD3 4 D04 5 005 5 □ OS 7 □ 07 S 0V e22 -RO f 21,, -WR [_15' 18,. -SV 12 -UART А0 А1 А2 А5 □0 01 П/ 03 П4 05 ОС 07 1CR ’’OR IOW [GW CS0 CS2 UAR1 RxRduj* Т xRdy< Rx Гх Rc 1 k В Out ( 10 □Die <>3 9 J5 RX tx S LD 1Л DTR. ere (^- DSR j, oTT INr со R[ CND -5V 19 20 40 -RT5 -CIS -0Р1 -0Р2 -5V 0V •5V РАЗ 9 D5. 2 г-Ь □5. 3 □ АЗ МАХ491 ТХ -CPI 3 _0V RX /с Л-J £ ... ,..,3 : 2 R19 0V -Cr5 0V______10K ТХ- _[х_: RX RX- 0V тх- -5V RX RX- 0 V RT5 10 RTS- 14 R20 c\/ Vcc t э V 12 CT5+- 1 I 1 CTS- 0V XRS2 □5R-9M б < R21 R18-R21 51К -т-3 >4 -»5 8 <- 9 « R~5- RTS<- CI.5± CT5- Рис. 3.5. Внешнее устройство в качестве дополнения схемы процессора 35
Часть I. Схемотехника Еще одно внешнее устройство в качестве дополнения схемы приведено на рис. 3.5. Это дополнение схемы не является обяза- тельным и может не распаиваться на основную плату. Но если поя- вится необходимость оснащения рассмотренной выше схемы еще одним последовательным портом типа RS-422, это дополнение по- может в этом. Как видно из рисунка, схема содержит интегрированную микро- схему UART D12 с подключенными к ней резонатором BQ2 и вспо- могательными конденсаторами С19, С20 для запуска внутреннего генератора. Программирование этой микросхемы производится че- рез сигналы шины данных DD0 - DD7. Выходные сигналы микро- схемы UART подключены к приемопередатчикам - преобразовате- лям уровней сигналов DA3 и DA4 для организации последовательно- го порта RS-422. Элементы D5.2 и D5.3 инвертируют выходные сиг- налы управления UART, обеспечивая отключение приемопередатчи- ков DA3 и DA4 в момент сброса самого UART или при включении. Элемент D5.3 инвертирует выходной сигнал запроса прерыва- ния от UART. Резисторы R17-R21 обеспечивают пассивное со- стояние сигналов при отключенной линии связи. Этот порт позво- ляет обмениваться информацией со 127 другими устройствами по аналогичному порту на расстоянии до 1200 метров. Все сигналы порта выведены на разъем XRS2. Вся схема может быть распаяна на небольшой макетной плате или на специально изготовленной плате с разработанной топологи- ей электрических соединений. Для разработки топологии печатной платы необходимо создать файл посадочного места для компонен- та - процессора, который будет использоваться системой автома- тического проектирования САПР. Чертеж корпуса процессора при- веден на рис. 3.6. На нем даны все необходимые размеры в двух системах единиц измерения. В скобках приведены размеры в дюймах, а без скобок- в миллиметрах. Ввиду того, что процессор имеет большое количест- во выводов и мелкий шаг между ними, для изготовления электронных устройств с его применением может потребоваться разработка пе- чатной платы. Однако некоторые умельцы используют другие хитрые приемы для установки таких компонентов на печатной плате. Одним из таких способов является наклейка фрагментов текстолита с кон- тактными площадками по периметру установочного места компонен- та. После чего выводы компонента припаиваются к контактным пло- щадкам этих фрагментов, и уже после этого тонкими проводниками осуществляется остальной монтаж всего устройства. 36
Гпава 3. Практические схемы включения 4,07 (0,160) МАХ 3,67(0,144) 3,17 (0,125) 0,87 (0,034) 0,45 (0,018) 0,73 (0,29) 0.30 (0,012) Рис. 3.6. Корпус процессора Естественно, контактные площадки фрагментов должны совпа- дать с шагом устанавливаемого компонента. Эти фрагменты можно вырезать, например, с неисправных компьютерных плат или по- добрать из наборов, продающихся в специализированных магази- нах по электронике. В следующих главах говорится о внутренней программной модели процессора, а также о средствах и способах программирования сиг- нального процессора. А приведенная и описанная здесь схема по- может на практике начать освоение сигнальных процессоров. 37
Глава 4. Программно-логическая модель В этой главе говорится о внутренней программно-логической модели процессора и его системе прерываний. Прежде чем начать разрабатывать программы для сигнального процессора, необходимо познакомиться с его программно- логической моделью, системой команд и программными инструмен- тами. Освоение данного материала потребует времени и терпения. Но без хорошего знания этих основ невозможно будет научиться программировать сигнальный процессор. Итак, начнем с программно-логической модели процессора. Та- кая модель для ADSP-2181 приведена на рис. 4.1. На ней представлены все регистры процессора с указанием их размерности и условными обозначениями. Несмотря на многочис- ленность этих регистров, все они систематически распределены по логическим блокам процессора, что позволяет понять их назначе- ние без особого труда. Главный блок регистров представлен на рисунке слева, в про- цессорном ядре. В первую очередь это блоки регистров программ- ных генераторов адреса DAG1 и DAG2. Данные блоки регистров включают в себя индексные регистры I, регистры длины буфера L и регистры-модификаторы М. Все перечисленные регистры имеют размерность 14 бит. Эти регистры позволяют организовывать в памяти процессора цикличе- ские и линейные буферы, с автоматическим инкрементом адреса слов в этих буферах и отслеживанием их длины. В каждом из бло- ков генераторов адресов присутствует по четыре группы таких ре- гистров. Использование этих и других регистров будет рассмотрено позже на конкретных примерах. Блок программного автомата содержит регистры, отвечающие за автоматические операции процессора. В их число входят: • программный счетчик с 16-уровневым 14-разрядным стеком PC STACK, для организации вызова подпрограмм и обработки пре- рываний; • счетчик циклов CNTR с 4-уровневым 14-разрядным стеком COUNT STACK, для организации вложенных программных циклов; 38
Гпава 4, Программно-логическая модель • псевдорегистр OWRCNTR, для обновления значения счетчика CNTR; • цикловой компаратор LOOP STACK с 4-уровневым 18- разрядным стеком, для обеспечения выполнения программных циклов без тактов ожидания. Назначение остальных регистров управления и состояния блока программного автомата процессора, приводится в табл. 4.1. Обра- щение к этим регистрам из программы производится по их логиче- ским именам, совпадающим с именами, приведенными на рис. 4.1 и в табл. 4.1. Таблица 4.1а Регистр состояния арифметико-логического устройства ASTAT Раз- ряд Исход- ное состоя- ние Назначение 7 0 Флаг знака ввода в устройство сдвига SHIFTER (SS) 6 0 Флаг переполнения в умножителе-накопителе МАС (MV) 5 0 Флаг частного АЛУ (AQ) 4 0 Флаг знака ввода порта X в АЛУ (AS) 3 0 Флаг переноса бита в АЛУ (АС) 2 0 Флаг переполнения АЛУ (AV) 1 0 Флаг отрицательного результата в АЛУ (AN) 0 0 Флаг нулевого значения в АЛУ (AZ) Таблица 4.16 Регистр состояния режима процессора MSTAT Раз- ряд Исход- ное состоя- ние Назначение 6 0 Разрешение режима GO 5 0 Разрешение работы таймера 4 0 Результаты умножителя: 0 - дробные, 1 - целые 3 0 Разрешение режима насыщения регистра AR АЛУ 39
Часть I. Схемотехника Процессорное ядро Генераторы адреса данных DAG1 DAG2 Адресация только DM Адресация только DM и РМ I0 L0 МО I4 L4 М4 и L1 М1 I5 L5 М5 I2 L2 М2 I6 L6 Мб I3 L3 М3 I7 L7 М7 14 14 14 14 14 14 Программный автомат 18 5 14 ALU МАС 16 16 |АХ0| АХ1 16 16 16 AYO АУ1 16 AR AF 16 16 16 16 МХ0|МХ1| |myo|myi| 8 16 16 16 |MR2|MR1|MRO] |~MF SHIFTER 16 16 16 si~| | SE | |~SB 16 16 |SR1|SRO Устройство обмена между шинами 8 |PX~I 40
Гпава 4. Программно-логическая модель Таймер Интерфейс памяти 0x3FFD TPERIOD 0x3FFC TCOUNT 0x3FFB TSCALE 0x3FFF SCR 0x3FFE WCR Sport О RXO TXO Разрешение мультиканальности 0x3FFA S0RW1 0x3FF9 SORWO 0x3FF8 SOTW1 0x3FF7 SOTWO Управление 0x3FF6 SOCR 0x3FF5 SOCLKDIV 0x3FF4 SORFDIV 0x3FF3 SOABUF DMOVLAY PMOVLAY Sport 1 | RX1 | | TX1 | Управление 0x3FF2 SICR 0x3FF1 S1CLKDIV 0x3FF0 S1RFDIV 0x3FEF S1ABUF IDMA Порт BDMA Порт Программируемые флаги IDMA Регистры BDMA Регистры 0x3FE0 IDMACR 0x3FE4 BWCOUNT Регистры 0x3FE3 BDMACR программируемых флагов 0x3FE2 BEAD 0x3FE6 PFTYPE Ox3FE1 BIAD 0x3FE5 PFDATA Рис. 4.1. Программно-логическая модель процессора ADSP-2181 41
Часть I. Схемотехника Продолжение таблицы 4.16 Раз- ряд Исход- ное состоя- ние Назначение 2 0 Разрешение режима фиксации переполнения АЛУ 1 0 Разрешение бит-реверсивной адресации DAG1 0 0 Выбор банка регистров данных: 0 - главный, 1 - теневой Таблица 4.1 в Регистр разрешения прерываний IMASK (0 - запрещено, 1 - разрешено) Разряд Исход- ное со- стояние Назначение J5...10 0 Не используются 9 0 -IRQ2 8 0 -IRQL1 7 0 -IRQL0 6 0 Передатчик SPORTO 5 0 Приемник SPORTO 4 0 -IRQE 3 0 BDMA 2 0 Передатчик SPORT1 или-IRQI 1 0 Приемник SPORTO или -IRQ0 0 0 Таймер Таблица 4.1г Регистр состояния стека SSTAT Раз- ряд Исход- ное состоя- ние Назначение 7 0 Стек циклов переполнен 6 1 Стек циклов пуст 42
Гпава 4. Программно-логическая модель Раз- ряд Исход- ное состоя- ние Назначение 5 0 Стек состояний переполнен 4 1 Стек состояний пуст 3 0 Стек счетчика переполнен 2 1 Стек счетчика пуст 1 0 Стек счетчика команд переполнен 0 1 Стек счетчика команд пуст Таблица 4.1д Регистр управления прерываниями ICNTL Раз- ряд Исход- ное состоя- ние Назначение 4 X Вложенность прерываний: 0 - запрещена, 1 - раз- решена 3 0 Не используется 2 X Чувствительность -IRQ2: 0 - уровень, 1 - фронт 1 X Чувствительность -IRQ1: 0 - уровень, 1 - фронт 0 X Чувствительность -IRQ0: 0 - уровень, 1 - фронт Таблица 4.1 е Регистр установки и сброса прерываний IFC (только запись) Раз- ряд Исход- ное состоя- ние Назначение 15 0 Принудительная установка прерывания -IRQ2 14 0 Принудительная установка прерывания передатчика SPORTO 13 0 Принудительная установка прерывания приемника SPORTO 12 0 Принудительная установка прерывания -IRQE 43
Часть I. Схемотехника Раз- ряд Исход- ное состоя- ние Назначение 11 0 Принудительная установка прерывания BDMA 10 0 Принудительная установка прерывания передатчика SPORT1 или -IRQ1 9 0 Принудительная установка прерывания приемника SPORTO или -IRQ0 8 0 Принудительная установка прерывания таймера 7 0 Сброс прерывания -IRQ2 6 0 Сброс прерывания передатчика SPORTO 5 0 Сброс прерывания приемника SPORTO 4 0 Сброс прерывания -IRQE 3 0 Сброс прерывания BDMA 2 0 Сброс прерывания передатчика SPORT1 или -IRQ1 1 0 Сброс прерывания приемника SPORTO или -IRQ0 0 0 Сброс прерывания таймера X - произвольное состояние после сброса. Блок арифметико-логического устройства ALU включает в себя: • два 16-разрядных регистра операндов АХО и АХ1; • два 16-разрядных регистра операндов AY0 и AY1; • один 16-разрядный регистр результата AR; • один 16-разрядный регистр обратной связи AF. Все эти регистры имеют своих двойников - теневые регистры, изображенные на рисунке программно-логической модели процес- сора в виде теней. Переключение между основными и теневыми регистрами производится программно. Блок умножителя МАС включает в себя: • два 16-разрядных регистра операндов МХО и МХ1; • два 16-разрядных регистра операндов MY0 и MY1; • два 16-разрядных регистра результата MR0 и MR1; • один 8-разрядный регистра результата MR2; • один 16-разрядный регистр обратной связи AMF. Блок устройства сдвига SHIFTER включает в себя: 44
Гпава 4. Программно-логическая модель • два 16-разрядных регистра результата SRO и SR1; • один 5-разрядный регистр блочных операций SB; • один 8-разрядный регистр экспоненты SE; • один 16-разрядный регистр операнда SL Так же как и в ALU, в блоках МАС и SHIFTER все регистры име- ют своих двойников - теневые регистры. Устройство обмена между шинами представляет собой 8- разрядный регистр РХ, участвующий в пересылках между шинами адреса и данных. Остальные регистры процессора распределены между блоками таймера, интерфейсной памяти, портов SPORTO и SPORT1, портов IDMA и BDMA и блоком программируемых флагов. Все эти регистры процессора доступны как ячейки памяти данных, т.е. отображены на память данных процессора. Для таких регистров, на рисунке программно-логической модели приведен адрес каждого регистра в шестнадцатеричном виде, слева от его обозначения. Всего в процессоре отведено тридцать две ячейки 16-разрядных слов с адреса 0x3FE0 по адрес 0x3FFF для регистров такого типа. Часть ячеек памяти для таких регистров не используется в рас- сматриваемом процессоре ADSP-2181, но используется в других процессорах семейства ADSP-21XX. В табл. 4.2 приведено назначение разрядов всех регистров, ото- браженных на память процессора. Таблица 4.2а Регистр управления системой SCR, адрес памяти данных = 0x3FFF Разряд Исход- ное со- стояние Назначение 15...13 0 Не используются 12 0 Разрешение порта SPORTO: 0=порт запрещен, 1= порт разрешен 11 0 Разрешение порта SPORT1: 0=порт запрещен, 1 = порт разрешен 10 0 Конфигурация режима работы порта SPORT1: 0=сигналы Fl FO IRQO IRQ1 SCLK, ^последовательный порт SPORT1 9...3 0 Не используются 2...0 1 Циклы ожидания памяти программ от 0 до 7 45
Часть I. Схемотехника Таблица 4.26 Регистр тактов ожидания WSR, адрес памяти данных=0хЗРРЕ Разряд Исход- ное со- стояние Назначение 15 0 Не используется 14...12 1 Циклы ожидания памяти данных от 0 до 7 11...9 1 Циклы ожидания 3-й группы портов ввода-вывода от 0 до 7 8...6 1 Циклы ожидания 2-й группы портов ввода-вывода от 0 до 7 5...3 1 Циклы ожидания 1-й группы портов ввода-вывода от 0 до 7 2...0 1 Циклы ожидания 0-й группы портов ввода-вывода от 0 до 7 Таблица 4.2в Регистры таймера Разряд Исход- ное со- стояние Назначение Регистр периода таймера TPERIOD, адрес памяти данных=ОхЗРРО 15...0 I...... X | Период таймера от 0 до OxFFFF Регистр счетчика таймера TCOUNT, адрес памяти данных=0хЗРРС 15...0 I X | Счетчик таймера от 0 до OxFFFF Регистр масштабирования таймера TSCALE, адрес памяти данных=0хЗРРВ 15...8 0 Не используются 7...0 X Масштабирование таймера от 0 до OxFF Таблица 4.2г Регистры последовательного порта SPORTO Раз- ряд Исходное состояние Назначение Регистр разрешения многоканального приема S0RW1, адрес памяти данных = 0x3FFA 15...0 X Разрешение приема канала 31... 16 46
Гпава 4. Программно-логическая модель Раз- ряд Исходное состояние Назначение Регистр разрешения многоканального приема S0RW0, адрес памяти данных = 0x3FF9 15...0 X Разрешение приема канала 15...0 Регистр разрешения многоканальной передачи S0TW1, адрес памяти данных=0хЗРР8 15...0 X Разрешение передачи канала 31... 16 Регистр разрешения многоканальной передачи S0TW0, адрес памяти данных=0хЗРР7 15...0 X Разрешение передачи канала 15...0 Регистр управления S0CR, адрес памяти данных=0хЗРР6 15 0 Разрешение многоканальное™: 0 - запрещено, 1 - разрешено 14 0 Разрешение внутреннего тактового генератора: 0 - запрещен, 1 - разрешен 13 0 Требование кадровой синхронизации приема: 0 - не требуется, 1 - требуется (в многока- нальном режиме - задержка) 12 0 Требование широкого кадрового импульса приемника: 0 - не требуется, 1 - требуется (в многока- нальном режиме - задержка) 11 0 Требование кадровой синхронизации передат- чика: 0 - не требуется, 1 - требуется (в многока- нальном режиме - задержка) 10 0 Требование широкого кадрового импульса передатчика: 0 - не требуется, 1 - требуется (в многока- нальном режиме - задержка) 9 0 Разрешение внутреннего тактового генератора передатчика: 0 - запрещен, 1 - разрешен (в многоканальном режиме - число каналов: 0-24 канала, 1 - 32 канала) 8 0 Разрешение внутреннего кадрового генерато- ра приемника: 0 - запрещено, 1 - разрешено 47
Часть I. Схемотехника Раз- ряд Исходное состояние Назначение 7 0 Разрешение инвертирования кадрового гене- ратора передатчика: 0 - запрещено, 1 - разрешено (только в много- канальном режиме) 6 0 Разрешение инвертирования кадрового гене- ратора приемника: 0 - запрещено, 1 - разрешено 5, 4 0 Формат данных: 00 - выравнивание по правому краю, старшие биты=0, 01 - выравнивание по правому краю, старшие биты=знаку, 10 - компандирование по МЮ закону, 11 - компандирование по А закону 3...0 0 Длина слова минус 1 Регистр делителя тактовых импульсов S0CLKDIV, адрес памяти данных = 0x3FF5 15...0 0 Делитель частоты тактовых импульсов = (CLKOUT/2*SCLK)-1 Регистр делителя кадровых импульсов приемника S0RFDIV, адрес па- мяти данных=0хЗРБ4 15...0 0 Делитель частоты тактовых импульсов = (SCLK/RFS)-1 Регистр управления авто буферизацией S0ABUF, адрес памяти данных = 0X3FF3 15 0 Не используется 14 0 Бит разрешения CLKOUT 13 0 Не используется 12 0 Бит управления округлением со смещением 11...9 0 Номер индексного регистра передатчика 8, 7 0 Номер регистра модификатора передатчика 6...4 0 Номер индексного регистра приемника 3,2 0 Номер регистра модификатора приемника 1 0 Разрешение автобуферизации передатчика 0 0 Разрешение автобуферизации приемника 48
Гпава 4. Программно-логическая модель Таблица 4.2д Регистры последовательного порта SPORT1 Раз- ряд Исходное состояние Назначение Регистр управления S1CR, адрес памяти данных=0хЗРР2 15 0 Флаг FO (только чтение) 14 0 Разрешение внутреннего тактового генератора: 0 - запрещен, 1 - разрешен 13 0 Требование кадровой синхронизации приема: 0 - не требуется, 1 - требуется 12 0 Требование широкого кадрового импульса приемника: 0 - не требуется, 1 - требуется 11 0 Требование кадровой синхронизации передат- чика: 0 - не требуется, 1 - требуется 10 0 Требование широкого кадрового импульса передатчика: 0 - не требуется, 1 - требуется 9 0 Разрешение внутреннего тактового генератора передатчика: 0 - запрещен, 1 - разрешен 8 0 Разрешение внутреннего кадрового генерато- ра приемника: 0 - запрещено, 1 - разрешено 7 0 Разрешение инвертирования кадрового гене- ратора передатчика: 0 - запрещено, 1 - разрешено 6 0 Разрешение инвертирования кадрового гене- ратора приемника: 0 - запрещено, 1 - разрешено 5, 4 0 Формат данных: 00 - выравнивание по правому краю, старшие биты=0, 01 - выравнивание по правому краю, старшие биты=знаку, 10 - компандирование по МЮ закону, 11 - компандирование по А закону 49
Часть I. Схемотехника Раз- ряд Исходное состояние Назначение 3...0 0 Длина слова минус 1 Регистр делителя тактовых импульсов S1CLKDIV, адрес памяти дан- ных=0хЗРР1 15...0 0 Делитель частоты тактовых импульсов = (CLKOUT/2*SCLK)-1 Регистр делителя кадровых импульсов приемника S1RFDIV, адрес па- мяти данных=0хЗРР0 15...0 0 Делитель частоты тактовых импульсов = (SCLK/RFS)-1 Регистр управления автобуферизацией S1ABUF, адрес памяти дан- Hbix=0x3FEF 15 0 Блокирование вывода XTAL в режиме пони- женной мощности: 0 - активен, 1 - блокирован (этот вывод дол- жен быть блокирован, если к процессору под- ключен генератор, а не кварцевый резонатор) 14 0 Разрешение задержки запуска процессора из режима пониженной мощности на 4096 циклов: 0 - запрещено, 1 - разрешено 13 0 Принудительный вход в режим пониженной мощности: 0 - нормальный режим, 1 - режим понижен- ной мощности (осуществляется переход на вектор прерыва- ния пониженной мощности) 12 0 Принудительный перезапуск процессора при подаче питания: 0 - нормальный режим, 1 - программный пе- резапуск 11...9 0 Номер индексного регистра передатчика 8, 7 0 Номер регистра модификатора передатчика 6...4 0 Номер индексного регистра приемника 3, 2 0 Номер регистра модификатора приемника 1 0 Разрешение автобуферизации передатчика 0 0 Разрешение автобуферизации приемника 50
Гпава 4. Программно-логическая модель Таблица 4.2е Регистры управления программируемыми флагами Разряд Исходное состояние Назначение Регистр управления программируемыми флагами РРТУРЕ, адрес памя- ти данных=0хЗРЕ6 15 0 Не используется 14...12 1 Циклы ожидания байтовой памяти данных BDMA от 0 до 7 11 1 Разрешение выборки портов ввода-вывода сигналом -CMS: 0 - запрещено, 1 - разрешено 10 0 Разрешение выборки байтовой памяти данных BDMA сигналом -CMS: 0 - запрещено, 1 - разрешено 9 1 Разрешение выборки памяти данных сигналом -CMS: 0 - запрещено, 1 - разрешено 8 1 Разрешение выборки памяти программ сигна- лом -CMS: 0 - запрещено, 1 - разрешено 7...0 0 Режим работы программируемых выводов * флагов PF7... PF0: 0 - выход, 1 - вход Регистр управления программируемыми флагами PFDATA, адрес па- мяти данных=0хЗЁЕ5 15...8 X Не используются 7...0 X Данные программируемых выводов флагов PF7... PF0 (чтение/запись) Таблица 4.2ж Регистры управления портом байтовой памяти BDMA Разряд Исходное состояние Назначение Регистр-счетчик слов BWCOUNT, адрес памяти данных=0хЗРЕ4 15, 14 0 Не используются 51
Часть I. Схемотехника Разряд Исходное состояние Назначение 14...0 0x20/0 Значение счетчика (когда ММАР=0 и BMODE=0 значение счетчи- ка=0х20, когда ММАР=1 или BMODE=1 значение счет- чика=0) Регистр управления BDMACR, адрес памяти данных=0хЗРЕЗ 15...8 0 Номер страницы BDMA от 0 до OxFFFF 7...4 0 Не используются 3 1 Режим работы процессора при выполнении циклов BDMA: 0 - работа, 1 - останов 2 0 Направление передачи данных: 0 - чтение из BDMA, 1 - запись в BDMA 1,0 0 Тип данных: 00 - память программ 24 разрядов, 01 - память данных 16 разрядов, 10 - память данных 8 старших разрядов, 11 - память данных 8 младших разрядов Регистр внешнего адреса BEAD, адрес памяти данных=0хЗЕЕ2 15, 14 0 Не используются 13...0 0 Значение внешнего адреса на шине процессо- ра, при обмене через BDMA (от 0 до Ox3FFF) Регистр внутреннего адреса BIAD, адрес памяти данных=0хЗРЕ1 15, 14 0 Не используются 13...0 0 Значение внутреннего адреса памяти процес- сора при обмене через BDMA (от 0 до 0x3FFF) Таблица 4.2з Регистр управления IDMACR Разряд Исходное состояние Назначение 15 0 Не используется 52
Гпава 4. Программно-логическая модель Разряд Исходное состояние Назначение 14 0 Указатель типа памяти 0=память программ РМ 1=память данных DM 13...0 0 Значение начального адреса памяти процес- сора при обмене через IDMA (от 0 до 0x3FFF) X - произвольное состояние после сброса. Условные обозначения регистров в таблицах соответствуют их названиям на программно-логической модели, изображенной на рис. 4.1. Все перечисленные выше регистры позволяют осуществлять полный контроль и управление над процессором со стороны про- граммы. 53
Глава 5. Система прерываний В этой главе описывается система прерываний процессора, позволяющая процессору оперативно реагировать на различные события. Диспетчер прерываний позволяет процессору реагировать на одиннадцать возможных прерываний и сброс. Все векторы преры- ваний процессора ADSP-2181 представлены в табл. 5.1. Таблица 5.1 Векторы прерываний сигнального процессора ADSP-2181 Приоритет Источник прерывания Адрес(НЕХ) Высший приоритет 0 Сброс (или выход из режима по- ниженной мощности при установке 12-го разряда регистра S1ABUF=1) 0000 1 Снижение потребляемой мощно- сти (немаскируемое прерывание) 002С 2 IRQ2 0004 3 IRQL1 0008 4 IRQL0 ооос 5 SPORTO Передатчик 0010 6 SPORTO Приемник 0014 7 IRQE 0018 8 BDMA прерывание 001С 9 SP0RT1 Передатчик или IRQ1 0020 10 SP0RT1 Приемник или IRQ0 0024 11 Низший приоритет Таймер 0028 Прерывания в процессоре имеют различную приоритетность, от О до 11. При возникновении любого из прерываний, процессор вы- 54
Гпава 5. Система прерываний полняет переход на подпрограмму обработки соответствующего прерывания, адрес которой заложен в векторе данного прерыва- ния. Адреса векторов прерываний расположены в самом начале программной памяти процессора через четыре 24-разрядных слова команды, что позволяет производить простую обработку или выход из прерывания на месте, без перехода на подпрограмму обработ- чика прерывания. В противном случае может быть выполнен безус- ловный переход на подпрограмму обработчика прерывания коман- дой jump. Процессор ADSP-2181 имеет четыре вывода для поддержки внешних прерываний: IRQ2, IRQLO, IRQL1 и IRQE. Кроме того, бла- годаря возможности SPORT1 быть переконфигурированным на вы- воды флагов FLAGJN, FLAGJDUT и прерываний IRQO, IRQ1, про- цессор может иметь еще два входа внешних прерываний вместо внутренних прерываний SPOTR1. В результате, в общей сложности процессор может иметь шесть внешних прерываний. Помимо внешних прерываний, процессор имеет и внутренние источники прерываний. Источниками внутренних прерываний явля- ются таймер, байтовый порт BDMA, два последовательных порта SPORT1 и SPORT2, программное прерывание сброса и прерыва- ние, вызываемое снижением напряжения питания. Все прерывания, кроме немаскируемого и сброса, можно запре- тить с помощью регистра IMASK (см. табл.1). Кроме того, можно программно сгенерировать или сбросить некоторые прерывания с помощью регистра IFC. Процессор реагирует на уровень сигналов на выводах прерыва- ний IRQL0 и IRQL1. Прерывание IRQE возникает по фронту изме- нения сигнала на этом выводе. Чувствительность процессора к сиг- налам IRQO, IRQ1 и IRQ2 определяется программно, с помощью регистра ICNTL. В следующей главе будет рассмотрена система команд процес- сора, с помощью которой осуществляются запись и чтение всех перечисленных здесь регистров и ячеек памяти самого процессора, а также операции сложения, умножения, ввода-вывода, управления программируемыми флагами и др. 55
ЧАСТЬ II. ПРОГРАММИРОВАНИЕ В этой части книги описывается создание первой рабочей программы для сигнального процессора и ее трансляции для получения исполняемого кода. Дается описание процедуры загрузки и портов, через которые возможна данная операция. Приводится описание разработанного автором устройства для загрузки программ, просмотра и редактирования памяти процессора с помощью компьютера. Описываются назначе- ние и работа специальной программы менеджера памяти. Да- ется описание директив ассемблера, формата данных и сис- тема команд для сигнального процессора. 56
Глава 6. Первая программа В этой главе говорится о создании программ для сигнального процессора, инструментальном программном обеспечении, от- ладке и способах загрузки программ в сигнальный процессор. Начнем изучение программирования сигнального процессора с конкретного примера программы, приведенной ниже. Эта про- грамма поможет нам в изучении структуры программы, системы команд процессора и средств разработки, а также позволит на практике освоить процедуру отладки и загрузки программы в па- мять процессора. Введите текст этой программы в компьютер с помощью любого текстового редактора и сохраните в файле с именем mem_clr.dsp или скопируйте с компакт-диска, прилагаемого к данной книге. /★★★★★★★★**************************************************************/ /* Программа mem_clr загружается в память программ и после */ /★ запуска заполняет память данных сигнального процессора */ /* с адреса 0x0000 по адрес 0x3fdf числовыми значениями */ /* */ /* Версия: 1.0 */ /* Автор: О.Д.Вальпа */ . module/RAM,/ABS=0 mem_clr; { Модуль памяти mem_clr с адреса 0 } .include <def2181.h>; { Включить файл определений } .var/dm/ram/circ buf_dm[0x3fdf] ; { Циклический буфер в памяти данных } jump BEGIN; nop; nop; nop; { Вектор прерывания сброса процессора } rti; nop; nop; nop; { Вектор прерывания IRQ2 } rti; nop; nop; nop; ( Вектор прерывания IRQL1 } rti; nop; nop; nop; { Вектор прерывания IRQL0 } rti; nop; nop; nop; ( Вектор прерывания SPORTO TX } rti ; nop; nop; nop; ( Вектор прерывания SPORTO RX } rti; nop; nop; nop; { Вектор прерывания IRQE } rti ; nop; nop; nop; ( Вектор прерывания BDMA } rti; nop; nop; nop; ( Вектор прерывания SPORT1 TX (IRQ1) } rti; nop; nop; nop; { Вектор прерывания SPORT1 RX (IRQO) } rti; nop; nop; nop; ( Вектор прерывания TIMER } rti; nop; nop, nop; ( Вектор прерывания POWER : DOWN } /************** начало программы ★★★★*★****★***************************/ BEGIN: { Метка начала программы } ахО = b#0111111110000000; dm(PFTYPE) = ахО;(Инициализация флагов PF} { ;ь+-|;;‘76543210 } { ; ; ।;;;l+++++++- pfo-pf7:0-bxoa i-выход } { ; ; ;;;ь----- --- рм -- выход -смз } 57
Часть II. Программирование { ; ; ; 'L--------DM ; О-запрещен } { ; ; ]L----------ВМ [ 1-разрешен } { : ; l-----------юм-- } { ; L--------------От О до 7 циклов задержки BDMA } { L----------------Не используется, всегда=0 } ахО = Ь#0000000010000000; dm(PFDATA) = ахО;{Управление светодиодом } { 76543210 } { ' L--+- Вход:Код клавиш } { L--------- Выход:Светодиод } i0 = Abuf_dm; 10 = %buf_dm; m0 = 1; ar = 0x1234; cntr = 10; do CLR_DM until ce; dm(i0, mO) = ar; CLR_DM:nop; toggle fl2; dm(0) = ar; ar = ar + 1; axO = dm(PFDATA); dm(l) = axO; jump CLR_DM; .endmod; { Индексный регистр Ю=адресу начала буфера } { Регистр длины 10=длине буфера } { Регистр модификатора т0=1 } { Записать данные в рабочий регистр аг } { Загрузить счетчик циклов } { Выполнять до CLR_DM пока счетчик не обнулится} { Заполнение очередной ячейки памяти данных } { Пустая команда } { Инвертировать вывод процессора FL2 } { Заполнение ячейки памяти данных с адресом 0 } { увеличивающимися значениями } { Читать код клавиш } { и записать в ячейку памяти данных по адресу 1} { Зациклить программу } { Конец программы Имя данного файла можно изменить на любое другое, длиной от одного до восьми символов, разрешенных для имен файлов. Рас- ширение «dsp» выбрано не случайно. При трансляции программы, компилятор будет искать файл программы именно с таким расши- рением. Если он не найдет такой файл, то выведет сообщение Preprocessor failed to open mem_clr.dsp. Рассмотрим- структуру и состав приведенного выше файла. Как видно из примера, в начале файла программы находится описание назначения программы, ее версии и пр. атрибуты, заключенные между символами /* и */ в качестве комментариев. Далее следуют три строки директив с комментариями, описывающими назначение этих директив и заключенными между фигурными скобками. Фигур- ные скобки также предназначены для вставки комментариев в про- грамму. Файл def2181.h, включаемый в файл программы с помощью директивы #include, состоит из строк, присваивающих символьным именам регистров значение их адресов в области памяти данных процессора. Использование символьных имен позволяет записывать в про- грамме не конкретные цифровые значения адресов или данных, а их словесные описания, более понятные и легче запоминающиеся. Это делается для придания программе наглядности, предотвращения машинальных ошибок во время ее создания и облегчения ее пони- мания. Содержимое файла def2181.h приведено ниже. 58
Гпава 6. Первая программа const IDMA= 0x3feO; const BDMA_BIAD= 0x3fel; const BDMA_BEAD= 0x3fe2; const BDMA.BDMA_Ctri= 0x3 fe3; const BDMA.BWCOUNT= 0x3fe4; const PFDATA= 0x3fe5; const PFTYPE= 0x3fe6; const SPORT1.Autobuf= 0x3fef; const SPORT1_RFSDIV= 0x3ff0; const SPORT1.SCLKDIV= 0x3ffl; const SPORTl_Control_Reg= 0x3ff2; const S PORT 0 _Au t obu f = 0x3ff3; const SPORTO_RFSDIV= 0x3ff4; const SPORTO.SCLKDIV= 0x3ff5; const SPORTO_Control_Reg= 0x3ff6; const S PORT 0_TX_Channe1s 0 = 0x3ff7; const SPORTO_TX_Channelsl= 0x3ff8; const S PORT 0 .RX.Channe1s 0 = 0x3ff9; const SPORTO.RX.Channelsi= 0x3ffa; const TSCALE= 0x3ffb; const TCOUNT= 0x3ffc? const TPERIOD= 0x3ffd; const DM_Wait_Reg= 0x3ffe; const System_Control_Reg= 0x3fff; Описание этих символьных имен и их соответствие адресам па- мяти данных процессора приведено в табл. 6.1. Таблица 6.1 Описание символьных имен регистров управления и состояния процессора ADSP-2181 Имя Описание Адрес IDMA Регистр управления IDMA 0x3FE0 BDMA.BIAD Регистр внутреннего адреса BDMA 0x3FE1 BDMA.BEAD Регистр внешнего адреса BDMA 0x3FE2 BDMA_BDMA_Ctrl Регистр управления BDMA 0x3FE3 BDMA_BWCOUNT Регистр счетчика слов BDMA 0x3FE4 PFDATA Регистр данных программируе- мых флагов 0X3FE5 PFTYPE Регистр управления программи- руемыми флагами 0X3FE6 SPORTl.Autobuf Регистр управления автобуфери- зацией SPORT1 0x3FEF 59
Часть II. Программирование Имя Описание Адрес SPORT1.RFSDIV Регистр делителя кадровых им- пульсов SPORT1 0x3FF0 SPORT1_SCLKDIV Регистр делителя тактовых им- пульсов SPORT1 0x3FF1 SPORT1 _Control_Reg Регистр управления SPORT1 0x3FF2 SPORTO_Autobuf Регистр управления автобуфери- зацией SPORTO 0x3FF3 SPORTO_RFSDIV Регистр делителя кадровых им- пульсов SPORTO 0x3FF4 SPORTO-SCLKDIV Регистр делителя тактовых им- пульсов SPORTO 0x3FF5 SPORTO_Control_Reg Регистр управления SPORTO 0X3FF6 SPORTCLTX-ChannelsO Регистр младшего слова пере- датчика SPORTO 0x3FF7 SPORTO_TX_Channels1 Регистр старшего слова передат- чика SPORTO 0X3FF8 SPORTO_RX_ChannelsO Регистр младшего слова прием- ника SPORTO 0x3FF9 SPORTO_RX_Channels1 Регистр старшего слова приемни- ка SPORTO 0X3FFA TSCALE Регистр масштабирования тай- мера 0X3FFB TCOUNT Регистр счетчика таймера 0x3FFC TPERIOD Регистр периода таймера 0X3FFD DM_Wait_Reg Регистр тактов ожидания памяти данных 0x3FFE System_Control_Reg Регистр управления системой 0x3FFF Как видно из содержимого данного файла, в каждой его строке производится директивное назначение определенному символьно- му имени конкретного числового значения. Символьные имена мо- гут быть произвольными, важно только, чтобы они одинаково запи- сывались в данном файле и в самой программе. В дальнейшем мы часто будем использовать символьное описание регистров, для обращения к ним по записи или чтению из программы. В частности, в нашей программе mem_clr.dsp содержатся строки команд для об- 60
Гпава 6. Первая программа ращения к регистру конфигурирования PFTYPE и регистру данных PFDATA программируемых флагов PF процессора. Файл def2181.h должен находиться в том же каталоге, в котором будет храниться файл программы во время ее трансляции. Иначе компилятор вы- даст сообщение об ошибке во время компиляции программы. Далее, в файле программы начинается запись команд. Посколь- ку с нулевого адреса памяти программ должны быть записаны век- торы прерываний или их обработчики, первой располагается ко- манда перехода jump BEGIN на начало программы, а затем коман- ды возврата из прерывания rti для каждого из прерываний процес- сора. Все команды должны заканчиваться точкой с запятой, в соот- ветствии с требованиями синтаксиса ассемблера. Заметьте, что в одной строке присутствует сразу несколько команд. Такая запись допускается компилятором ассемблера. Так как для каждого векто- ра прерывания в памяти программ отведено по четыре 24-раз- рядных ячейки памяти, а каждая команда процессора занимает од- ну 24-разрядную ячейку памяти, то оставшиеся неиспользованные ячейки памяти заполняются пустыми командами пор. Сразу же по- сле метки BEGIN записаны команды инициализации конфигураци- онного регистра флагов PFTYPE с помощью рабочего регистра ахО блока ALU процессора. Непосредственная запись константы в па- мять данных не поддерживается процессором. Ниже располагают- ся строки комментариев с пояснением назначения каждого бита регистра флагов PFTYPE. Подобные записи позволяют хорошо до- кументировать программу и облегчают тем самым ее отладку и по- следующее сопровождение. Аналогично описанным выше записям, в программе присутствуют строки команд записи в регистр данных PFDATA программируемых флагов слова управления светодиодом. Далее следуют команды инициализации некоторых регистров сиг- нального процессора. В частности, команда Ю = Abuf_dm; произво- дит инициализацию индексного регистра, входящего в блок DAG сигнального процессора, т.е. присваивает индексному регистру I0 значение адреса начала буфера buf_dm, располагающегося в па- мяти данных процессора. Аналогично происходит инициализация других регистров этого блока и инициализация регистра аг блока ALU. Я намеренно указал на принадлежность регистров блокам процессора, для того чтобы показать связь между архитектурой процессора и выполняемой программой и тем самым облегчить понимание того, что происходит в самом процессоре при выполне- нии перечисленных команд программы. Далее в программе органи- зуется циклическое заполнение памяти данных процессора значе- 61
Часть II. Программирование нием регистра аг. После чего организуется цикл, состоящий из ко- манд инвертирования выходного флага FL2 процессора и запол- нения нулевой ячейки памяти регулярно увеличивающимся зна- чением из регистра аг. Кроме того, в данном цикле организовано чтение состояния входов PF0-PF3 процессора и запись этих зна- чений в ячейку памяти данных по адресу 1. Это сделано для того, чтобы при работе программы можно было увидеть с помощью ос- циллографа генерацию сигнала на выводе FL2, а также следить за изменением значений ячеек памяти с помощью симулятора или других аппаратно-программных средств, убеждаясь тем самым в правильной работе программы и нормальном функционировании процессора. Завершает программу директива окончания модуля программы endmod. В общем случае структура файла должна быть следующей: /* Строки комментариев, описывающие */ /* название и назначение программы */ .Директива начала и названия модуля программы .Директива 1 .Директива 2 .Директива N Метка!: Команда! и операторы; /*Комментарии*/ Метка2: Команда2 и операторы; /*Комментарии*/ МеткаЫ: Командам и операторы; /комментарии*/ .Директива окончания программы Естественно, что комментарии, некоторые директивы, метки и команды с операторами могут отсутствовать в программе. Здесь приведен лишь общий пример записи программ. Директивы и команды заранее определены языком программи- рования и не допускают произвольных записей. Метка может со- стоять из произвольного набора букв, символа подчеркивания и цифр без пробелов, начинающихся с буквы, длиной не более 32 символов, и должна заканчиваться двоеточием. Команды могут записываться в верхнем или нижнем регистре. Компилятор по умолчанию не распознает регистр записей программы, т.е. являет- ся контекстно-независимым, и допускает запись комментариев, ди- ректив, меток и команд с операторами в любом регистре. Это необ- ходимо учитывать при задании имен меткам. Так, например, метка МЕТ1: и met1: будут восприниматься компилятором как одна и та же, что приведет к сообщению об ошибке. Для того чтобы компиля- тор различал регистр букв, необходимо включить в строку его за- 62
Гпава 6. Первая программа пуска ключ -с. Комментарии могут содержать любые наборы про- извольных символов в одной или нескольких строчках, заключен- ных между открывающейся { и закрывающейся фигурной скобкой } или между символами /* и */. Позже мы рассмотрим более подробно все разрешенные дирек- тивы и систему команд процессора. Но вначале доведем процедуру программирования процессора на примере нашей программы до конца. Надеюсь, это поможет пробудить живой интерес к изучению и позволит быстрее освоить на практике программирование сиг- нального процессора. Итак, после создания файла с программой нам необходимо выполнить его трансляцию, для получения ма- шинных кодов и загрузить в симулятор для отладки. После отладки программы ее можно будет загрузить в память процессора для вы- полнения. Для трансляции программы с целью получения машинного за- грузочного кода для процессора нам потребуются программные средства разработки. Семейство процессоров ADSP сопровожда- ется полным набором программного обеспечения (трансляторы и эмуляторы) и аппаратных отладочных средств (отладочные ком- плекты и внутрисхемные эмуляторы), предоставляемые фирмой Analog Device для разработки программ и облегчения процесса ос- воения программирования на практике. На сегодняшний день существует два программных пакета кросс средств для разработки и отладки программ для сигнального про- цессора ADSP-2181. С появлением новых процессоров продолжа- ют добавляться дополнительные инструментарии разработки про- грамм. Первый из этих пакетов входит в поставку отладочного ком- плекта EZ-KIT Lite и работает под управлением операционной сис- темы DOS, или в режиме эмуляции DOS под Windows. Второй пакет Visual DSP, более позднего происхождения, распространяется са- мостоятельно и работает под управлением операционной системы Windows. Все кросс средства доступны на сайте компании Analog Device по адресу www.analog.com. Каким из этих пакетов пользо- ваться, обычно решает сам пользователь. Каждый из пакетов име- ет свои преимущества и недостатки. Поэтому познакомим читате- лей с обоими пакетами поочередно, а они сами сделают свой вы- бор. Вначале рассмотрим пакет кросс средств для работы под DOS. Данные средства разработки для сигнальных процессоров ADSP-2181 включают в себя: System Builder (системный конфигуратор (построитель) про- граммы). Это программный инструмент для описания особенностей 63
Часть II. Программирование оборудования. Он определяет структуру аппаратной системы, по- зволяя разработчику указать количество доступной памяти, место- положение программной памяти и памяти данных и любого ото- браженного в память порта ввода-вывода для аппаратного окруже- ния. Данный построитель использует высокоуровневые конструк- ции, записываемые программистом в файле с расширением sys. После обработки данного файла построитель формирует файл ар- хитектуры с расширением ach. Файл архитектуры используется в дальнейшем компоновщиком, симулятором и эмулятором. Допуска- ется не выполнять процедуру системного конфигурирования при использовании готового файла архитектуры для конкретного про- цессора. • С compiler (компилятор языка Си). Осуществляет проверку и преобразование текстов программы, написанных на языке Си фор- мата ANSI, в тексты программ на языке ассемблер семейства ADSP-21XX. Кроме того, он поддерживает встроенный ассемблер- ный код. Данный компилятор необходим только для трансляции программ, написанных на языке Си. При создании программ на языке ассемблера компилятор Си не используется. • Assembler (ассемблер-компилятор). Преобразует тексты про- грамм, написанных на языке ассемблера, в объектный (машинный) код процессора. Он поддерживает высокоуровневый синтаксис на- бора команд и осуществляет полную проверку синтаксиса програм- мы. Кроме того, компилятор поддерживает гибкую структуру макро- сов и включение дополнительных файлов с помощью директивы include с помощью программы препроцессора. Как правило, компи- лятор состоит из нескольких программных утилит. • Linker (компоновщик). Объединяет отдельно ассемблирован- ные модули программы (отдельные файлы с текстами программ) в единый связанный машинный код. При необходимости, на этапе компоновки программы используется программа библиотекаря, для создания законченных программных библиотек, включаемых впо- следствии в основную программу. • Simulators (симулятор). Позволяет отлаживать программы пу- тем имитации работы сигнального процессора в памяти персональ- ного компьютера. Интерактивный пользовательский интерфейс си- мулятора поддерживает полное символическое ассемблирование и дизассемблирование эмулируемых команд. Симулятор полностью эмулирует конфигурацию аппаратного обеспечения, описанную с помощью файла архитектуры. Он обеспечивает покомандное вы- полнение ассемблерного кода ADSP-2181 и позволяет отображать 64
Гпава 6. Первая программа на экране монитора внутренние регистры и память процессора. • Splitter («сплиттер» - распределитель). Эта программа-утилита по выходным данным компоновщика формирует файл для прошив- ки ПЗУ, из которой автоматически может производиться загрузка программы в память процессора через порт BDMA. Из описания кросс средств, изложенного выше, становится по- нятно, что при трансляции программ, написанных на языке ассемб- лера, можно исключить операции системного конфигуратора про- граммы и компилятора языка Си. Полный пакет кросс средств можно приобрести вместе с отла- дочным комплектом EZ-Kit Lite у представителей фирмы Analog De- vice. Облегченную версию кросс средств, для сигнального процес- сора ADSP-2181 под управлением операционной системы DOS, можно скачать с сайта www.xxivek.narod.ru. В качестве отладочного средства при этом можно использовать тестовую плату, описанную в гл. 3. Установка полного пакета на компьютер не вызывает сложно- стей. Его необходимо инсталлировать на диск С в корневой каталог ADLDSP. Облегченная версия кросс средств с сайта www.xxivek.narod.ru просто распаковывается и копируется в каталог C:\ADI_DSP. После этого необходимо создать рабочий каталог для ваших будущих рабочих программ на любом диске. Для каждого нового проекта лучше всего создавать отдельный каталог или под- каталог, это позволит упорядочить все проекты. После установки средств разработки, в каталоге ADLDSP долж- ны находиться подкаталоги с файлами транслятора, библиотеками и другими служебными файлами. Основные исполняемые файлы располагаются после инсталляции пакета в каталоге C:\ADI_DSP\21XX\BIN\. Перечень исполняемых файлов и их назна- чение приведены в табл. 6.2. Таблица 6.2 Назначение исполняемых файлов Имя файла Назначение bld21 .ехе Системный конфигуратор (построитель) программы сс1 .ехе, g21.exe Компиляторы языка Си asm21 .ехе Компилятор ассемблера asmpp.exe Ассемблер препроцессор 65
Часть II. Программирование Имя файла Назначение asm2.exe Ассемблер Id21 .ехе Компоновщик (редактор связей) Iib21.exe Библиотекарь (программа для работы с библиотеками программ) spl21.exe Разделитель программ для программирования ПЗУ (сплиттер) sim2181.exe Симулятор программ для процессора ADSP-2181 hexbin2.exe Преобразователь HEX кода в двоичный формат При инсталляции пакета кросс средств, в файле автозагрузки автоматически создаются служебные строки, определяющие пути к каталогам пакета и некоторые переменные среды окружения опе- рационной системы. Подобные записи создают многие инсталля- ционные пакеты. В результате чего может произойти переполнение служебной области памяти компьютера, и некоторые программы не будут работать. Для того чтобы избежать подобных неприятностей, можно вос- пользоваться другим способом. Независимо от того, были ли произ- ведены записи в файл автозагрузки или нет, можно включить все не- обходимые служебные строки в собственный командный файл, с по- мощью которого в дальнейшем выполнять автоматическую трансля- цию программ. Дело в том, что при выполнении командного файла операционная система автоматически запускает новый сеанс про- граммы command.com, в котором можно определить новые пути по- иска файлов и переменные среды с помощью соответствующих ко- манд. На практике это делается следующим образом. Создается командный файл, в начале которого записываются строки определения пути поиска файлов и установки переменных среды, а далее записываются строки команд для автоматизации необходимого процесса трансляции. После запуска такого команд- ного файла, с именем файла транслируемой программы в качестве параметра, произойдет полная трансляция файла программы, с получением всех необходимых файлов для загрузки в процессор. Ниже приведен текст такого командного файла, специально соз- данного мною для облегчения и ускорения трансляции программ для сигнального процессора ADSP-2181. Данный командный файл позволяет выполнять трансляцию файлов программ, начиная с компилятора, минуя операции построителя системы System Builder и трансляции программы с языка Си. 66
Гпава 6. Первая программа @echo off set path=c:\adi_dsp\2lXX\bin set adi_dsp=c:\adi_dsp if %1 == goto no_file echo Компиляция... asm21 %1 -2181 -1 if not exist %l.obj goto error echo ...завершена успешно pause echo Компоновка... Id21 %1 -a adsp2181 -e %1 -x -g if not exist %l.lda goto nextl del %l.lda :nextl ren %l.exe %l.lda if not exist %l.lda goto error2 echo ...завершена успешно pause echo Сплиттинг... rem для загрузки через BDMA spl21 %l.lda %1 -loader -2181 > %l.msg echo ...завершен успешно pause echo Преобразование в бинарный файл... hexbin2 %l.bnm %l.bin m 0 > %l.msg echo ...завершено успешно pause goto end :error echo Ошибка компиляции! pause goto end :error2 echo He найден файл %l.lda ! pause goto end :no_file echo Используйте: asmdsp.bat имя файла без расширения pause : end Введите текст этого файла с помощью любого текстового редак- тора с кодировкой DOS в компьютер и сохраните в файле с именем asmdsp.bat или скопируйте с компакт-диска, прилагаемого к книге. Он позволит автоматизировать процесс трансляции файлов с про- граммами для сигнального процессора. Если просмотреть строки этого командного файла, то нетрудно понять что он делает. В пер- вой строке командного файла находится команда запрета отобра- 67
Часть II. Программирование жения командных строк на экран. Далее следуют две строки для установки пути к рабочему каталогу с файлами трансляции и пере- менной adi_dsp. Затем проверяется, было ли введено имя файла в командной строке при запуске данного файла. Если имени задано не было, производится переход на метку с названием no file, после которой на экран отобразится подсказка о правильном использова- нии командного файла. Команда pause выводит строку «Нажмите любую клавишу...» и ожидает соответствующее действие от поль- зователя. Если имя файла для трансляции было задано в строке при запуске командного файла, то переход на метку не производит- ся и начинается процесс компиляции файла с программой. Все процессы трансляции предваряются соответствующим сообщени- ем. Компиляция выполняется командой asm21 %1 -2181 -I. Здесь после вызова программы компилятора asm21.exe с именем файла из командной строки %1 используется ключ -2181 для задания типа процессора и ключ -I для генерации листинга программы. Список всех ключей для конфигуратора bld21 .ехе, компилятора asm21 .ехе, компоновщика Id21.exe, распределителя spl2.exe и симулятора sim2181.exe можно получить, запустив отдельно соответствующую программу без параметров или с ключом -help. Переведенный текст этих сообщений приведен в табл. 6.3. Таблица 6.3 Формат записи программ и назначение ключей bld21.exe [-ключ] имя_файла -с Установить чувствительность к регистру символов -help Вывести на экран справку о программе asm21.exe [-ключ_1] [-ключ_2] ...[-ключ_М] имя_файла -Dvar[=exp] Определить идентификатор для Си препроцессора, например -dten=1O -с Установить чувствительность к регистру символов “СР Включить Си препроцессор —I Создать файл листинга программы -i [глубина] Раскрыть содержимое включенных файлов в листинге с указанной глубиной -т [глубина] Раскрыть макросы в файле листинга с указанной глу- биной 68
Гпава 6. Первая программа Продолжение таблицы 6.3 -р Использовать только препроцессор -S Отменить семантическую проверку много функцио- нальных инструкций -о имя_файла Переименовать выходной файл -2181 Поддержать специальные ассемблерные инструкции для процессора ADSP-2181 -help Вывести на экран справку о программе Id21.exe имя_файла1 [имя_файла2]...[имя_файлаЫ] [-ключ_1] [-ключ_2] ...[-ключ_Ы] -i имя_файла Указать командный списочный файл -е имя Присвоить выходным файлам новое имя (по умолча- нию 210x.exe) -а имя_файла Указать файл описания архитектуры -user имя_файла Поиск библиотечного файла, созданного утилитой построителя библиотеки Iib21.exe —s размер Задать размер динамической памяти -dir путь Указать пути каталога для поиска файлов библиотек -lib Компоновать программу с библиотекой Си -g Создать файл таблицы символов *.sym -pmstack Переместить стек в память программ (РМ) -rom Использовать ПЗУ версии библиотечных программ Си -с Создать стек для компилированных Си программ (DM) -dryrun Быстрый запуск для теста на ошибки без создания файла загрузки -x Создать файл распределения памяти *.тар -P Поместить копию библиотечной подпрограммы на загрузочных страницах -group file Использовать файл групповых модулей -help Вывести на экран справку о программе spl21.exe входной_файл выходной_файл [-ключ_1] [-ключ_2] ... [-ключ_М] -dm Распределить только память данных DM 69
Часть II. Программирование Продолжение таблицы 6.3 -pm Распределить только память программ РМ -bm Распределить только память загрузки ВМ -bs# Установить размер загрузочной памяти (2048, 1024, 512 или 256 байт) -bb# Установить размер границы загрузки (2048 или 1024 байт) —u Формат выходного файла Motorola S (по умолчанию) -i Формат выходного файла Intel Hex -us Формат Motorola S1, байтовый (только с ключами -pm или -dm) -us2 Формат Motorola S2, байтовый (только с ключами -pm или -dm) -ui Формат Intel Hex, байтовый (только с ключами -pm или -dm) - loader Создать загрузочный файл -bp # Большие загрузочные страницы, где # как HEX адрес —bi # Большие загрузочные страницы, где # как HEX величи- на -flag Большие загрузочные страницы с использованием выходных флагов -Id Использовать специальный загрузчик -2181 Создать код для процессора ADSP-2181 sim2181 [-а имя |_файла] [-с] [-е имя_файла] [-h] [-к имя_файла] [-v] [-w имя_файла] -а имя_файла Считывать при запуске файл архитектуры -c Установить чувствительность к регистру символов -e имя_файла Загрузить при запуске входной файл с расширением exe (Ida) -h Вывести на экран справку о программе -к имя_файла Загрузить и выполнить файл командных строк -о имя_файла Генерировать файл с сообщениями об ошибках -v Избыточность -w имя_файла Запустить симулятор с загрузкой ранее созданного файла конфигурации окон с расширением win 70
Гпава 6. Первая программа После компиляции программы будет создан файл с именем про- граммы и расширением obj. Однако если на этапе компиляции бу- дут обнаружены ошибки, этого не произойдет и с помощью команды if not exist %1.obj goto error будет осуществлен переход на метку error, для выдачи соответствующего сообщения. При успешной компиляции трансляция программы продолжится. Компоновка программы выполняется с помощью командной строки: Id21 %1 -a adsp2181 -е %1 -х -д. Здесь после команды вызо- ва компоновщика Id21.exe с именем файла из строки запуска ко- мандного файла %1, следует несколько ключей с параметрами. Ключ -a adsp2181 указывает имя файла архитектуры процессора adsp2181.ach. Данный файл создан с помощью построителя про- грамм System Builder и входит в поставку пакета кросс средств. Он состоит из пяти следующих строк: $2181 $ADSP2181 $0000 3FFF paxINT_PM_USER t $0000 3FDF dadINT_DM_USER t $ Этот файл содержит данные, определяющие тип процессора и структуру его памяти, и всегда должен находиться в том же катало- ге, где находится файл транслируемой программы. Ключ -е %1 назначает имя выходного файла. Ключи -х и -д предназначены для генерации файла карты памяти *.тар и файла с таблицей сим- вольных имен *.sym соответственно. Эти файлы можно использо- вать в дальнейшем для анализа распределения памяти процессо- ра. Файл с расширением sym необходим, кроме того, для отладки программы с помощью симулятора sim2181.exe. В результате ком- поновки будет получен файл с именем программы и расширением ехе. Этот файл уже можно использовать для загрузки в симулятор или непосредственно в процессор, например через интерфейс IDMA. Формат данного файла приведен в табл. 6.4. Таблица 6.4 Формат загрузочного файла Символ Описание назначения <—<— i Признак начала загрузочного файла @РА Признак блока памяти программ РМ 0000 Адрес загрузки кодов в память РМ 71
Часть II. Программирование Символ Описание назначения 123456 Первый код команды 789аЬс Второй код команды def012 Третий код команды ... ит.д. #123ХХХХХХХХ Признак конца блока команд с контрольной суммой @DA Признак блока памяти данных DM 0000 Адрес загрузки данных в память DM 1234 Первое слово данных 5679 Второе слово данных ... и т.д. #123ХХХХХХХХ Признак конца блока данных с контрольной сум- мой <-<-о Признак конца загрузочного файла X - контрольная сумма адреса и данных. Позже мы подробно рассмотрим способ его загрузки в процес- сор через интерфейс IDMA. Несмотря на то, что этот файл имеет расширение ехе, он не имеет ничего общего с исполняемыми фай- лами для персональных компьютеров. Тем не менее, случайный его запуск на компьютере может привести к непредсказуемым ре- зультатам. Непонятно, чем руководствовалась фирма Analog Device, давая такое расширение этому файлу при разработке кросс средств. Для устранения таких неприятных моментов в командный файл включены следующие четыре строчки: if not exist %l.lda goto nextl del %l.lda :nextl en %l.exe %l.lda Эти строки предназначены для переименования нежелательного расширения загрузочного файла с расширением ехе в файл с ней- тральным расширением Ida. Это делается в последней командной строке. Первые три строки предназначены для проверки наличия файла с расширением Ida от предыдущей трансляции и его удале- ния, в случае обнаружения, для генерации нового файла. При успешной генерации загрузочного файла будет выведено соответствующее сообщение и осуществлен переход к группе ко- 72
Гпава 6. Первая программа манд для формирования файла прошивки для ПЗУ, из которого может производиться автоматическая загрузка процессора через интерфейс BDMA. Данный процесс называется «сплиттингом» (распределением) и осуществляется командой: spl21 %1 .Ida %1 - loader -2181 > %1 .msg. Здесь после команды вызова сплиттера sp21.exe с именем фай- ла из командной строки с расширением Ida, следует несколько клю- чей и команда перенаправления вывода сообщений, с помощью символа >, в файл с расширением msg. Ключ -loader предназначен для добавления в выходной файл кода загрузчика, а ключ -2181 позволяет формировать код загрузки для процессора ADSP-2181. О коде загрузки я расскажу чуть позже. В результате работы сплиттера будет создан файл прошивки для ПЗУ, с расширением bnm HEX формата Motorola. На практике, для программирования микросхем памяти чаще пользуются бинар- ным форматом файлов. Поэтому в командном файле добавлено еще несколько строк, осуществляющих преобразование файла bnm в бинарный файл с расширением bin. Для этого используется рас- пространенная программа hexbin2.exe. Эту программу также можно найти на компакт-диске. Теперь, когда мы познакомились со всеми процедурами транс- ляции, выполняемыми с помощью командного файла asmdsp.bat, можно начать транслировать нашу программу. Не забудьте, что вместе с программой в каталоге проекта должен находиться файл описания def2181 .h, файл архитектуры adsp2181.ach и созданный и описанный выше командный файл asmdsp.bat. Выполните трансляцию программы mem_clr.dsp с помощью ко- мандной строки asmdsp.bat mem_clr. Обратите внимание на то, что в качестве параметра для командного файла используется имя на- шей программы без расширения. Оно будет автоматически под- ставляться вместо символов %1 командного файла. В результате работы командного файла на экране должны последовательно появиться сообщения: Компиляция... ...завершена успешно Нажмите любую клавишу . . . Компоновка... ...завершена успешно Нажмите любую клавишу . . . Сплиттинг... ...завершен успешно 73
Часть II. Программирование Нажмите любую клавишу . . . Преобразование в бинарный файл... ...завершено успешно Нажмите любую клавишу . . . По завершении работы командного файла в каталоге с про- граммой должны появиться файлы с именем программы и расши- рениями int, 1st, obj, Ida, map, sym, msg, cde, bnl, bnm, bnu и bin. Описание назначения данных файлов проекта в краткой форме приведено в табл. 6.5. Итак, с помощью приведенного выше командного файла мы полу- чили необходимые нам файлы с расширениями Ida и bin для непо- средственной загрузки в память процессора и для прошивки ПЗУ со- ответственно. Файл с расширением sym понадобится нам для отлад- ки программы с помощью программы симулятора sim2181.exe. Таблица 6.5 Описание расширений файлов проекта Расшире- ние Описание bat Командный файл sys Исходный файл системной архитектуры ach Файл описания архитектуры dsp Файл ассемблерного модуля (текст программы) 1st Файл листинга int Файл инициализации obj Объектный файл cde Файл кода dat Файл инициализации данных кода exe (Ida) Файл загрузки образа памяти map Файл распределения памяти sym Файл символов bnu Выходной файл разделителя программ. Содержит стар- шие байты bnm Выходной файл разделителя программ. Содержит сред- ние байты 74
Гпава 6. Первая программа Расшире- ние Описание bnl Выходной файл разделителя программ. Содержит млад- шие байты bin Файл для программирования ПЗУ в двоичном формате msg Файл сообщений Остальные перечисленные выше файлы в каталоге с програм- мой являются вспомогательными, которые после их просмотра и изучения можно смело удалить для очистки каталога. Например, файл с расширением 1st содержит листинг программы с нумераци- ей всех строк программы и машинными кодами процессора, соот- ветствующими ассемблерным командам программы. С его помо- щью можно увидеть соответствие ассемблерных команд машинным кодам сигнального процессора. Для автоматического удаления этих файлов я рекомендую соз- дать и использовать еще один командный файл asmclr.bat, со- стоящий из строк: del del del del del del del del del del * .map * . 1st * . hex * .msg * . cde * . int * • obj * . bnl * . bnm * . bnu Создав и запустив такой файл в каталоге с программой, все не- нужные файлы будут удалены автоматически, и в каталоге останут- ся только необходимые для дальнейшей работы файлы. Теперь можно приступить к отладке программы. Проследить за ходом выполнения программы и изменением состояния внутренних регистров и ячеек памяти процессора нам поможет программа симу- лятора sim2181.exe, входящая в состав средств разработки про- грамм. Данная программа работает только в операционной системе DOS и даже не допускает работу в режиме эмуляции DOS из Windows. Поэтому для запуска данного симулятора необходимо перегрузить компьютер в режим работы DOS, после чего необходимо запустить 75
Часть II. Программирование программу симулятора в командной строке sim2181.exe. После за- грузки программы на экране монитора должно появиться окно с изо- бражением названия и версии программы (рис. 6.1). Analog Devices ADSP-2181 Simulator Release 5.1 tiers ion 1.40 Copyright <c> 1995 Analog Devices. Inc. Рис. 6.1. Окно с изображением названия и версии программы Несколько секунд спустя должно появиться окно с главным меню и приглашением к вводу команд в центре экрана (рис. 6.2). Главное меню программы состоит из десяти раскрывающихся за- кладок команд. Симулятор имеет встроенную справочную систему по всем командам меню, вызываемую с помощью клавиши F1 клавиату- ры. Назначение клавиш управления симулятора приведено в табл. 6.6. File Register Memory Stacks Command Execution Display Misc Help Quit -------Command Window <Hex> > 11:12:20 Рис. 6.2. Окно с главным меню Таблица 6.6. Назначение клавиш управления симулятора Клавиша или комбинация Описание выполняемой функции Функции выполнения программы F4 Запустить программу на выполнение F10 Выполнять программу по шагам 76
Гпава 6. Первая программа Клавиша или комбинация Описание выполняемой функции Shift+F10 Выполнять N шагов программы F9 Установить/сбросить точку останова программы Shift+F9 Установить/сбросить специальную точку останова программы Функции памяти Ctrl+D Дамп памяти Ctrl+F Заполнить память Ctrl+G Перейти по адресу памяти Ctrl+M Загрузить память Функции размера окна Shift+F5 Увеличить окно по вертикали Shift+F6 Уменьшить окно по вертикали Shift+F7 Увеличить окно по горизонтали Shift+F8 Уменьшить окно по горизонтали Функции перемещения окна F5 Переместить окно вверх F6 Переместить окно вниз F7 Переместить окно влево F8 Переместить окно вправо Функции выбора окна ESC Закрыть текущее окно F2 Выбрать следующее окно F3 Выбрать окно главного меню Ctrl+L Показать список активных окон Функции отображения окна F1 Вызов окна помощи Ctrl+T Переключение формата отображения окна Для перехода в главное меню и загрузки программы нажмите последовательно клавиши Esc и F3 на клавиатуре. С помощью стрелок курсора выделите закладку File главного меню и раскройте ее, нажав клавишу Enter. В раскрывшемся списке команд выберите команду Load Executable File (загрузить исполняемый файл), а в открывшемся окне ввода введите имя файла mem_clr.lda и завер- шите ввод, нажав клавишу Enter. 77
Часть II. Программирование Откройте в пунктах главного меню Memory и Register окна памя- ти программ Program Memory, памяти данных Data Memory, флагов Flags, регистров генератора адреса DAG Registers и регистров арифметико-логического устройства Computational Alternate Regis- ters. После чего разместите эти окна на экране с помощью клавиш управления окнами симулятора в соответствии с рис. 6.3, используя клавиши управления, описанные в табл. 6.6. Данные окна позволят наблюдать за ходом выполнения про- граммы и состоянием памяти и регистров процессора. Теперь мож- но выполнять программу по шагам, нажимая клавишу F10 на кла- виатуре, или запустить автоматическое выполнение программы с помощью клавиши F4. Останов программы производится повторным нажатием клави- ши F4. Во время выполнения программы в окне памяти программ Program Memory можно наблюдать процесс выполнения ассемб- лерных команд, а в окнах регистров и памяти данных изменение значений регистров и ячеек памяти. Для сохранения конфигурации окон и использования этой конфигу- рации при повторных запусках симулятора можно сохранить ее в фай- ле с помощью команды Save Window File из закладки File главного ме- ню. При сохранении конфигурации необходимо будет задать имя фай- ла, например mem_clr. После сохранения конфигурации и выхода из симулятора в каталоге будет находиться файл с именем mem_clr.win. Для выхода из симулятора необходимо выбрать команду Exit или Quit File Register Memory Stacks Command Execution Display Misc Help Quit Program Memory (Disassembled/!) >[OOOO] jump BEGIN [0001I nop [0002 I nop [00031 nop [00041 rti [00051 nop [00061 nop [00071 nop [00081 rti [00091 nop --------- Flags ---------- FI: 0 FO: u FLO: 1 FL1: 1 FL2: 1 ---- Data Memory (Hex) -----[0001] uuuu -----[00021 uuuu -----[00031 uuuu -----[00041 uuuu -----[00051 uuuu I — DAG Registers (Hexadecimal) - 10: uuuu MO: uuuu L0: uuuu II: uuuu 12: uuuu 13: uuuu 14: uuuu 15: uuuu 16: uuuu 17: uuuu Ml: uuuu М2: uuuu М3: uuuu M4: uuuu M5: uuuu M6: uuuu M7: uuuu LI: uuuu L2: uuuu L3: uuuu L4: uuuu L5: uuuu L6: uuuu L7: uuuu Computational Alternate Registers < fiXQ: uuuu AY0: uuuu MX0: uuuu MYO: uuuu MR2: uu SRI: uuuu SI: uuuu ___lue AX1: uuuu AY1: uuuu MX1: uuuu MY1: uuuu MR1: uuuu SRO: uuuu SE: uu AR: uuuu AF: uuuu MF: uuuu MRO: uuuu SB: uu -11:32:56 Рис. 6.3. Экран управления окнами симулятора 78
Гпава 6. Первая программа из закладки Quit главного меню и в открывшемся окне подтверждения выхода нажать поочередно клавишу пробела Space, а затем клавишу Enter. При новом запуске симулятора, вместо повторного открытия окон, достаточно будет загрузить файл с помощью команды Load Win- dow File из закладки File главного меню симулятора. Рекомендую читателям самостоятельно познакомиться поближе с симулятором на практике и поэкспериментировать с открытием различных окон симулятора для изучения внутренних регистров процессора, а также опробовать множество команд, предоставляе- мым симулятором для отладки программ. 79
Глава 7. Порт BDMA В этой главе описывается порт байтового прямого доступа к памяти процессора, под названием BDMA (Byte Data Memory Access). Теперь можно приступить к загрузке транслированной и отла- женной программы непосредственно в сигнальный процессор. Для выполнения данной процедуры и практического освоения сигналь- ного процессора с отладкой программ аппаратно можно воспользо- ваться тестовой платой, описанной в гл. 3. Запрограммируйте флэш ПЗУ типа Am29F040 содержимым файла mem_clr.bin с помощью любого подходящего для этих целей программатора и вставьте запрограммированную микросхему в па- нельку на место микросхемы D7 тестовой платы. После подачи на- пряжения питания на тестовую плату произойдет автоматическая загрузка программы из ПЗУ через порт BDMA в память сигнального процессора, и ее выполнение. Убедиться в том, что программа ра- ботает, можно будет с помощью осциллографа, подключенного к выводу FL2 процессора. На этом выводе должен формироваться сигнал в виде меандра с частотой около 2МГц, а светодиод HL2 должен при этом светиться. Рассмотрим подробнее механизм автоматической загрузки сиг- нального процессора из ПЗУ, для лучшего понимания происходящих при этом процессов. При подаче питания на тестовую плату, описан- ную в гл. 3, цепь сброса R1, СР1 формирует сигнал -RKEY, который устанавливает триггер, построенный на элементах D6.1 и D6.2, в со- стояние, при котором сигнал BMODE будет находиться в состоянии логического нуля. Сигнальный процессор анализирует состояние дан- ного сигнала и сигнала на входе вывода ММАР после сброса и распо- знает, что загрузка программы в программную память процессора бу- дет производиться из ПЗУ через интерфейс BDMA. При этом процес- сор автоматически заносит в регистры порта BDMA определенные значения, описанные в предыдущей главе, для того чтобы произвелась автоматическая загрузка 32 слов программы-загрузчика разрядностью 24 бита побайтно в программную память процессора и затем ей было передано управление для загрузки остальной части программы. 80
Гпава 7. Порт BDMA Как было сказано выше, программа-загрузчик автоматически записывается в начало файла прошивки ПЗУ с помощью сплиттера во время трансляции программы. После автоматической загрузки из ПЗУ в память программ процессора 32 слов программы- загрузчика через интерфейс BDMA происходит перезапуск процес- сора и начинает выполняться программа загрузчика, которая осу- ществляет полную загрузку основной рабочей программы из ПЗУ в процессор. После чего вновь происходит перезапуск процессора, и начи- нает выполняться основная загруженная программа. При загрузке основной программы загрузчик полностью замещается в программ- ной памяти процессора самой программой. Такой непростой меха- низм загрузки реализован разработчиками процессора с целью обеспечения гибкости при загрузке процессора, и для обеспечения возможности разработчикам программного обеспечения создавать собственные загрузчики программ. Машинные коды загрузчика можно увидеть в первых байтах файла mem_clr.bin с помощью лю- бого редактора шестнадцатеричных файлов или простой програм- мы просмотра файлов. В файле mem_clr.bin и в ПЗУ все коды 24-разрядных слов ко- манд процессора располагаются в строгом порядке. Первым рас- полагается в ПЗУ старший байт команды, затем следует средний байт и последним записывается младший байт команды. Формат хранения слов программы в ПЗУ приведен в табл. 7.1. Таблица 7.1 Формат хранения слов программы в ПЗУ Адрес памяти про- грамм Слово про- граммы Адрес памяти ПЗУ Байты про- граммы 0x00 ОхАВ 0x0000 OxABCDEF 0x01 OxCD 0x02 OxEF 0x03 0x12 0x0001 0x123456 0x04 0x34 0x05 0x56 ит. д. 81
Часть II. Программирование Способ загрузки процессора из ПЗУ хорошо применим для авто- номных процессорных устройств, работающих под управлением одной программы. Однако на практике довольно часто встречаются задачи, когда необходимо оперативно менять управляющую про- грамму для процессора какого-либо электронного устройства. Это также необходимо при отладке программ с многочисленными ите- рациями трансляции и загрузки отлаживаемой программы в про- цессор. Удачным решением для такого рода задач является загруз- ка программ в сигнальный процессор через интерфейсный порт процессора IDMA. Но прежде чем начать освоение данной проце- дуры, необходимо подробнее познакомиться с этим интерфейсом. С этого мы продолжим изучение сигнального процессора в сле- дующей главе. 82
Глава 8. Порт IDMA В этой главе описывается интерфейсный порт IDMA и спо- собы загрузки и отладки программ для сигнального процессора через этот порт. Помимо порта прямого доступа к байтовой памяти BDMA (Byte Data Memory Access), сигнальный процессор ADSP-2181 имеет порт прямо- го доступа к внутренней памяти процессора IDMA (Internal Data Memory Access). Он представляет собой 16-разрядный параллельный порт, через который можно читать и записывать данные памяти процессора. Порт IDMA имеет 16-разрядную мультиплексированную шину адре- са/данных IAD0-IAD15, 4 сигнала управления и 1 сигнал контроля. К сигналам управления относятся: сигнал выбора порта -IS, сигнал за- писи адреса ячейки памяти IAL, сигнал чтения -IRD и записи -IWR дан- ных через порт. Сигнал контроля -IACK позволяет определить готов- ность порта IDMA. При чтении и записи памяти через IDMA данные транслируются через буферный регистр порта IDMA. В памяти данных процессора по адресу 0x3FE0 находится регистр управления IDMA, который предназначен для хранения адреса ячейки памяти, к которой будет производиться обращение через порт IDMA. Формат этого реги- стра представлен в табл. 8.1. Таблица 8.1 Формат данных регистра управления IDMA Разряд Назначение 15 Не используется 14 Указатель типа памяти: 0=память программ (РМ) 1=память данных (DM) 13-0 Значение начального адреса памяти процессора при обмене через IDMA (от 0 до 0x3FFF) Порт IDMA имеет встроенную функцию автоинкремента (автома- тического увеличения на единицу адреса памяти), что позволяет ускорить выполнение блочных операций. Кроме того, порт IDMA позволяет выполнять загрузку памяти программ процессора с ав- 83
Часть II. Программирование тематическим запуском программы после заполнения нулевой ячейки памяти. Протокол обращения к памяти процессора через порт IDMA достаточно прост и показан на рис. 8.1. Вначале все сигналы управления портом переводятся в пассив- ное состояние и проверятся готовность IDMA, путем ожидания ус- тановки сигнала -IACK в логический ноль. Затем осуществляется вывод на шину IAD0-15 сигналов адреса памяти процессора, к кото- рой будет производиться обращение. После чего формируется строб сигнала записи адреса IAL в регистр управления порта IDMA. Вре- менная диаграмма данной операции показана на рис. 8.2, а в табл. 8.2 приведены временные параметры для этой диаграммы. Рис. 8.1. Алгоритм обращения к памяти процессора 84
Гпава 8. Порт IDMA Таблица 8.2 Временные параметры диаграммы защелкивания адреса IDMA Параметр Минимум Защелкивание адреса IDMA Требуемые длительности: Wp длительность защелкивания адреса, нс 1,2 10 tiAsu установка адреса перед окончанием защелкивания, нс 2 5 tiAH удержание адреса после защелкивания, нс 2 2 tiKA-IACK=O перед защелкиванием, нс 1 0 tiAis начало записи или чтения после защелкивания, нс 2’3 3 Примечания: 1 Начало защелкивания - IS=O и IА1_=1. 2 Конец защелкивания - IS=1 или IAL=O. 3 Начало записи или чтения - IS=O и (IWR=O или IRD=O). Как видно из таблицы, минимальные временные значения сигна- лов не превышают 10 нс, что говорит о поддержке высокой скорости операций портом IDMA. Далее производится операция чтения или записи памяти. При операции чтения данные считываются с шины IAD0-IAD15 во время активизации управляющего сигнала -IRD. При операции записи данные выставляются на шину IAD0-IAD15, и записываются в память процессора с помощью активизации сиг- нала -IWR. Порт IDMA поддерживает короткий (быстрый) и длинный (дол- гий) циклы обращения к памяти. Во время короткого цикла данные читаются и записываются без ожидания готовности порта по сигналу 85
Часть II. Программирование Рис. 8.3. Временные диаграммы короткого цикла чтения через порт IDMA -IACK, используя при этом буфер порта IDMA с данными. Временные диаграммы для данных циклов обращения показаны на рис. 8.3 и 8.4 соответственно. В табл. 8.3 и 8.4 приведены характеристики сигналов для этих диаграмм. Таблица 8.3 Временные параметры диаграммы короткого цикла чтения через порт IDMA Параметр Мини- мум Мак- симум Короткий цикл чтения через IDMA Требуемые длительности: tiKR -IACK=0 до начала чтения 1, нс 0 tiRP Продолжительность сигнала чтения, нс Характеристики переключения: tiKHR-IACK=O после начала чтения 1, нс 15 15 tiKDH Удержание данных после окончания чтения 2, нс tiKDD Сброс данных после окончания чтения 2, нс 0 10 tiRDE Активизация предыдущих данных, нс tiRDv Достоверность предыдущих данных 0 15 Примечания: 1 Начало чтения: -IS=0 и -IRD=0. 2 Конец чтения: -IS=1 или —IRD= 1. 86
Гпава 8. Порт IDMA Таблица 8.4 Временные параметры диаграммы короткого цикла записи через порт IDMA Параметр Мини- мум Макси- мум Короткий цикл записи через IDMA Требуемые длительности: tiKw -IACK=0 до начала записи 1, нс 0 tiwp Продолжительность записи 1*2, нс 15 tiDsu Установка данных до окончания записи 2, нс 5 tiDH Удержание данных после окончания записи 2, нс Характеристики переключения: tiKHw от начала записи до -1АСК=1, нс 2 15 Примечания: 1 Начало записи: -IS=0 и -IWR=0. 2 Конец записи: —IS=1 nnn-IWR=1. Во время длинного цикла данные читаются и записываются с ожиданием готовности порта по сигналу -IACK, который активизи- руется только после непосредственной записи или чтения данных в памяти процессора. 87
Часть II. Программирование Временные диаграммы для данных циклов обращения показаны на рис. 8.5 и 8.6 соответственно. В табл. 8.5 и 8.6 приведены харак- теристики сигналов для этих диаграмм. Таблица 8.5 Временные параметры диаграммы длинного цикла чтения через порт IDMA Параметр Минимум Мак- симум Длинный цикл чтения через IDMA Требуемые длительности: tiKR -1АСК=0 до начала чтения 1, нс tiRP Продолжительность сигнала чтения, нс Характеристики переключения: tiKHR-1АСК=0 после начала чтения 1, нс tiKDs Установка данных перед -1АСК=0, нс tiKDH Удержание данных после окончания чтения 2, нс tiKDD Сброс данных после окончания чтения 2, нс tiRDE Активизация предыдущих данных, нс 0 15 0,5 tCK5-10 0 0 15 10 88
Гпава 8. Порт IDMA Параметр Минимум Мак- симум tiRDv Достоверность предыдущих данных, нс tiRDHi Удержание предыдущих данных (DM/PM1), нс tiRDH2 Удержание предыдущих данных (РМ2), нс 2 tcK-5 tcK-5 15 Примечания: 1 Начало чтения: -IS=0 и -IRD=0. 2 Конец чтения:-IS=1 или-1РЮ=1. 3 Чтение памяти DM или первой половины РМ. 4 Чтение второй половины РМ. 5 tCK - период тактовой частоты процессора. Таблица 8.6 Временные параметры диаграммы длинного цикла записи через порт IDMA Параметр Минимум Максимум Длинный цикл записи через IDMA Требуемые длительности: tiKw -IACK=0 до начала записи 1, нс 0 89
Часть II. Программирование Параметр Минимум Максимум tiKsu Установка данных перед -1АСК=0, нс tiKH Удержание данных после -1АСК=0, нс Характеристики переключения: tiKLw От начала записи до -1АСК=0, нс tiKHw От начала записи до -1АСК=1, нс 0,5 tCKZ+1 2 1,5 tCK 15 Примечания: 1 Начало записи: -IS=0 и -IWR=0. 2 tex - период тактовой частоты процессора. Сигнал подтверждения данных -IACK допускается не использо- вать, если скорость обращения к порту со стороны адаптера невы- сокая и достоверность данных обеспечивается задержкой самих сигналов управления. При обращении через порт IDMA к памяти данных операции чтения и записи выполняются за один цикл, поскольку разрядность порта составляет 16 бит. Однако при обращении к 24-разрядным данным памяти программ требуется два цикла обращения. В пер- вом цикле происходит чтение или запись старших 16 бит слова па- мяти программ. Во втором цикле по линиям IAD0-IAD7 передаются младшие 8 бит слова. Линии IAD8-IAD15 при этом игнорируются. Автоинкремента адреса между этими циклами не происходит. Через порт IDMA возможен доступ ко всей памяти процессора, за исключением регистров управления и состояния, отображенных на область памяти данных. При обращении через IDMA к области памяти данных, отведенной для регистров управления и состояния с адреса 0x3FE0 по адрес 0x3FFF, запись и чтение данных все же будет производиться. Но эта область памяти фактически будет до- полнительной для пользователя, поскольку она дублирует систем- ную область памяти данных, отведенную для регистров управления и состояния процессора. Данную область допускается использовать для хранения произ- вольной служебной информации, но только при обращении к этой памяти через порт IDMA, поскольку другой возможности обращения к данной памяти у процессора не существует. Для обеспечения доступа через порт IDMA к регистрам управления и состояния про- цессора необходимо обеспечить пересылку содержимого этих ре- гистров в другую область памяти из самой программы процессора. Такая аппаратная конфигурация процессора обеспечивает защиту 90
Гпава 8. Порт ЮМА информации в регистрах управления и состояния от случайной за- писи и от программных ошибок. Процессор ADSP-2181 поддерживает также начальную загрузку программ в память программ через порт IDMA. Для этого необхо- димо установить сигналы на выводах процессора BMODE=1 и ММАР=0. Затем необходимо произвести сброс процессора и загру- зить программу в память программ процессора, начиная с адреса 1 через порт IDMA. Кроме того, можно записать произвольные дан- ные в память данных процессора. После этого следует записать слово программы по адресу 0, и процессор запустит загруженную программу. 91
Глава 9. Адаптер LPT-IDMA Теперь, после знакомства с портом ЮМА, можно приступить к рассмотрению устройства, позволяющего загружать програм- мы и редактировать данные памяти сигнального процессора че- рез интерфейсный порт ЮМА. Для этих целей был разработан небольшой адаптер LPT-IDMA, который позволяет подключить порт IDMA сигнального процессора к LPT порту персонального компьютера. Схема этого адаптера при- ведена на рис. 9.1. Адаптер выполнен на базе одной программируемой логической микросхемы D1 типа XC9536-15VQ44C фирмы XILINX. Схема внут- реннего содержимого этой микросхемы представлена на рис. 9.2. Данная схема обеспечивает формирование 16-разрядной шины адреса и управляющих сигналов для порта IDMA с помощью 8- разрядной шины данных LPT порта. Чтение 16-разрядных данных из порта IDMA осуществляется через сигналы состояния LPT порта с использованием мультиплексоров М2_1, запрограммированных в схеме ПЛИС. Прошивка для программирования данной ПЛИС в виде файла Iptjdma.jed находится на диске, прилагаемом к книге. Программи- рование ПЛИС осуществляется через соединитель Л с помощью программатора, описываемого в приложении. Все элементы адаптера можно распаять на небольшой макетной плате или изготовить для этих целей специальную печатную плату. Адаптер подключается к LPT порту компьютера с помощью ленточ- ного 25-жильного кабеля, через разъем Х1 «LPT». Чертеж такого кабеля изображен на рис. 9.3, а в табл. 9.1 приведено назначение цепей и соответствие контактов разъемов. С помощью разъемов XU и ХР адаптер подключается непосред- ственно к устройству с сигнальным процессором через интерфейс- ный порт IDMA. Питание адаптера осуществляется от источника питания на- пряжением +5 В самого устройства. В качестве такого устройства с сигнальным процессором можно использовать тестовую плату, 92
Гпава 9. Адаптер LPT-IDMA -STB □ 0 □ 1 □ 2 □ 3 D4 □ 5 □6 D7 -АСК BUSY РЕ SEL -ALF -ERR -INI Т -SLI N END END END END END END GND END Рис. 9.1. Схема адаптера (начало) 93
Часть II. Программирование АО 13 43 АО L 2 ДА AD15 1 R02 33 AD5 34 Д04 3G AD8 40 AD11 41 АО 10 42 АО 14 2 -ORD 3 -OVR 5 -SEL 6 - I N I Т 7 -RVR 8 -5 ТВ 12 1 □ I 9 ТН5 10 п. к 11 И Г“ 15 + 5V >- „ 35 О L К Г, Г К A53F VQ44 I /□ 1 /0 О С К I /□ I/O С 5 R. L 7 5 Г" "Г г I /0 7 /О □ 15 1 /□ I/O I /0 I/O КО I/O I /0 I/O I/O I /0 I /0 I/O 1 /0 I/O I /0 I/O I /0 7 /ГЛ 1/0 I /0 I/O I /0 I /0 ТО I I /0 тм s ТОО ток GND CND CND Vc с Vc с 01 Vc с 13 D0 14 01 16 02 18 03 19 D4 20 □5 21 06 22 D7 23 011 27 010 28 0 Г 7 29 013 30 AD0 31 AD1 32 RD3 37 AD7 3S ADB 39 RIJ9 ?Д TDD 4 17_ 25 . GND Рис. 9.1. Схема адаптера (продолжение) 94
Гпава 9. Адаптер LPT-IDMA AD0 хи S 4 О X ADI AD2 4 1 2 / S' ~~7 Л ^Х AD3 AD4 \3 4 / ADS AD6 4 5 6 AD7 AD8 <7 В > ADA ДО10 \ 9 102 S’ i t 4 '—i ADI 1 АО 12 41 1 1 22 AD13 Я014 <1 31 4> AD15 GND xl 51 62 -DRD -OWR 41 7 1 o2 GND 41 9207* -5EL -1N [ Т <2122> ~7 Л GND -AWR 42324/ GND XP ^5V < Л 2 > GND :3 4> i5 6> :? в > :g i0> 10 r0мкФх1 0B C1-C3 0, +5V CPI + Cl C2 C3 GND Рис. 9.1. Схема адаптера (окончание) 95
Часть II. Программирование ERR SEL РЕ ASK | OPAD> LOC=p27 | OPAD > LOC=p23 | OPAD> LOC=p28 | OPAD> -..OBUF D Q ,,^L- nu OBUF ^-<H OBUF OBUF P!3 __ М2 1 " DO DINO D1 DIN4 SO DO DIN1 D1 DIN5 SO DO DIN3 D1 DIN7 SO DIN[7 0] --- DINO DIN1 о DIN3 о AD(15 0] AD2 AD10 AD3 AD11 D0=p13 D1=p14 D2=p16 D3=p18 D4=p19 D5=p20 D6=p21 D7=p22 DIN4 о DIN5 о DIN6 о DIN7 о IPAD8 D[7 0] DO D1 D2 D3 IBUF4 DOUTO DOUT1 DOUT2 DOUT3 INV4 DOINVO DOINV1 DOINV2 DOINV3 D8 8E D4 D5 IBUF4 АО А1 DO D1 D2 D3 D4 D5 D6 D7 | PAD > L0C=p12 ^SI§----[>_ 4BUF o°- INV Рис. 9.2. Функциональная схема микросхемы (начало) 96
Гпава 9. Адаптер LPT-IDMA DOINV[3:0| FD4CE OBUFE4 DOINVO DOINV1 DOINV2" D0INV3L _____DO -----1D1 _____D2 _____D3 -----CE ! C CLR FD4CE doinvo DOINV1 DOINV2 DOINV3 . DO ( -D1 < -.02 ( _D3 < CE ->C CLR СО С1 С2 СЗ FD4CE DOINVO DO1NV1 DOINV2 D0INV3 DOINVO DOINV1 DOINV2 DOINy3 DO D1 D2 D3 CE >C CLR СО С1 С2 СЗ FD4CE INV4 CO - Cl _ C2 . C3 _ ADO .ADJ. AD2 ADO AD3 INV4 INV4 OBUFE4 __AD4 < ’ AD5 0BUFE4 AGIO. AD8 IOPAD4 < 103 Z 102" AD0=p30 AD1=p31 AD2=p33 AD3=p32 IOPAD4 103 Л'102 AD6. /“tOT™ j4D7___y- AD4 AD4=p36 AD5=p34 AD6=p38 AD7=p37 IOPAD4 103 AD8 .AD10 А011 AD8=p40 AD9=39 AD10=p42 AD11=p41 _____DO _____D1 _____D2 D3 - CE _ C INV4 E OBUFE4 CO __ C1 _ C2 C3___ ADJ З.Д AQ11_ AD14 -ADIS. AD14_ AD15 IOPAD4 r 103 АО12=р44 AD13=p43 AD14=p2 AD15=p1 jlS£L_^OPAD 0PAi) zDwjQ-qp^ -DRD_Z~ ОРДР L0C=p6 L0C=p8 L0C=p5 L0C=p3 Рис. 9.2. Функциональная схема микросхемы (окончание) 97
Часть II. Программирование Вилка DB-25 М Розетка DB-25 F Рис. 9.3. Ленточный 25-жильный кабель Таблица 9.1 Назначение цепей кабеля LPT Цепь Вилка DB-25M Розетка DB-25F I Цепь Вилка DB-25M Розетка DB-25F -STB 1 1 -AUTOLF 14 14 DO 2 2 -ERR 15 15 D1 3 3 -INIT 16 16 D2 4 4 -SELIN 17 17 D3 5 5 GND 18 18 D4 6 6 GND 19 19 D5 7 7 GND 20 20 D6 8 8 GND 21 21 D7 9 9 GND 22 22 -АСК 10 10 GND 23 23 BUSY 11 11 GND 24 24 РЕ 12 12 GND 25 25 SEL 13 13 - - - описанную ранее. Эта плата имеет все необходимое для подключения адаптера LPT-IDMA без всяких переделок. Все схемы и проект прошивки для ПЛИС прилагаются в виде со- ответствующих файлов на компакт-диске этой книги. 98
Глава 10. Менеджер памяти В этой главе описывается программа под названием «Менед- жер памяти», разработанная автором книги для загрузки в сиг- нальный процессор программ и их отладки. Для того чтобы можно было использовать адаптер LPT-IDMA для загрузки программ и данных в сигнальный процессор, а также иметь возможность редактировать содержимое памяти сигнального процессора во время его работы, мною была написана программа менеджера памяти цифрового сигнального процессора emngdspe. Эта программа является приложением DOS и может работать в режиме DOS под Windows95/98/Me. Данная программа в составе проекта для Borland C++ 3.1, с исходными текстами программы на- ходится на диске, прилагаемом к книге. После запуска программы mngdsp.exe на экране монитора должно появиться окно, изображенное на рис.10.1. Менеджер памяти DSP vl.2 rUX^UUU: Адрес +00 +01 = нам? +02 1Tb f. +03 jaHHbu +04 +05 '1 = +06 +07 СИМВОЛ 0x4000 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4008 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4010 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4018 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4020 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4028 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4030 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4038 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4040 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4048 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4050 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4058 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4060 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4068 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4070 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 0x4078 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF помощь: Стрелки,Home,End,PgUp,PgDn-перемещение Tab-дамп O...F-данные Enter-Ввод Esc-выход Fl-DSPl F2-DSP2 РЗ-Заполнить Р4-ОЧИСТИТЬ F8-c6poc_DSP F9-3arpy3Ka_DSP Рис. 10.1. Экран монитора после запуска программы mngdsp.exe 99
Часть II. Программирование Данное окно отображает содержимое памяти сигнального про- цессора в шестнадцатеричном формате. Внизу этого окна приведе- ны команды управления программой. При перемещении маркера по окну с помощью клавиш управления, можно выбрать любую дос- тупную ячейку памяти процессора, для записи в нее произвольных данных. Адрес выбранной ячейки памяти отображается слева вверху. Переключение между памятью данных и памятью программ процессора производится с помощью клавиши TAB клавиатуры. Адаптер позволяет подключаться параллельно к двум портам IDMA разных процессоров. Например, к мультипроцессорному устройст- ву. Для этого он использует сигнал -SEL, подключаемый к выводу- IS порта IDMA. Поскольку при пассивном состоянии данного сигна- ла порт IDMA не активизируется, допускается запараллеливание всех сигналов IDMA двух процессоров, за исключением сигнала - IS, который позволит выбирать один из двух процессоров. При та- кой схеме включения необходимо к выводу -IS одного из двух про- цессоров подключать сигнал —SEL непосредственно, а к выводу —IS второго процессора через инвертор. Выбор процессора из про- граммы производится клавишами F1 и F2. С помощью клавиши F3 можно заполнить всю память данных процессора произвольным числовым значением. Клавиша F4 позволяет очистить память дан- ных процессора путем записи во всю область памяти нулевого зна- чения. Клавиша F8 производит принудительный сброс процессора путем формирования сигнала сброса —INIT для процессора. Кроме того, программа менеджер позволяет загрузить программу в память процессора и запустить ее. Для этого используется клавиша F9. После нажатия этой клавиши, программа запросит имя загружаемо- го файла, а также предложит загрузить файл с именем dsp.lda, ис- пользуемым в программе по умолчанию. Поэтому перед запуском программы можно переименовать файл, который должен загру- жаться в процессор, в файл с именем dsp.lda либо ввести имя за- гружаемого файла по запросу программы. О формате данного фай- ла и о том, как получить такой файл, было рассказано ранее. Таким образом, используя программу менеджера памяти DSP, можно загружать и отлаживать программы для сигнального процес- сора, пользуясь при этом многократными итерациями, высокой ско- ростью и удобством интерфейса программы. Приведу еще один пример использования порта IDMA, который можно использовать в мультипроцессорных системах. При разра- ботке таких систем часто возникает необходимость загрузки про- граммы или данных в один из ведомых процессоров с помощью 100
Гпава 10. Менеджер памяти Рис. 10.2. Структурная схема подключения двух процессоров ведущего процессора. Для этих целей также хорошо подходит порт IDMA. Структурная схема подключения двух процессоров между собой через порт IDMA показана на рис. 10.2. Как видно из схемы, ведущий процессор подключен к порту IDMA ведомого процессора с использованием сигнала обращения к портам ввода-вывода -IOMS, сигнала записи -IWR, двух сигналов программируемых флагов PF0 и PF2, адресного сигнала АО, шины данных D8-D23 и сигнала синхронизации тактовой частоты CLKOUT. Такая схема включения позволяет выполнять операцию записи данных через порт IDMA ведомого процессора с помощью одной команды записи данных в порт ввода-вывода io(address)=data. Сигнал CLKOUT обеспечивает маскирование адресной линии АО при формировании сигнала защелки адреса IAL. Такое маскирование необходимо для блокировки переходных про- цессов на линии АО при установке адреса. Это хорошо видно из временной диаграммы цикла записи данных процессором в порт ввода-вывода, приведенной на рис.10.3. Сигнальные цепи PF2 и PF0 используются ведущим процессором для активизации схемы защелки адреса в порт IDMA и для анализа состояния готовности порта IDMA ведомого процессора. 101
Часть II. Программирование D8- D24------------------(У ДАННЫЕ )()---------- Рис. 10.3. Временная диаграмма цикла записи Ниже приведен исходный текст программы idmaidma.dsp для ведущего процессора данной схемы, позволяющей ему загрузить в память программ ведомого процессора массив данных, размещен- ных в файле idmaidma.dat, являющихся программой для ведомого процессора. Текст программы у********************************************************************* I /* Эта программа транслирует данные от ведущего процессора ADSP-2181 */ /* к ведомому процессору ADSP-2181 через IDMA порт */ у*********************************************************************у .module/abs=0x0000 idma_transfer; .include <def2181.h>; { .const length=68; { .var/pm/ram x_input[length]; { . init x_input: cidmaidma.dat>; { jump start; nop; nop; nop; { RTI; NOP; NOP; NOP; { RTI; NOP; NOP; NOP; RTI; NOP; NOP; NOP; RTI; NOP; NOP; NOP; RTI; NOP; NOP; NOP; RTI; NOP; NOP; NOP; RTI; NOP; NOP; NOP; RTI; NOP; NOP; NOP; RTI; NOP; NOP; NOP; Включить файл определений } Десятичное значение длины вектора } Описание массива данных } Файл передаваемых данных } Таблица векторов прерываний } Прерывания не используются } RTI; NOP; NOP; NOP; /*** Начало программы ***/ start: ах0=0х0000; dm(System_Control_Reg)=ахО; { dm(PFTYPE)=ахО; { dm(DM_Wait_Reg)=ахО;{Такты ожидания DM и портов Такты ожидания РМ отключить } Все флаги PF назначить выходами } ввода-вывода отключить] 102
Гпава 10. Менеджер памяти 16=0; { Длина буфера данных} i6=Ax_input; { Адрес начала буфера транслируемых данных } т6=1; { Приращение = 1 } modify(i6,m6); { Модификация адреса } /*** Защелкнуть адрес 0x0001 ***/ call check_ack; { Проверить готовность к приему } ах0=0х0001; { Стартовый адрес для записи в ведомый процессор } io(0x0001)=ах0; { Запись этого адреса с переключением линий -IS и IAL } /*** Запись всех данных начиная с адреса 0x0001 ***/ cntr=length-l; { Установить счетчик транслируемых слов } do loopl until се; { Организовать цикл записи } call check_ack; { Проверить готовность к приему } call format; { Форматировать данные } io(0x0100)=ау0; { -IWR и IS записывают старшие 16 бит IAD 0-15 } call check_ack; { Проверить готовность к приему } ю(0x0100)=ayl; { -IWR и IS записывают младшие 8 бит IAD 0-15 } loopl: пор; /*** Защелкнуть адрес 0x0000 ***/ call check_ack; { Проверить готовность к приему } ах0=0х0000; { Стартовый адрес для записи в ведомый процессор } io(0x0001)=ах0; { Запись этого адреса с переключением линий -IS и IAL } /*** Запись по адресу 0x0000 ***/ 16=~x_input; ( Указатель на начало буфера данных } call check_ack; { Проверить готовность к приему } call format; { Форматировать данные } io(0x0100)=ау0; { -IWR и IS записывают старшие 16 бит IAD 0-15 } call check_ack; { Проверить готовность к приему } io(0x0100)=ayl; { -IWR и IS записывают младшие 8 бит IAD 0-15 } idle; { Режим ожидания } /★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★у /* Подпрограмма переформатирования 24--бит слова памяти программ */ /★★★★★★★★★★★★★★★★★★★★★к******************************************/ format: ay0=pm(i6,m6); { 16 старших бит запомнить в регистре ауО } ау1=рх; { 8 младших бит запомнить в регистре ayl } rts; ^***************************************************************************у /* Подпрограмма ожидания перехода состояния линии -IACK в низкое состояние */ у***************************************************************************у check_ack: ax0=dm(0x3fе5); { Читать PF1, который подключен к -IACK } ar=tstbit 1 of ахО; { Анализировать PF1 } if ne jump check_ack; { Если процессор не готов вновь контролировать -IACK} rts; .endmod; Многие директивы и команды данной программы уже знакомы читателям из описания предыдущей программы. Текст программы прокомментирован, что позволяет без труда понять алгоритм ее работы. Как видно из текста, в программе использован ряд подпро- грамм, в которых сосредоточены часто используемые операции. Вызов данных подпрограмм осуществляется командой call, после которой записывается имя подпрограммы. Команда io(0x0001)=ax0 осуществляет запись содержимого регистра ахО в порт ввода- вывода по адресу 0x0001. Команда ar=tstbit 1 of ахО заносит в ре- гистр аг результат тестирования первого разряда регистра ахО. 103
Часть II. Программирование Следующая за этой, команда if ne jump check_ack проверяет со- стояние флагов ALU и осуществляет переход на метку check_ack, если результат проверки предыдущей операции был отрицатель- ным. Подробнее со всеми командами сигнального процессора ADSP-2181 мы познакомимся позже. При компиляции этой программы, все данные из файла idmaidma.dat будут автоматически помещены в файл загрузки idmaidma.lda. В качестве файла данных idmaidma.dat можно ис- пользовать загрузочный файл рассмотренной нами ранее програм- мы mem_clr.lda, из которого предварительно следует удалить пер- вые три и последние две служебные строки. Данную операцию можно выполнить с помощью любого текстового редактора. После чего файл необходимо переименовать, задав ему имя idmaidma.dat. Кроме того, можно изменить имя загружаемого файла в самой про- грамме. 104
Глава 11. Директивы ассемблера В этой главе говорится о директивах, которые используют- ся для управления процессом ассемблирования программ. На примере программ, рассмотренных ранее, было показано, что программа может включать в себя строки различных директив. Директивы управляют процессом ассемблирования. Они обраба- тываются препроцессором, но в отличие от инструкций не генери- руют при ассемблировании код. Любая директива ассемблера на- чинается с точки и заканчивается точкой с запятой. Некоторые ди- рективы имеют параметры и аргументы. Параметры следуют сразу за директивой и разделяются косой чертой, аргументы следуют по- сле параметров. Директивы ассемблера могут содержать одно- строчный комментарий, который не может быть продолжен на сле- дующей строке. Если требуется многострочный комментарий, необ- ходимо начать новый комментарий на следующей строке. В общем случае запись директив выглядит следующим образом: .ДИРЕКТИВА [/ПАРАМЕТР1][/ПАРАМЕТР2] ... [АРГУМЕНТ]; {Комментарий} В данной записи квадратные скобки означают, что оператор, за- ключенный между ними, не является обязательным и может отсут- ствовать в некоторых директивах. Комментарий не является обяза- тельным элементом директивы и выполняет вспомогательную функцию пояснения. Помимо директив ассемблера, в среде разработки программ для ADSP-2181 существует несколько директив для системного конфи- гуратора. Ранее говорилось о том, что системный конфигуратор можно не использовать, если имеется готовый файл описания ар- хитектуры с расширением ach для конкретного устройства, постро- енного на определенном типе сигнального процессора. Этот файл используется компоновщиком и программой эмулятора для того, чтобы определить размер памяти системы, тип памяти процессора (ОЗУ или ПЗУ), какая часть памяти является внутренней и внешней и какая периферия отображена в памяти. При необходимости, мож- но воспользоваться системным конфигуратором с целью получения 105
Часть II. Программирование нового файла описания архитектуры для нового устройства или другого типа процессора. Перед запуском системного конфигуратора необходимо создать файл с расширением sys, содержащим директивы описания уст- ройства (системы). Запуск системного конфигуратора осуществля- ется командой: bld21 имя_файла[.зуз] [-с]. Здесь имя_файла - это имя исходного файла системной конфи- гурации. Имя файла может быть указано с расширением. Если рас- ширение отсутствует, системный конфигуратор добавляет по умол- чанию расширение sys. Системный конфигуратор создает выход- ной файл описания архитектуры с именем входного файла и рас- ширением ach. Ключ -с делает системный конфигуратор чувстви- тельным к регистру символов, различающим использование верх- него или нижнего регистра (прописных или строчных) символов. Если ключ -с не используется, то на выходе системного конфигура- тора будет создан файл с символами верхнего регистра. Для вызо- ва справки системного конфигуратора, наберите команду: bld21 -help. Этот ключ позволяет получить справку о версии программы и посмотреть список возможных команд. Ключ -help работает в большинстве программ средств разработки. Рассмотрим более подробно основные директивы системного конфигуратора и ассемблера для сигнальных процессоров семей- ства ADSP. Директива SYSTEM Директива SYSTEM определяет имя (название) системы и должна быть первой командой в исходном файле системной кон- фигурации. Директива имеет формат: .SYSTEM имя_системы; В языке ассемблера допускается использовать в качестве имен набор символов, содержащий: - прописные латинские буквы от «Ае до eZ»; - строчные латинские буквы от «ае до ez»; - знак подчеркивания «_». 106
Гпава 11. Директивы ассемблера Имена не должны начинаться с цифры и могут иметь длину до 32 знаков. Ниже приведено несколько примеров имен с описанием их назначения: Main_prog {Программный модуль на языке ассемблер} var1 {Переменная}; buff {Буфер данных}; met173 {Программная метка}; DAC {Порт, отображенный в памяти}. Директива ADSP21XX Эта директива определяет, какой тип процессора семейства ADSP2100 используется в системе. Данная информация передает- ся компоновщику (редактору связей) и симулятору через выходной файл с расширением ach. После этого редактор связей в состоянии определить место расположения программы и данных в соответст- вии с организацией памяти для конкретного типа процессора. Эта директива принимает одну из следующих форм: .ADSP2100; {Для ADSP-2100 и ADSP-2100A} .ADSP2101; .ADSP2105; .ADSP2111; .ADSP2150; {Для ADSP-21msp50 и ADSP-21msp55} .ADSP2151; {Для ADSP-21msp51 и ADSP-21msp56} .ADSP2101MV; {Для вариантной системы ADSP-2101 (ADSP-2115)} .ADSP2101P; {Для системы со страничной памятью ADSP-2101} .ADSP2181; {Для ADSP-2181} и т.п. Директива ММАР Эта директива определяет логическое состояние вывода ММАР процессора в системе. Она принимает одну из двух форм: .ММАРО {Вывод ММАР=0} .ММАР1 {Вывод ММАР=1} Если используется ММАРО, загрузка программы из памяти на- чальной загрузки происходит после перезагрузки и начинается с нулевого адреса внутренней памяти программ. Если используется ММАР1, загрузка программы из памяти начальной загрузки недос- 107
Часть II. Программирование тупна, и внутренняя память программ отображается на верхние ад- реса пространства памяти программ. Когда эта директива пропус- кается, программа моделирования принимает по умолчанию значе- ние ММАР1. Директива SEG Директива SEG определяет специальную секцию системной па- мяти и описывает ее атрибуты. Не существует разделения памяти по умолчанию, поэтому необходимо определить системную память с помощью директив SEG самостоятельно. Эта информация пере- дается редактору связей, симулятору и эмулятору через выходной файл с расширением ach. Директива SEG имеет форму: .ЭЕС/параметр1 /параметр2/... имя_сегмента[размер]; Сегменту присваивается символьное имя. Присвоенное имя по- зволяет разместить фрагменты программы и данных в памяти. На языке ассемблер это достигается параметром SEG. Размер сег- мента указывается внутри скобок. Эта величина интерпретируется как количество 16-разрядных слов данных или 24-разрядных слов инструкций в сегменте. Для директивы SEG необходимо указать два обязательных па- раметра: РМ, или DM, или ВООТ=0-7 - тип сегмента памяти; RAM или ROM - тип памяти процессора. Четыре других параметра являются необязательными: АВЭ=адрес - абсолютный стартовый адрес; DATA, или CODE, или DATA/CODE - тип данных, хранимых в сегменте; EMULATOR или TARGET - распределение памяти для эмулято- ра; INTERNAL - расположение в памяти процессора ADSP-2101 с вариантной памятью. Параметры PM, DM и BOOT определяют тип сегмента памяти, который может быть отведен под память программ, память данных или одну из восьми страниц памяти начальной загрузки. Остальные параметры определяют тип памяти процессора, начальный адрес сегмента, тип данных сегмента (данные и/или программы) и рас- пределение памяти эмулятора. Каждый сегмент памяти должен адресоваться раздельно, по- скольку, например, адрес 0x10 в памяти программ отличается от 108
Гпава 11. Директивы ассемблера адреса 0x10 в памяти данных из-за разной длины слов этих дан- ных. Сегмент памяти программ РМ может хранить только програм- мы (CODE), данные (DATA) или одновременно программы и дан- ные. Если не указать ни одну из опций, по умолчанию принимается хранение программ. Для сегмента РМ, содержащего программу и данные, должны быть указаны оба параметра. Параметр памяти начальной загрузки должен определять только один номер страни- цы, например ВООТ=0. Необходимо разделять объявление сегмен- та для каждой страницы памяти начальной загрузки системы. Сис- тема может иметь до 8 страниц памяти начальной загрузки с номе- рами от 0 до 7. Каждая страница памяти начальной загрузки для ADSP-2101, ADSP-2111, ADSP21ms50 может сохранять до 2К про- грамм и данных. Каждая страница памяти начальной загрузки для ADSP-2105, ADSP-2115 может сохранять до 1К слов. Параметр ABS для страниц памяти начальной загрузки не используется, по- скольку системный конфигуратор самостоятельно присваивает со- ответствующие адреса. Примеры директивы SEG: ,SEG/PM/RAM/ABS=0/CODE/DATA start [2048]; Здесь объявлен сегмент памяти программ ОЗУ, называемый start, который расположен по адресу 0. Сегмент может содержать до 2048 слов программ и данных. ,SEG/ROM/BOOT=0 bootO[1536]; Здесь объявлен сегмент памяти начальной загрузки bootO, кото- рый расположен на странице номер 0 памяти начальной загрузки (автоматически соответствует адресу 0 в памяти начальной загруз- ки). Длина сегмента составляет 1536 слов. Сегменты памяти на- чальной загрузки должны всегда быть объявлены как ROM (ПЗУ). Директива PORT Директива PORT является директивой системного построителя и ассемблера. Она объявляет порт ввода/вывода отображенный в памяти процессора. Каждый порт должен иметь уникальное имя и адрес в системе. Порты могут быть определены в памяти данных или памяти программ. Для процессоров с внутренней памятью пор- там могут быть присвоены адреса только во внешней памяти. Директива PORT принимает одну из двух форм: 109
Часть II. Программирование .PORT/DM/ABS=aflpec имя_порта; или ,PORT/PM/ABS= адрес имя_порта; Параметр DM показывает, что порт отображен в памяти данных. Параметр РМ показывает, что порт отображен в памяти программ. Если параметр не задан, по умолчанию принимается DM. Порт рас- полагается по абсолютному адресу, который определен парамет- ром ABS, и присваивается символическому имени порта. Это имя используется в инструкциях ассемблера для доступа к порту, на- пример: .PORT/DM/ABS=0x0020 р1; Объявляет имя порта р1, который отображен в памяти данных по адресу 0x0020 (шестнадцатеричный) или 32 (десятичный). Ас- семблерная программа обращается к этому имени, чтобы предста- вить его редактору связей, базирующемуся на содержании файла описания системной конфигурации с расширением ach. Отображе- ние порта в памяти данных позволяет 16-и разрядное чте- ние/запись, в то время как отображение порта в памяти программ допускает 16- или 24-разрядный обмен данными. В программе директива PORT повторяет директиву системного построителя без указания адреса порта. Например, в файле конфи- гурации системы для системного построителя директива PORT объявляет порты CODEC и DAC по адресам 0x3000 и 0x3800 соот- ветственно: .PORT/ABS=0x3000 CODEC; .PORT/ABS=0x3800 DAC; В программе директива PORT объявляет эти порты следующими строками: .PORT CODEC; .PORT DAC; После чего в программе можно делать обращения к описанным портам с помощью команд, подобным следующим: AR=DM(DAC); DM(DAC)=AR; 110
Гпава 11. Директивы ассемблера AR=DM(CODEC); DM(CODEC)=AR; Директива ENDSYS Директива ENDSYS должна быть последней командой в файле. Системный конфигуратор останавливает свою работу на директиве .ENDSYS. Директива имеет форму записи: .ENDSYS; Ниже приведен пример законченного файла example.sys для системного конфигуратора. .SYSTEM example; .ADSP2181; .ММАРО; ,SEG/PM/RAM/ABS=OxOOOO/CODE/DATA мем_рт[0х4000]; ,SEG/DM/RAM/ABS=OxOOOO/DATA mem_dm[0x3FE0]; .ENDSYS; После обработки этого файла системным конфигуратором дол- жен получиться файл example.ach с таким содержимым: $EXAMPLE $ADSP2181 $ММАР0 $0000 3FFF pax_PMt $0000 3FDF dadMEMJDM t $ Теперь рассмотрим основные директивы ассемблера, которые применяются в текстах программ для сигнальных процессоров се- мейства ADSP. Директива MODULE Директива MODULE обозначает начало программного модуля и определяет название модуля. Как было сказано ранее, программа для ADSP-2181 может состоять из одного или нескольких модулей, которые отдельно ассемблируются и затем связываются вместе. Каждый файл с исходным текстом программы может содержать только один программный модуль. Директива имеет следующую форму записи: 111
Часть II. Программирование .M0DULE/nAPAMETP1/nAPAMETP2... ИМЯ_МОДУЛЯ; Параметры могут быть следующими: RAM или ROM - тип памяти для размещения программы; АВ8=адрес - абсолютный стартовый адрес (не используется вместе с директивой STATIC); ЗЕО=сегмент- размещение программы в указанном сегменте; STATIC - статичное размещение модуля в памяти (не использу- ется вместе с директивой ABS). Параметр RAM (ОЗУ) или ROM (ПЗУ) определяет тип памяти процессора для размещения программы. Если тип памяти не опре- делен, то по умолчанию принимается тип RAM. Параметр ABS размещает коды модулей программ по опреде- ленным адресам памяти программ, что делает их не перемещае- мыми компоновщиком. Это означает, что компоновщик резервирует память для модулей по указанным адресам. Модули, которые не имеют параметра ABS, распределяются компоновщиком в памяти процессора автоматически. Параметр SEG размещает модуль в указанный сегмент памяти, который объявлен в файле системной конфигурации. Если опреде- лить оба параметра ABS и SEG и указать абсолютные адреса, ко- торых нет в данном сегменте, компоновщик выдаст сообщение об ошибке. Параметр STATIC сохраняет модуль в памяти программ, когда загружаются страницы начальной загрузки. Пример записи дирек- тивы: ,MODULE/RAM/ABS=0 demo; {Определение имени demo программного модуля} {с размещением в ОЗУ по абсолютному адресу 0} Директива CONST Директива CONST определяет соответствие между именем кон- станты и ее значением. Данная директива имеет следующую форму записи: .CONST имя_константы1 = значение!, имя_константы2 = значение2...; Значения констант могут быть числовыми или символьными константами. Кроме того, допускается присваивать константам вы- ражения. В выражениях разрешаются только арифметические или 112
Гпава 11. Директивы ассемблера логические операции над двумя или более целыми константами. В качестве знаков выражений в ассемблере допускается использо- вать следующие символы: + - сложение; — вычитание; * - умножение; / - деление; % - модуль (целая часть от деления); ( - левая скобка; ) - правая скобка; &-логическое «И» (AND); | -логическое «ИЛИ» (OR); — исключающее «ИЛИ» (XOR); « - логический сдвиг влево; » - логический сдвиг вправо. Запись чисел в программах может осуществляться в нескольких форматах. Для записи шестнадцатеричных чисел используется префикс Ох (ноль и икс) или Н#. Например: 0x24FF, H#CF8A. Для восьмеричных чисел применяется префикс 0 (ноль): 0777, 0123, 07777. Двоичные числа записываются с префиксом В#: В#01110100. Десятичные числа записываются в программе без префиксов. Т.е. по умолчанию формат числа считается десятичным: 1024, -55,0. Пример записи арифметического выражения: X = (29+129)(128-48)/3. Пример логического выражения: Y = 0x55&0x0F. Пример записи директивы: 113
Часть II. Программирование .CONST N=1024, LEN_BUF=N/2; {Число точек отсчета = 1024, длина буфера = 512} Директива VAR Директива VAR объявляет переменные и буферы переменных. Буфер переменных представляет собой набор ячеек памяти, рас- положенных упорядоченно друг за другом по смежным (соседним) адресам. Буфер может быть многомерным и одномерным, т.е. со- стоящим из нескольких или из одной переменной. Буфер должен быть объявлен до использования в программе. Буферы удобны для организации приема и передачи блочных данных и часто использу- ются в программах. Директива VAR имеет следующую форму записи: .\/АВ/параметр1/параметр2 ... имя_буфера[длина],...; . С директивой могут использоваться следующие параметры: РМ или DM - тип памяти для размещения буфера; RAM или ROM - тип памяти процессора; АВЗ=адрес - абсолютный адрес (нельзя использовать вместе с директивой STATIC); ЗЕО=сегмент - размещение буфера в сегменте, объявленном системным конфигуратором; CIRC - кольцевой буфер; STATIC - предотвращает перезапись буфера во время загрузки начальной страницы. Одна директива VAR позволяет объявить в одной строке длиной до 200 символов несколько буферов, разделенных запятыми. Буферы могут быть линейными и кольцевыми. Буферы могут быть произвольной длины от единицы до размера, не превышаю- щего объем памяти процессора. Линейный буфер размещается в памяти с любого адреса. Кольцевой буфер может быть размещен в памяти с некоторыми ограничениями, связанными с аппаратными особенностями памяти процессоров. Так, кольцевой буфер должен стартовать с базового адреса, который кратен 2 в степени п, где п - количество бит требуемых для представления длины буфера в двоичном виде. Это необходимо учитывать при создании кольце- вых буферов с параметром ABS. При многочисленном объявлении линейных буферов в одной строке редактор связей размещает их в смежных областях памяти. 114
Гпава 11. Директивы ассемблера Если при таком объявлении используется параметр CIRC, то соз- дается единственный кольцевой буфер, а остальные объявленные в этой строке буферы будут линейными. Буферы могут быть размещены как в памяти программ РМ, так и в памяти данных DM, по умолчанию. Тип памяти по умолчанию ус- танавливается в RAM для памяти DM и РМ. Параметр ABS размещает буфер с указанного стартового адре- са, делая его неперемещаемым. Параметр SEG размещает буфер в указанном сегменте памяти, который был объявлен в файле системного конфигуратора. Параметр CIRC определяет кольцевой буфер. Буфер будет ор- ганизован как линейный, если не применен атрибут CIRC. Параметр STATIC предотвращает перезапись буфера, когда за- гружается страница начальной загрузки. Пример объявления буфера: .VAR/PM/RAM/SEG=segdata buffer[10]; Здесь линейный буфер объявлен в памяти программ RAM, кото- рый перемещаем в пределах сегмента с именем segdata. Буфер с именем buffer состоит из 10 ячеек в памяти программ. Длина буфе- ра указывается в квадратных скобках. Для объявления одномерных буферов, т.е. простых перемен- ных, применяется директива VAR без указания длины буфера. На- пример: .VAR/DM/RAM/ABS=0x000C xdata; Данная директива объявляет однословную переменную с име- нем xdata в памяти данных RAM по шестнадцатеричному адресу ОхОООС. Ниже приведен пример объявления автоматически перемещае- мого кольцевого буфера с именем buffer_c, длина которого опреде- ляется величиной константы size, объявленной директивой CONST. .CONST size = 15; .VAR/DM/CIRC buffer_c[size]; Ниже приведены примеры, позволяющие понять, как можно размещать циклические буферы в памяти. Следующий оператор объявляет кольцевой буфер с именем abut из шести ячеек памяти: .VAR/CIRC abuf[6]; 115
Часть II. Программирование Поскольку ближайшим числом больше шести и кратным двум является число 8, то базовый (стартовый) адрес буфера должен быть кратен 8. Три младших значимых разряда (МЗР) этого адреса будут равны нулю. В табл. 11.1 показано размещение этого буфера в памяти. Таблица 11.1 Размещение одного циклического буфера в памяти сигнального процессора Имя буфера Элемент буфера Двоичный адрес abuf abuf[O] xxxxxxxxxxoooo abuf[1] XXXXXXXXXX0001 abuf[2] XXXXXXXXXX0010 abuf[3] XXXXXXXXXX0011 abuf[4] XXXXXXXXXX0100 abuf[5] XXXXXXXXXX0101 XXXXXXXXXX0110 Если в одной строке объявлены несколько буферов с парамет- ром CIRC, то будет создан один кольцевой буфер, вмещающий в себя все буферы. Первый из этих буферов будет кольцевым, а от- дельные буферы будут простыми линейными буферами. Например, следующая директива создает один кольцевой буфер abut и два линейных буфера с именами bbuf и cbuf. .VAR/CIRC abuf[6], bbuf[3], cbuf[5]; Для размещения всех этих буферов в памяти процессора по- требуется 6+3+5=14 ячеек памяти. Поскольку первым в директиве объявлен буфер abut, то он будет кольцевым. Ближайшим числом больше 14 и кратным двум является число 16. Поэтому базовый адрес буфера abut должен быть кратен 16 (четыре младших зна- чащих разряда будут равны нулю). Базовый адрес буфера bbuf бу- дет следовать сразу за адресом последнего элемента буфера abuf. Аналогично будет размещен и буфер cbuf. Размещение всех этих буферов в памяти процессора показано в табл. 11.2. 116
Гпава 11. Директивы ассемблера Следующий пример показывает использование трех директив для объявления трех различных кольцевых буферов: Таблица 11.2 Размещение трех буферов в памяти процессора Имя буфера Элемент буфера Двоичный адрес abuf abuf[O] xxxxxxxxxxoooo abuf[1] XXXXXXXXXX0001 abuf[2] XXXXXXXXXX0010 abuf[3] XXXXXXXXXX0011 abuf[4] XXXXXXXXXX0100 abuf[5] XXXXXXXXXX0101 bbuf bbuf[O] XXXXXXXXXX0110 bbuf[1] XXXXXXXXXX0111 bbuf[2] XXXXXXXXXX1000 cbuf cbuf[O] XXXXXXXXXX1001 cbuf[1] XXXXXXXXXX1010 cbuf[2] XXXXXXXXXX1011 cbuf[3] XXXXXXXXXX1100 XXXXXXXXXX1101 .VAR/CIRC abuf[6]; .VAR/CIRC bbuf[3]; .VAR/CIRC cbuf[5]; Поскольку буферы объявлены отдельно, все они будут кольце- выми и не будут объединены. Правила размещения для каждого из этих буферов такие же, как в рассмотренном выше примере для одиночного буфера abuf. Размещение этих буферов в памяти про- цессора показано в табл. 11.3. Чтобы получить доступ к буферу abuf из программы, необходимо инициализировать индексные регистры DAG и регистры длины бу- фера следующими инструкциями: IO = Aabuf; {Присвоить индексному регистру Ю базовый адрес буфера abuf} 117
Часть II. Программирование L0 = %abuf; {Присвоить L0 длину буфера abut} МО = 1; {Присвоить модификатору МО значение наращивания указателя адреса буфера abuf} Таблица 11.3 Размещение трех кольцевых буферов в памяти процессора Имя буфера Элемент буфера Двоичный адрес abut abuffO] XXXXXXXXXOOOOO abuf[1] XXXXXXXXX00001 abuf[2] XXXXXXXXX00010 abuf[3] XXXXXXXXX00011 abuf[4] XXXXXXXXX00100 abuf[5] XXXXXXXXX00101 bbuf bbuf[O] XXXXXXXXX01000 bbuf[1] XXXXXXXXX01001 bbuf[2] XXXXXXXXX01010 cbuf cbuf[O] XXXXXXXXX10000 cbuf[1] XXXXXXXXX10001 cbuf[2] XXXXXXXXX 10010 cbuf[3] XXXXXXXXX 10011 Далее в программе можно читать данные из буфера с помощью инструкции AR=DM(IO, L0) или записывать данные в буфер инструк- цией DM(IO, LO)=AR. Естественно, вместо регистра AR могут приме- няться и некоторые другие регистры процессора. При размещении этих инструкций в цикле каждое обращение к буферу будет автома- тически увеличивать индексный регистр адреса I0 на величину МО. При достижении регистром I0 величины, равной L0, индексный ре- гистр Ю вновь загрузится базовым адресом буфера. Таким образом, обращения к буферу будут кольцевыми. Для линейных буферов ре- гистр длины буфера должен быть установлен в ноль. 118
Гпава 11. Директивы ассемблера Директивы PMSEG и DMSEG Данные директивы предназначены для размещения программ и данных в сегментах памяти. Директива PMSEG указывает редакто- ру связей на необходимость разместить все программы и данные модуля в определенном сегменте памяти программ. Директива DMSEG указывает редактору связей на необходимость разместить все структуры данных модуля в определенном сегменте памяти данных. Сегменты должны быть предварительно определены в файле описания архитектуры системного конфигуратора. Директи- вы PMSEG и DMSEG подобно параметру SEG директив MODULE и VAR имеют следующий формат: .PMSEG имя_сегмента_рт; .DMSEG имя_сегмента_с!т;. Обычно, чтобы расположить все программы и данные исходного модуля в определенном системным конфигуратором сегменте па- мяти, необходимо повторить параметр SEG в директиве MODULE и всех директивах VAR внутри модуля. Директивы PMSEG и DMSEG используются для исключения многократного повторения парамет- ров SEG. Директивы PMSEG и DMSEG должны быть размещены в исходном файле программного модуля перед директивой MODULE. Ниже приводится пример, в котором модуль progl, некоторые бу- феры и переменную var1 располагают в памяти данных в сегменте с именем seg1: .DMSEG seg1; .MODULE/RAM progl; .VAR/DM/RAM/CIRC buf1 [15]; .VAR/DM/RAM buf2[5]; .VAR/DM/RAM buf3[5]; .VAR/DM/RAM var1; .ENDMOD; . Директива INIT Директива INIT используется для инициализации переменных и буферов в ПЗУ. Редактор связей помещает данные инициализации в файл образа памяти, который затем используется разделителем программ (splitter) при подготовке данных для записи в ПЗУ. Разде- литель трансформирует части этого файла в формат, совместимый с промышленным стандартом программатора ПЗУ. 119
Часть II. Программирование Инициализирующие значения могут быть перечислены в дирек- тиве или указаны во внешнем файле. Директива IN IT может иметь одну из следующих форм: .INIT имя_буфера: значение!, значение2, .INIT имя_буфера: Лдругой_буфер или %другой_буфер, .INIT имя_буфера: <имя_файла>;. Операторы Л и % используются для инициализации буфера или переменной базовым адресом, или длиной, или даже другими буфе- рами. Любые комбинации констант, указателей адресов буфера и величин длины буфера могут быть заданы через запятую. Примеры: .INIT х: 0X3FFF;. Данный пример инициализирует переменную х шестнадцатерич- ной константой 0x3FFF. .INIT buf: 9,0,3,5,7;. Эта директива инициализирует буфер buf списком констант. .INIT ab:Abuf;. Здесь переменная ab инициализируется указателем стартового адреса буфера buf. Допускается инициализировать только часть данных буфера, задавая смещение его базового адреса (индекса): .INIT buf[2]: 3,5,7; . Так, инициализирующие величины будут размещены, начиная с элемента buf[2]. Здесь инициализируются второй, третий и четвер- тый элементы буфера buf величинами 3, 5 и 7 соответственно. Третья форма директивы INIT указывает имя файла, который содержит инициализирующие величины. Ассемблер устанавливает указатель на этот файл, и данные присоединяются при запуске ре- дактора связей. Следующий пример заставляет редактор связей инициализировать буфер sin содержимым файла sinus.dat: .INIT sin: <sinus.dat>;. Если файл с данными находится в директории с программой, то необходимо указать в скобках только имя этого файла. Если файл находится в другом каталоге, необходимо указать путь к этому ка- 120
Гпава 11. Директивы ассемблера талогу и имя файла. Например, если файл init.dat для буфера с именем buff размещен в директории C:\ADSP2181\PROG1\, тогда директива INIT должна быть применена следующим образом: .INIT buff: < C:\ADSP2181 \PROG1\init.dat>. Это позволит редактору связей найти файл. Данный способ ши- роко используется для загрузки буферов данными, выработанными другими программами, такими, например, как нахождение коэффи- циентов фильтра. После того как редактор связей считает и присоединит содер- жимое файла, изменение данных потребует лишь выполнить по- вторную компоновку программы. Переменные данных и буферов могут быть инициализированы с помощью семиразрядного ASCII кода. Следующий пример инициа- лизирует один четырехразмерный буфер input кодами ASCII для букв А, Е, F, 7. ASCII коды размещаются в семи младших разрядах 16-разрядной памяти данных или 24-разрядной памяти программ. Символы необходимо заключать в апострофы. .INIT input: ‘AEFZ’; {Инициализировать буфер символами ASCII} Специальный синтаксис директивы INIT24, позволяет сохранять 24-х разрядные данные в памяти программ. Это дает возможность получить доступ к младшим 8-и разрядам каждого 24-х разрядного слова памяти программ при инициализации буферов данных или переменных в исходной программе. Например, эта директива позволяет вычислить 16-разрядный адрес для переменной var: .INIT var: Abuff + 17;. А следующая директива вычисляет 24-разрядный адрес для этой же переменной: .INIT24 var: Abuff + 17;. Директива GLOBAL Директива GLOBAL обеспечивает доступ к переменным, буфе- рам и портам из других модулей программы. Для доступа к одной из этих структур из других модулей необходимо объявить ее директи- вой GLOBAL. Директива GLOBAL имеет формат: 121
Часть II. Программирование .GLOBAL внутренний_символ 1, внутренний_символ 2,...; Пример: .VAR/PM/RAM buff[10]; {Создать буфер buff размерностью 10 элементов} .GLOBAL buff; {Объявить буфер видимым из других модулей} После того как структура объявлена глобальной, другие модули могут обращаться к ней в программе. Предварительно эта структу- ра в них должна быть объявлена как внешняя с помощью директи- вы EXTERNAL. Директива ENTRY Директива ENTRY позволяет обращаться к программным меткам в других модулях. Это позволяет использовать метку для вызова подпрограммы или межмодульных переходов. Директива ENTRY имеет формат: .ENTRY метка 1, метка 2, ...; Пример: .ENTRY met; {Делает метку met доступной из других модулей} С тех пор как метка объявлена директивой ENTRY, другие моду- ли могут обращаться к ней, идентифицируя ее как внешнюю с по- мощью директивы EXTERNAL. Директива EXTERNAL Директива EXTERNAL позволяет программному модулю обра- щаться к глобальным структурам данных (переменным, буферам и портам) и программным меткам, объявленным в других модулях. Структура должна быть определена до этого с помощью дирек- тивы GLOBAL или ENTRY в тех модулях, где она впервые объявле- на. Другие модули должны использовать директиву EXTERNAL для открытия доступа к внешним структурам. Директива имеет формат: .EXTERNAL структура 1, структура 2,...; Пример: 122
Гпава 11. Директивы ассемблера .EXTERNAL met; {Метка находится в другом модуле} Директива INCLUDE Директива INCLUDE используется для включения других исход- ных файлов в файл, предназначенный для ассемблирования. Ас- семблер открывает, читает и ассемблирует указанный файл, когда он встречает строку оператора INCLUDE. Ассемблированный код объединяется в выходном файле с расширением obj. Когда ас- семблер достигает конца включенного файла, он возвращается в первичный исходный файл и продолжает обработку. Директива INCLUDE имеет следующий формат: .INCLUDE <имя_файла>; Если файл, который должен быть включен директивой INCLUDE, находится в текущей директории вместе с программой, в угловых скобках требуется указать только имя файла. Если файл находится в другом каталоге, необходимо указать полный путь к этому каталогу и имя файла (или использовать переменную среды окружения ADII). Например, если файл, который должен быть включен, называется filter.dsp и расположен в директории C:\ADSP2181\PROG2\, тогда ди- ректива INCLUDE должна быть задана следующим образом: .INCLUDE <C:\ADSP2181\PROG2\filter.dsp>; Это позволит ассемблеру найти файл. Существует и другой спо- соб указания пути к файлу. Так можно указать путь, используя пе- ременную среды окружения ADII с помощью команды: Set ADII=C:\ADSP2181\PROG2 Данная команда должна записываться в файле autoexec.bat операционной системы или в командном файле для трансляции программы. Установка ADII, равной пути к каталогу, позволит ас- семблеру обнаружить файл. В этом случае можно задавать имя файла без указания полного пути. Файл, включенный директивой INCLUDE, может также содержать внутри себя директиву INCLUDE. Вложение файлов директивами INCLUDE ограничивается только размером свободной оперативной памяти. Директива INCLUDE допускает использовать принцип модульно- го программирования. Например, во многих случаях она использу- ется, чтобы развить библиотеку подпрограмм или макросов, кото- 123
Часть II. Программирование рые применяются в различных программах. Вместо того чтобы ка- ждый раз переписывать подпрограммы, можно присоединить мак- робиблиотеку в ассемблерный модуль, воспользовавшись директи- вой INCLUDE. Пример: .INCLUDE <библиотека_макросов>; Директива MACRO Директива MACRO создает в программе макрос (набор инструк- ций). Макрос используется для повторения часто используемых по- следовательностей инструкций в исходном тексте программы. Пере- дачей аргументов макросу реализуется подобие подпрограммы, ко- торая может быть использована в различных программах. Допуска- ется делать вложение макросов. Макровложения ограничены только размером свободной оперативной памяти. Вложенные макросы должны быть объявлены в определенной последовательности. Пер- вым объявляется внутренний макрос. Внешний макрос объявляется последним. Все константы, используемые в макросах, должны быть объявлены перед объявлением макросов. Макрос определяется двумя директивами. Первая директива имеет формат: .MACRO имя_макроса (аргумент"!, аргумент2,...); Завершает макрос директива окончания макроса: .ENDMACRO; Каждый оператор внутри макроса может быть инструкцией, ди- рективой или макровключением. Макрос вызывается по своему имени. Чтобы выполнить макрос с именем mad, необходимо вста- вить в текст программы команду mad;. Макровызов не должен со- держать дополнительных операторов в строке вызова (т.е. инструк- ций, директив препроцессора или других макровключений). Аргументы макроса имеют форму записи: %п, где п = 0, 1,2.9; Следующий пример определяет макрос sum с тремя аргумента- ми: .MACRO sum(%0, %1, %2); 124
Глава 11. Директивы ассемблера В коде макроса аргументы маркируются служебными символами %1, %2, %3, и т.д. При вызове макроса служебные символы заме- щаются величинами аргументов, переданных в макрос. При вызове макроса ему должно быть передано правильное число аргументов. Допустимые передаваемые аргументы и исключения для них при- ведены в табл. 11.4. Таблица 11.4 Допустимые передаваемые в макрос аргументы и исключения для них Аргумент Исключение Константа или арифметическое выражение Нет Символы MACRO, ENDMACRO, CONST, INCLUDE Лбуфер Л%П % буфер %%n Операторы Л и % не могут быть использованы с аргументами, замещающими служебные символы в макроопределении. Тем не менее, аргументы, переданные в макрос, могут использовать эти операторы. Например: read_data (Ainput); Директива LOCAL Директива LOCAL задает программные метки, используемые в макросе. Данная директива указывает ассемблеру создавать уни- кальную версию метки при каждом включении макроса. Это предот- вращает ошибку дублирования меток в случае, когда макрос вызы- вается несколько раз в одном программном модуле. Директива имеет формат записи: .LOCAL метка"!, метка2,...; Ассемблер создает уникальные версии меток макроса, добавляя к ним номер. Это можно увидеть в файле листинга с расширением 1st. Помните, что для раскрытия макросов в листинге необходимо при запуске программы компилятора asm21 добавить ключ -гл. Ниже приведен простейший пример макроса, позволяющий вставить в любое место программы несколько пустых команд пор. .MACRO nops; 125
Часть II. Программирование пор; пор; пор; пор; пор; пор; .ENDMACRO; Вызов данного макроса в программе осуществляется командой nops;. Следующий пример показывает, как создать макрос wait с одним параметром и одной локальной меткой. MACRO wait(%0); local loop; cntr=%0; do loop until ce; loop: nop; ENDMACRO; Этот макрос позволяет организовать в программе функцию за- держки на 100 циклов лаконичной записью: wait(100); Естественно, что вместо числа 100 можно вписывать любое число в разрешенном диапазоне для счетчика циклов. Ниже приведен пример макроса, реализующий подпрограмму, которая переносит содержимое буфера данных из одной области памяти в другую. .MACRO mem_trans (%0, %1, %2, %3, %4) {Использует 5 аргумен- тов} .LOCAL trans; 14=%0; {Установить I4 как адрес источника} 15=% 1; {Установить I5 как адрес приемника} М4=1 {Установить указатель на инкремент 1} CNTR=%2 {Установить длину буфера} DO trans UNTIL СЕ; {Перенос данных} si=%3(l4, М4) {Перенос данных из типа %3 памяти} trans: %4(I5, M4)=si; {В тип %4 памяти} .ENDMACRO Пример вызова этого макроса в программе может быть таким: mem_trans (Atabl_coef, Abuf, %buf, PM, DM); Здесь в качестве аргументов в макрос передаются адреса буферов tabl_coef и but, длина буфера but и тип памяти. Заметьте, что зарезер- вированные ключевые слова РМ и DM переданы как аргументы. 126
Гпава 11. Директивы ассемблера Несколько следующих директив определяют формат файла лис- тинга. Файл листинга с расширением 1st позволяет представить ре- зультаты процесса ассемблирования. Ниже показан пример файла листинга простейшей программы. В этом файле используются сле- дующие информационные поля: addr - смещение от базового адреса модуля; inst - код операции; source line - номер строки исходного файла и код. Release 5.11 Assembler Version 1.34s 9/19/95 D:\TEMA\IKS\PROG\TEST.DSP\DOS.dsp Mon Jun 21 17:07:36 2004 Page 1 addr inst source line 1 .module/RAM/ABS=0 example; 2 .PAGEWIDTH 70; 3 (Описание переменных} 4 .var/dm flag; 5 б {Инициализация переменных} 7 .init flag: OxOOOf; 8 9 again: 0000 02010F 10 toggle FL1; /* Инвертировать флаг */ 0001 18000Fu 11 jump again; /* Зациклить */ 12 .endmod; Каждая строка в листинге этой программы имеет свой номер. При обнаружении ошибки в какой-либо строке программы компиля- тор выдает именно этот номер строки. Символ еие в поле inst пока- зывает, что код операции содержит адрес перехода. Существует пять директив ассемблера для формирования вы- ходного файла листинга. Директива NEWPAGE Директива NEWPAGE вставляет разделители страниц. После та- кой директивы листинг программы продолжится с новой страницы. Данная директива, как и последующие, применяется для выделения программных фрагментов и оформления листинга программы. Пример ее использования: .NEWPAGE; Директива PAGELENTH Директива PAGELENTH регулярно вставляет разделитель стра- ниц после указанного количества строк. Формат ее записи: 127
Часть II. Программирование .PAGELENGTH число_строк; Директива LEFTMARGIN Директива LEFTMARGIN оставляет левое поле с указанным числом столбцов (знакомест символов). Формат ее записи: .LEFTMARGIN число_столбцов; Директива INDENT Директива INDENT осуществляет отступ строк программы в ис- ходном коде с указанным числом столбцов. Формат ее записи: .INDENT число_столбцов; Директива PAGEWIDTH Директива PAGEWIDTH определяет ширину строк листинга с указанным числом столбцов. Формат ее записи: .PAGEWIDTH число_столбцов; Директивы NEWPAGE и PAGELENGTH могут быть использова- ны для нумерации страниц, в то время как директивы LEFTMARGIN, INDENT и PAGEWIDTH используются для того, что- бы сделать каждую страницу удобной для чтения. Эти директивы могут быть помещены в любом месте исходного файла. Директива ENDMOD Директива ENDMOD указывает на завершение программного модуля. Программа ассемблера останавливается, когда достигает директивы ENDMOD. Формат ее записи: .ENDMOD; 128
Глава 12. Форматы данных В этой главе говорится о форматах представления данных в сигнальном процессоре при выполнении вычислительных опе- раций. Сигнальные процессоры используются в основном для цифро- вой обработки сигналов. Поэтому в программах для них часто ис- пользуются арифметические команды для математической обра- ботки чисел. Поскольку все данные в процессоре представлены в двоичном формате, в нем используется двоичная арифметика. Для лучшего понимания операций, выполняемых над числами в двоич- ной арифметике, необходимо хорошо представлять форматы дан- ных этих чисел и приемы, используемые в двоичной арифметике. С форматом представления данных в процессоре тесно связаны такие понятия, как целочисленная и плавающая арифметика. Дру- гими словами, арифметические операции, выполняемые процессо- ром, могут производиться с целыми или с вещественными числами. Известно, что вещественные числа имеют целую и дробную части, отделяемые друг от друга запятой. Если запятая не меняет своего положения в формате представления чисел при выполнении арифметических операций, говорят, что данные представлены в формате с фиксированной запятой. Например: 7,4 х 0,5 = 3,7. Здесь положение запятой фиксировано как для операндов, так и для ре- зультата. Недостатком такого представления является небольшой диапазон обрабатываемых чисел, определяемый количеством раз- рядов шины данных. Другим форматом представления данных мо- жет служить формат с плавающей запятой, где используется пока- затель степени. Например: 1,8x103:2,0x102=9,0x10°. Здесь сущест- венно расширяется диапазон обрабатываемых чисел за счет вве- дения показателя степени, но снижается точность результата. Аппаратное обеспечение процессоров семейства ADSP-21XX поддерживает 16-разрядные данные с фиксированной точкой. Тем не менее, вычислительные устройства этих процессоров обладают особыми характеристиками, которые позволяют работать с другими форматами за счет соответствующего использования программных средств. Позже будет показано, как с помощью программных 129
Часть II. Программирование средств можно реализовать операции с блоками чисел в формате с плавающей точкой. Вспомним форматы представления данных в двоичной арифме- тике. Формат представления двоичного числа обычно включает в себя знак, запятую и величину. Знак показывает, является число положительным или отрицательным. Запятая отделяет целую и дробную части числа. Знак двоичного числа может быть представлен одним битом. Как правило, ноль указывает на положительное значение числа, а еди- ница на отрицательное его значение. Знаковый бит обычно крайний левый бит (старший бит). Как известно, в двоичной арифметике операция вычитания за- меняется сложением чисел, представленных в дополнительном коде. Положительные числа не требуется переводить в дополни- тельный код. Отрицательные числа в дополнительном коде изме- няют свою запись. Существует несколько форматов представления отрицательных чисел в дополнительном коде. Наиболее распространенным мето- дом является дополнение до двух, который используется в семей- стве процессоров ADSP-21XX. Преимущество формата дополнения до двух состоит в том, что он обеспечивает уникальное представление нулевого значения числа, в то время как другие форматы имеют разные представле- ния отрицательного и положительного нуля. В формате дополнения до двух ноль считается положительным, поэтому абсолютная вели- чина максимального отрицательного числа, которое может быть представлено определенным количеством двоичных разрядов, больше на единицу, чем величина наибольшего положительного числа. С помощью п бит в дополнительном коде можно представлять диапазон чисел от -2П’1 до 2п’1-1, где п-1 разрядов отводится под величину, а 1 разряд под знак числа. Например, с помощью 16-разрядной шины данных в дополнительном коде можно пред- ставить числа в диапазоне от -32768 до 32767. Существует два способа перевода отрицательного числа в фор- мат дополнения до двух. Первый способ состоит из инвертирова- ния всех разрядов числа и прибавления к нему единицы. Второй способ заключается в инвертировании всех разрядов числа левее младшего единичного разряда. Положительные числа не требуется переводить в дополнительный код. Ниже приведен пример перево- да отрицательного 16-разрядного числа -5 по первому способу: 130
Гпава 12. Форматы данных Двоичная запись числа 5:0000 0000 0000 0101 Инверсия бит: 1111 1111 1111 1010 Добавление 1: 0000 0000 0000 0001 Результат=-5: 1111 1111 1111 1011. Пример перевода отрицательного числа -5 по второму способу: Двоичная запись числа 5:0000 0000 0000 0101 Инверсия бит: 1111 1111 1111 1011 Результат=-5: 1111 1111 1111 1011. Если сложить число -5 в дополнительном коде с числом 6, получим: Число -5: 1111 1111 1111 1011 Число 6: 0000 0000 0000 ОНО Число 1: 0000 0000 0000 0001. Как видим, результат получился верным. При записи числа в дробном формате предполагается, что запя- тая размещается между какими-то определенными двоичными раз- рядами в числе. Биты слева от запятой представляют целую часть числа, а биты справа от запятой дробную часть числа. Существует два способа указания местоположения запятой, в формате с фик- сированной точкой и в формате с плавающей точкой. Формат с фиксированной точкой располагает запятую в одном, предопределенном месте. Часто это местоположение слева от всех разрядов числа, когда все разряды отводятся под дробную часть, или справа от всех разрядов, когда все разряды отводятся под це- лую часть. Местоположение запятой устанавливается программ- ным способом. Некоторые арифметические операции, например умножение, могут изменять позицию запятой, поэтому может пона- добиться сдвиг, чтобы сохранить число в том же формате с фикси- рованной точкой. Формат с плавающей точкой состоит из двух частей, которые представляют значение мантиссы и экспоненты числа. Экспонента указывает местоположение запятой. Она может храниться вместе с мантиссой или в отдельном регистре. Семейство процессоров ADSP-21XX поддерживают операции с числами в формате с фиксированной точкой. В настоящем изложе- нии при указании формата числа используется запись L.R, где L - число двоичных разрядов слева от запятой, a R - число разрядов справа от запятой. Например, формат записи 1.15 указывает на то, 131
Часть II. Программирование что дробное число имеет один знаковый разряд и 15 разрядов для представления величины дробной части. Целое число имеет для такого представления формат записи 16.0. Для большинства при- ложений обработки сигналов предполагается использование дроб- ных чисел в формате 1.15, поскольку умножитель и делитель про- цессора ADSP-2181 оптимизированы для операций с числами именно в таком формате. Ассемблер ADSP-21XX поддерживает четыре формата пред- ставления данных при вычислениях. Формат представления дан- ных имеет следующие условные названия: двоичная строка, двоич- ные числа без знака, знаковые числа в дополнительном коде и дробное представление. Двоичная строка является самым простым форматом представ- ления чисел в процессорах семейства ADSP-21XX. Этот формат используется при выполнении элементарных логических операций типа NOT, OR, AND и XOR. Ниже приведены весовые значения би- тов для этого формата записи. 2^ 2^ 211 2^ 29 28 2? 28 28 2^ 28 2^ 2^ 29 Под двоичными числами без знака понимаются положительные числа. Диапазон их представления в процессоре в два раза больше чем у чисел со знаком, за счет самого знакового разряда. Фактиче- ски они выглядят так же, как двоичная строка. Знаковые числа можно отнести к числам в дополнительном ко- де. Большинство операций процессора поддерживают работу с числами в дополнительном коде. Процессоры семейства ADSP- 21XX не поддерживают работу с остатками и числами в двоично- десятичном формате BCD (Binary Coded Decimal), когда каждая де- сятичная цифра представляется 4-битным двоичным позиционным кодом. Ниже приведены весовые значения битов для этого форма- та знаковых чисел. _2^ 2^ 213 2^ 211 2^ 29 28 2^ 28 28 2^ 23 2^ 2^ 29 Дробное представление чисел имеет формат записи 1.15. Это означает, что 16-разрядное число имеет один знаковый разряд и пятнадцать дробных битов. Ниже представлены весовые значения битов в формате 1.15. _2^ 2-1 2"~2-3 2”4 2~5 2~8 2—8 2~9 2~^ 2—2—2—2—2— Для вычисления числа, записанного в этом формате, необходи- мо подставить вместо цифры 2 значение соответствующего разря- 132
Гпава 12. Форматы данных да (0 или 1) и сложить все полученные значения. В табл. 12.1 при- ведены примеры соответствия чисел записанных в шестнадцате- ричном виде формата 1.15 их десятичным значениям. Таблица 12.1 Примеры соответствия чисел, записанных в шестнадцатеричном виде формата 1.15, их десятичным значениям Число в формате 1.15 Число в HEX формате Десятичное значение 0000 0000 0000 0000 0x0000 +0 0000 0000 0000 0001 0x0001 +0,000030517578125 0000 0000 0000 0010 0x0002 +0,00006103515625 1000 0000 0000 0000 0x8000 -1,000000 0111 1111 1111 1111 0X7FFF +0,999969482421875 1111 1111 1111 1111 OxFFFF -0,000030517578125 Как видно из таблицы, самый младший разряд эквивалентен десятичному значению 0,000030517578125. Это значение и опре- деляет точность представления всех чисел в данном формате. Для достижения большей точности необходимо расширять разрядность числа, например программным образом размещая число в два или три 16-разрядных регистра. Аналогично можно увеличить и диапа- зон обрабатываемых чисел. В табл. 12.2 приведены все возможные варианты форматов для 16-разрядного числа. Эта таблица дает наглядное представле- ние о том, как изменяется, в зависимости от формата, диапазон представляемых чисел и их точность. Из таблицы видно, что чем больше двоичных разрядов отводит- ся под целую часть числа, тем больший диапазон чисел можно ох- ватить с помощью такого формата. Однако при этом снижается точность представления числа, т.е. его дробная часть сводится к нулю. И наоборот, чем больше двоичных разрядов отводится под дробную часть числа, тем меньший диапазон чисел можно охватить с помощью такого формата. Но при этом увеличивается точность представления числа, т.е. его дробная часть может быть очень ма- лой величиной, составляющей менее одной миллиардной доли единицы. В зависимости от типа решаемой задачи программист сам опре- деляет, какой именно формат лучше использовать. 133
134 Таблица 12.2 Возможные варианты форматов для 16-разрядного числа Фор- мат Количество целых разрядов Количество дробных разрядов Максимальное положительное значение Максимальное от- рицательное зна- чение Вес младшего разряда 1.15 1 15 0,999969482421875 -1,0 0.000030517578125 2.14 2 14 1,999938964843750 -2,0 0.000061035156250 3.13 3 13 3,999877929687500 -4,0 0.000122070312500 4.12 4 12 7,999755859375000 -8,0 0.000244140625000 5.11 5 11 15,999511718750000 -16,0 0.000488281250000 6.10 6 10 31,999023437500000 -32,0 0.000976562500000 7.9 7 9 63,998046875000000 -64,0 0.001953125000000 8.8 8 8 127,996093750000000 -128,0 0.003906250000000 9.7 9 7 255,992187500000000 -256,0 0.007812500000000 10.6 10 6 511,984375000000000 -512,0 0.015625000000000 11.5 11 5 1023,968750000000000 -1024,0 0.031250000000000 12.4 12 4 2047,937500000000000 -2 048,0 0.062500000000000 13.3 13 3 4095,875000000000000 -4096,0 0.125000000000000 14.2 14 2 8191,750000000000000 -8192,0 0.250000000000000 15.1 15 1 16383,500000000000000 -16384,0 0.500000000000000 16.0 16 0 32767,000000000000000 -32768,0 1.000000000000000 Часть II. Программирование
Глава 13. Система команд В этой главе начинается изложение системы команд сигналь- ного процессора. Сигнальные процессоры семейства ADSP-21XX используют единую систему команд для совместимости с устройствами с более высокой интеграцией. Процессоры ADSP-2181 имеют ряд дополни- тельных команд. Каждая команда может быть выполнена в процес- соре за один такт. Кроме того, система команд процессора позво- ляет выполнять за один такт многофункциональные команды. Как было сказано ранее, язык ассемблер семейства ADSP-21XX ис- пользует высокоуровневый алгебраический синтаксис записи ко- манд, что облегчает их понимание и запоминание. Операнды ис- точника и приемника команды явно присутствуют в ее записи в виде мнемоники. Мнемоника основных регистров процессора с описани- ем их назначения приводится в табл.13.1. Таблица 13.1 Мнемоника основных регистров процессора с описанием их назначения Мнемоника Определение АХО, АХ1, AYO, AY1 Входные регистры АЛУ AR Регистр результата АЛУ AF Регистр обратной связи АЛУ МХО, МХ1, MYO, MY1 Входные регистры умножителя МАС MRO, MR1, MR2 Регистры результата умножителя MF Регистр обратной связи умножителя SI Входной регистр устройства сдвига Shifter SE Регистр экспоненты устройства сдвига SRO, SR1 Регистры результата устройства сдвига SB Регистр блочного сдвига (используется в блоч- ных операциях с плавающей точкой) 135
Часть II. Программирование Мнемоника Определение РХ Регистр шинного обмена памяти программ РМ с памятью данных DM I0-I7 Индексные регистры генераторов адреса DAG М0-М7 Регистры модификации DAG L0-L7 Регистры длины DAG (для циклических буфе- ров) PC Программный счетчик CNTR Счетчик циклов ASTAT Регистр арифметического статуса MSTAT Регистр статуса режима SSTAT Регистр статуса стека IMASK Регистр маски прерываний ICNTL Регистр режимов управления прерываниями RXO, RX1 Регистры приема данных последовательных портов SPORT ТХО, ТХ1 Регистры передачи данных последовательных портов SPORT Набор команд ADSP-2181 совместим вверх с набором команд ADSP-21XX, поэтому, программы, написанные для ADSP-21XX, мо- гут выполняться на ADSP-2181 с минимальными изменениями. Процессор ADSP-2181 имеет ряд дополнительных команд. Каждая команда может быть выполнена отдельно в своем такте. Кроме то- го, система команд позволяет выполнять за один такт процессора многофункциональные команды. Язык ассемблера позволяет использовать в командах арифме- тические или логические выражения. Список этих выражений и вы- полняемых с их помощью действий приведен в табл. 13.2. Таблица 13.2 Список арифметических или логических выражений и выполняемых с их помощью действий Выражение Действие = Присвоение + Сложение 136
Гпава 13. Система команд Выражение Действие - Вычитание * Умножение AND Логическое еИе OR Логическое еИЛИе NOT Логическое отрицание XOR Исключающее еИЛИе PASS Пересылка ABS Абсолютное значение Ниже приведены примеры записи некоторых команд языка ас- семблера ADSP-21XX с объяснением их назначения. DM(var1) = АХО; Эта команда, знакомая читателям из предыдущих примеров про- грамм, присваивает (записывает) значение регистра АХО перемен- ной var1, хранящейся в памяти данных. MR = MR + MX1*MY1; Данная команда выполняет операцию умножения и сложения. Он умножает входные значения из регистров МХ1 и MY1, склады- вает результат умножения с текущим содержимым регистра MR (результат предыдущего умножения), а затем записывает результат в регистр MR. При рассмотрении системы команд мы будем пользоваться ус- ловными обозначениями, приведенными в табл. 13.3. Эти обозна- чения позволяют сделать описание команд компактным. Таблица 13.3 Условные обозначения системы команд Обозначение Описание I0-I7 Индексные регистры DAG для косвенной адреса- ции М0-М7 Регистры модификации DAG для косвенной адре- сации L0-L7 Регистры длины DAG для циклических буферов 137
Часть II. Программирование Обозначение Описание <data> Непосредственное значение данных <addr> Непосредственное значение адреса (абсолютный адрес или программная метка) <ехр> Порядок (значение сдвига) в командах непосред- ственного сдвига (8-разрядное знаковое число) cond Код условия в условных командах term Код условия выхода из цикла DO UNTIL dreg Регистры данных (АЛУ, умножителя-накопителя или устройства сдвига) reg Любой регистр (включая регистры данных edrege) Точка с запятой, разделитель команд Запятая, разделитель нескольких операций в од- ной команде [] Квадратные скобки, содержащие дополнитель- ные, необязательные части команд [....] Запись нескольких операций или команд в любом порядке, разделенных запятыми |опция11 |опция2| |опцияЗ| Список опций (в команде выбирается одна из оп- ций) хор Операнд «х» уор Операнд «у» constant Операнд - константа В табл. 13.4 приведен список регистров, допустимых к использо- ванию в командах пересылки и многофункциональных командах. Таблица 13.4 Список регистров допустимых к использованию в командах пересылки и многофункциональных командах Регистр Примечание Регистры данных <dreg> АХО, АХ1, AYO, AY1 - AR - 138
Гпава 13. Система команд Регистр Примечание МХО, МХ1, MYO, MY1 - MRO, MR1, MR2 - SI, SE, SRO, SR1 - Остальные регистры <reg> I0, И, I2, I3, I4, I5, I6, I7 - МО, М1, М2, М3, М4, М5, Мб, М7 - LO, L1, L2, L3, L4, L5, L6, L7 - ТХО, ТХ1, RXO, RX1 - SB, РХ - ASTAT, MSTAT - SSTAT Только чтение IMASK, ICNTL — IFC Только запись CNTR - OWRCNTR Только запись Следует обратить внимание на то, что регистры <dreg> являют- ся подмножеством регистров <reg>, поэтому их можно применять в командах, где используется условное сокращение <reg>. Команда сложить или сложить с переносом, записанная с при- менением приведенных выше условных сокращений, будет выгля- деть следующим образом: [IF cond] | AR | = хор + | yop |; IAF| | C| I УОР + C | | constant | Она означает, что если условие cond предыдущей команды вы- полняется, то в регистр AR или AF будет занесен результат сложе- ния операнда хор с операндом уор или с переносом или с констан- той. Разрешенные операнды хор, уор и константы constant указы- ваются для группы команд индивидуально, поскольку они не всегда могут быть произвольными. Например, для команд АЛУ разрешено использовать в качестве операнда хор регистры: АХО, АХ1, AR, MRO, MR1, MR2, SRO, SR1. В качестве операнда уор допускается 139
Часть II. Программирование использование регистров: AYO, AY1 и AF. Причем команда DIVS не может использовать регистр AY0. Коды условий cond с описанием их назначения приведены в табл. 13.5. Таблица 13.5 Коды условий cond с описанием их назначения Код условия cond оператора IF Описание EQ Равно нулю NE He равно нулю LT Меньше нуля GE Больше или равно нулю LE Меньше или равно нулю GT Больше нуля AC Перенос АЛУ NOT AC Нет переноса АЛУ AV Переполнение АЛУ NOT AV Нет переполнения АЛУ MV Переполнение умножителя NOT MV Нет переполнения умножителя NEG Входной операнд хор отрицателен POS Входной операнд хор положителен NOTCE Счетчик циклов не пуст FLAG J N * Вывод FI = 1 NOT FLAGJN * Вывод FI = 0 * Только для команд JUMP и CALL. Таким образом, предыдущая запись означает, что команда сло- жения может быть записана в одном из следующих вариантов: IF EQ AR=AX0+AY1; IF EQ AR=AR+AY1+C; IF EQ AF=AX0+AY1; 140
Гпава 13. Система команд IFNE AF=AX0+AY1; AR=AXO+AF; и т.п. Обратите внимание на то, что оператор IF с кодом условия за- ключен в квадратные скобки, т.е. является не обязательным в ко- манде и может быть исключен из нее. При изучении системы команд мы подробнее познакомимся с вычислительными блоками процессора и форматом представления данных при выполнении различных арифметических и логических операций над ними. Это позволит лучше понять, каким образом вы- полняются те или иные действия в процессоре, и избежать тем са- мым неправильного применения команд при написании программы. Для завершения обзора команд сигнального процессора нам ос- тается рассмотреть многофункциональные команды и команды, которые нельзя отнести к какой-либо конкретной группе в силу того, что они выполняют различные функции. Здесь они будут называть- ся дополнительными командами. Многофункциональные команды В многофункциональных командах реализуются свойства па- раллелизма архитектуры процессоров ADSP2181. Благодаря чему становится возможным одновременное выполнение в одном цикле процессора пересылки данных, операций чтения/записи в память и вычислений. Рассмотрим многофункциональную команду выполнения опера- ций АЛУ и МАС с одновременным чтением операндов из памяти дан- ных и памяти программ. Пример такой команды приведен ниже: MR=MR+MX0*MY0(SS), MXO=DM(I3,MO), MYO=PM(I7,M4); В первой части этой команды в регистр MR (регистр результата МАС), записывается сумма его предыдущего значения и произве- дения текущих значений входных регистров умножителя МХО и MY0. Здесь оба слагаемых рассматриваются в знаковом формате. Вторая и третья части данной многофункциональной команды осуществляют выбор двух новых операндов. Один операнд выби- рается из памяти данных DM по адресу, указанному в индексном регистре I3, содержимое которого затем модифицируется с помо- щью значения регистра модификации МО. Второй операнд выбира- ется из памяти программы РМ по адресу, указанному в регистре I7 141
Часть II. Программирование содержимое которого затем модифицируется величиной, со- держащейся в регистре модификации М4. Значения индексов бе- рутся из регистров генераторов адреса данных. Любой индексный регистр I одного генератора адреса данных может использоваться в паре с любым регистром модификации М того же генератора ад- реса данных. Поскольку считывание данных из регистров процессора произ- водится в начале цикла, а запись в регистры - в конце цикла, опе- ранды, находящиеся в регистрах МХО и MY0 в начале командного цикла, перемножаются, а затем произведение добавляется к со- держимому регистра результата умножителя MR. После оконча- ния операции умножения операнды обновляются новыми значе- ниями, которые были выбраны в конце того же командного цикла и становятся доступными для вычислений с ними в следующем цикле. Естественно, что одновременно с вычислением можно за- грузить любой регистр данных, а не только регистры умножите- ля/накопителя, как в приведенном выше примере. Рассмотренная команда является, пожалуй, самой распростра- ненной в алгоритмах цифровой обработки сигналов операцией. Выполняется она следующим образом: • осуществляется выбор двух операндов (например, коэффици- ента и данных); • производится перемножение операндов и суммирование ре- зультата умножения с полученными до этого результатами. Вычислительной частью данной многофункциональной коман- ды может быть любая безусловно выполняемая команда АЛУ, за исключением деления, или любая команда умножителя, кроме на- сыщения. Имеются и некоторые другие исключения. Например, следующий операнд X должен загружаться в регистр МХО из памяти данных, а новый операнд Y должен загружаться в регистр MY0 из памяти программ (для команд данного уровня несущественно, из внутренней или из внешней памяти). Кроме того, результат вычисления должен записываться в регистр резуль- тата (MR или AR), ни в коем случае не в регистр обратной связи (MF или AF). Теперь рассмотрим команды одновременного чтения из памяти данных и памяти программ. Эти команды представляют собой разновидность описанного выше вида многофункциональных ко- манд. Их особенностью является отсутствие вычислений. Эти ко- манды задают только одновременную выборку двух операндов. Пример такой команды приведен ниже: 142
Гпава 13. Система команд AXO=DM(I2,MO), AYO=PM(I4,M6); В данном примере в качестве регистров-приемников использу- ются входные регистры АЛУ. Как и в предыдущем типе многофунк- циональных команд, здесь операнды X должны извлекаться из па- мяти данных, а операнды Y - из памяти программ (и в том и в дру- гом случае из внешней или из внутренней памяти процессоров с внутренней памятью на кристалле). Существуют многофункциональные команды выполнения вы- числений с одновременным считыванием из памяти. Если, в отли- чие от описанных выше многофункциональных команд, вместо двойного считывания из памяти, команда задает выполнение только одной операции считывания из одного типа памяти, то од- новременно с выборкой данных из памяти можно произвести раз- личного рода вычисления. К числу таких разрешенных вычисле- ний относятся все операции АЛУ, за исключением деления, все операции умножителя-накопителя МАС и все операции устройст- ва сдвига, за исключением непосредственного сдвига SHIFT IMMEDIATE. Все вычисления должны быть безусловными. Пример многофункциональной команды такого типа приведен ниже: AR=AX0+AY0, AXO=DM(IO,M3); В этом примере в АЛУ выполняется операция сложения, в то время как из памяти данных выбирается один операнд. Этот тип многофункциональных команд имеет те же ограничения, что и пре- дыдущий. Значение, хранящееся в регистре АХО и используемое как исходное в ходе вычислений, представляет собой содержимое этого регистра в начале цикла. В конце цикла в результате опера- ции считывания данных из памяти в регистр АХО загружается новое значение. По этой же причине регистром назначения (в этом при- мере AR) не может быть регистр, указанный в качестве регистра назначения при считывании данных из памяти. Следующий пример демонстрирует выполнение вычислений с од- новременной записью данных в память. Команда вычисления с од- новременной записью в память имеет ту же структуру, что и коман- да вычисления с одновременным считыванием из памяти. Однако порядок операторов в строке данной команды меняется на об- ратный. Сначала выполняется запись данных в память, а затем вычисление. Вот пример такой команды: DM(IO,MO)=AR, AR=AX0+AY0; 143
Часть II. Программирование В приведенном примере исходным значением для записи в память (значение, содержащееся в регистре AR) является значе- ние, хранящееся в этом регистре в начале цикла. В результате произведенного вычисления в этот же регистр загружается новое значение, которое является содержимым регистра AR в конце цикла. При постановке операторов данной команды в обратном порядке, что является неразрешенным действием, ассемблер ге- нерирует предупреждение, подразумевающее, что в память за- писывается результат вычисления, а не предыдущее значение ре- гистра, которое должно было записываться в память. Использова- ние при этом одного и того же регистра не является обязатель- ным, хотя именно таким образом чаще всего организуется кон- вейер операндов для вычисления. Для вычислительных операций с помощью таких команд действуют те же ограничения, что и для ко- манд, рассмотренных выше. Разрешенными являются все опера- ции АЛУ, кроме деления, все операции умножителя-накопителя МАС и все операции устройства сдвига, кроме непосредственного сдвига. Вычисления должны быть безусловными. Наконец, рассмотрим команды выполнения вычислений с одно- временной пересылкой данных между регистрами. Многофункцио- нальные команды этого последнего типа задают выполнение пересылки данных из одного регистра данных в другой с одно- временным выполнением какой-либо вычислительной операции. Большинство ограничений, рассмотренных для предыдущих типов многофункциональных команд, справедливо и для этих команд. Пример такой команды: AR=AX0+AY0, AX0=MR2; В данном примере операция сложения в АЛУ производится од- новременно с загрузкой в регистр АХО нового значения, взятого из регистра MR2. Как и в предыдущих примерах, для вычисления ис- пользуется значение, содержащееся в регистре АХО в начале цик- ла. Данные могут между всеми регистрами ввода или вывода АЛУ, умножителя-накопителя МАС и устройства сдвига, за исключением регистров обратной связи (AF и MF) и регистра SB. В рассмотрен- ном примере новое значение загружается в регистр АХО из регист- ра данных в конце цикла. Разрешенными являются все операции АЛУ, кроме деления, все операции умножителя-накопителя и все операции устройства сдвига, кроме непосредственного сдвига. Вы- числения должны быть безусловными. Ниже приводится полный список многофункциональных команд 144
Гпава 13. Система команд в соответствии с принятыми ранее условными обозначениями. На- значение команд приводится в тексте описания этих команд. Вычисление с пересылкой регистр-регистр: | <ALU> |, dreg = dreg; j <МАС>| |<SHIFT>| Вычисление с чтением из памяти: |<ALU>|,dreg = |DM( |IO|,|MO|)|; |<МАС>| ||11||М1|| |<SHIFT>| ||I2| |М2|| ||13| |МЗ|| ||14| |М4|| ||15| |М5|| ||16| |М6|| ||17| |М7|| |РМ ( |14|,|М4|)|; ||15| |М5|| ||16| |М6|| ||17| |М7|| Вычисление с записью в память: |DM( |IO|, |М0|) |=dreg, |<ALU> |; |11||М1| | |<МАС> | |12||М2| | |<SHIFT>| |I3||M3| | |I4||M4| | |15||М5| | |16||М6| | I |I7| |М7| | |РМ (|14|,|М4|) |; I |15| |М5| | I |16| |М6| | I Н7| |М7| | Чтение памяти данных и программ: | АХО |=DM(|IO|,|MO|),|AYO |=РМ( |I4|,|M4|); | АХ1 | |И||М1| |AY1 | |I5| |М5| 145
Часть II. Программирование | МХО | |I2| |М2| |MYO | |16||М6| | МХ1 | |I3| |МЗ| |MY1 | |17| |М7| Команда АЛУ или МАС с чтением памяти данных и программ: |<ALU> |, |АХ0 |=DM( |Ю|,|М0|), |AY0 |=PM( |I4|,|M4|); |<МАС>| |АХ1 | |11||М11 |AY1 I |I5| |M5| |МХ0| 12| |М2| |MY0 I |I6| |M6| |МХ11 |13| |МЗ| |MY1 I Fl |M7| В качестве регистров dreg могут быть использованы регистры: АХО, АХ1, AYO, AY1, AR, МХО, МХ1, MYO, MY1, MRO, MR1, MR2, SI, SE, SR0 и SR1. Примечания: < ALU>1 - любая команда АЛУ (исключая DIVS и DIVQ); < МАС>1 - любая команда умножителя/накопителя; < SHIFT>2 - любая команда устройства сдвига (исключая непо- средственный сдвиг); где 1 - должны использоваться только регистры результатов AR, MR, а не регистры обратных связей AF, MF; 2 - не могут быть ус- ловными командами. Дополнительные команды В системе команд сигнального процессора имеется несколько команд, которые нельзя отнести ни к одной из перечисленных ра- нее групп. Полный список этих команд в соответствии с принятыми ранее условными обозначениями приводится ниже. Пустая команда: NOP; Модифицировать регистр адреса: MODIFY(|IO|,|MO|); |11||М1| |12| |М2| |13| |МЗ| |14| |М4| |15| |М5| |16| |М6| |17| |М7| Управление стеками: 146
Гпава 13. Система команд [|PUSHI STS] [,РОР CNTR] [,РОР PC] [,РОР LOOP]; |РОР| Управление режимом: |ENA| |SEC_REG| [, ...]; |DIS | |BIT_REV| |AV_LATCH| |AR_SAT| |M_MODE| |TIMER| |G_MODE| |INTS| Ключевые слова означают следующие режимы: SEC_REG - фоновый регистровый файл; BIT_REV - бит-реверс адреса генератора DAG1; AV_LATCH - защелка статуса переполнения АЛУ (AV); AR_SAT - насыщение регистра AR; M_MODE - режим размещения результата МАС; TIMER - разрешить работу таймера; G_MODE - разрешить режим eGo modee; INTS - разрешить прерывания. NOP - это команда отсутствия операций. Она часто применя- ется для выполнения холостого цикла процессора в качестве за- держки на один такт. Команда MODIFY позволяет модифицировать указатель адреса в заданном регистре I на величину, которая содержится в задан- ном регистре М, не обращаясь при этом к памяти. Как и во всех других случаях, регистры I и М должны быть регистрами одного и того же генератора адреса данных; любой регистр 10-13 может ис- пользоваться в комбинации с любым регистром МО-МЗ, а любой ре- гистр 14-17 - с любым регистром М4-М7. Команды PUSH и POP позволяют непосредственно управлять содержимым стеков состояния, счетчика, счетчика программ (PC) и циклов. Некоторые из этих стеков автоматически заполняются и опустошаются во время обслуживания прерываний. Команды управления режимом разрешают и блокируют режимы некоторых операций процессора. Эта команды управляют режи- мами реверсной адресации в генераторе адреса данных 1, фикса- цией переполнения АЛУ, насыщением регистра результата АЛУ, 147
Часть II. Программирование выбором набора основных или теневых регистров, режимом GO для непрекращающейся работы процессора во время предос- тавления шины, режимом сдвига в умножителе для выполнения целочисленных или дробных вычислений и активизацией таймера. За операторами ENA или DIS может следовать через запятую сколько угодно идентификаторов. Команды ENA и DIS могут повто- ряться в командной строке. Кроме того, все семь режимов могут разрешаться, блокироваться или изменяться при помощи всего од- ной команды. 148
ЧАСТЬ III. ВЫЧИСЛИТЕЛЬНЫЕ И АППАРАТНЫЕ УСТРОЙСТВА В этой части книги говорится о вычислительных и ап- паратных устройствах сигнального процессора, к которым относятся арифметико-логическое устройство ALU, уст- ройство умножения МАС, устройство сдвига, устройство обмена между шинами, программный автомат, генераторы адресов, таймер и синхронные последовательные порты. Дается описание архитектуры этих устройств и выпол- няемых с их помощью команд. 149
Глава 14. Устройство ALU Назначение Как уже говорилось ранее, процессор ADSP-2181 содержит три независимых вычислительных устройства (рис. 14.1). К их числу относятся: арифметико-логическое устройство (ALU), умножитель с накопителем (МАС) и устройство сдвига (SHIFTER). Эти устройства работают с 16-разрядными данными и имеют аппаратную поддерж- ку обмена данными, позволяющую обеспечить многопоточность. Рис. 14.1. Процессор ADSP-2181 150
Глава 14. Устройство ALU Арифметико-логическое устройство выполняет ряд стандартных арифметических и логических команд. МАС выполняет одноцикловые операции умножения, умножения-сложения и умножения-вычитания. SHIFTER осуществляет логические и арифметические сдвиги, норма- лизацию, денормализацию и операцию получения порядка, а также управление форматом данных, разрешая работу с плавающей точкой. Вычислительные модули размещаются последовательно друг за другом таким образом, чтобы выход одного мог стать входом друго- го в следующем цикле. Результаты работы вычислительных уст- ройств собираются на 16-разрядную шину R-BUS. Все три устройства содержат входные и выходные регистры, ко- торые доступны через 16-разрядную шину данных. Команды, выпол- няемые в устройствах, берут в качестве операндов данные, находя- щиеся в регистрах ввода, и после выполнения операции записывают результат в регистры вывода. Регистры являются как бы промежу- точным хранилищем между памятью и вычислительной схемой. Ши- на R-BUS позволяет результату одного вычисления стать операндом для другой операции. Это экономит время благодаря исключению лишних пересылок данных между устройствами и памятью. Структура устройства ALU Рассмотрим подробнее АШ. Его структурная схема приведена на рис. 14.2. Арифметико-логическое устройство является 16-разрядным уст- ройством с двумя 16-разрядными входными портами данных X и Y и одним выходным портом результата R. ALU генерирует шесть сигна- лов состояния: ноль (AZ), негатив (AN), перенос (АС), переполнение (AV), знак (AS) и частное (AQ). В конце каждого цикла процессора эти сигналы сохраняются в регистре состояния процессора ASTАТ. Опи- сание назначения этих сигналов состояния приведено в табл. 14.1. Таблица 14.1 Описание назначения сигналов состояния Сиг- нал Расшифровка Назначение AZ ZERO (НОЛЬ) Разряд нулевого результата. Устанав- ливается в 1, если результат опера- ции равен нулю. Является результа- том логического сложения всех битов регистра результатов ALU 151
Часть III. Вычислительные и аппаратные устройства Сиг- нал Расшифровка Назначение AN NEGATIV (НЕГАТИВ) Знаковый разряд результата ALU. Устанавливается в 1, если результат отрицательный AV OVERFLOW (ПЕРЕПОЛНЕНИЕ) Разряд переполнения. Устанавлива- ется в 1, если происходит переполне- ние ALU путем переноса 1 в знаковый разряд при сложении чисел AC CARRY (ПЕРЕНОС) Разряд переноса. Устанавливается в 1 при сложении беззнаковых чи- сел, если происходит переполнение ALU путем переноса 1 из старшего разряда AS SIGN (ЗНАК) Знаковый разряд. Определяется при операции вычисления абсолютного значения числа ABS. Устанавливается в 1, если операнд имеет отрицатель- ное значение AQ QUOTIENT (ЧАСТНОЕ) Разряд состояния частного. Формиру- ется только командами DIVS и DIVQ Порт ввода X может принимать данные от двух источников: из блока регистров АХ или с шины результата R-BUS. Шина R-BUS обеспечивает обмен данными между всеми вычислительными уст- ройствами. Блок регистров АХ состоит из двух регистров: АХО и АХ1. Эти регистры подключены к шине памяти данных DMD-BUS. Система команд позволяет читать содержимое регистра АХ и на шину памяти программ PMD-BUS, для этого используется устройст- во обмена между шинами. Выводы регистров АХО и АХ1 реализо- ваны таким образом, чтобы один из них служил операндом для ALU, а другой в это время мог считываться на шину DMD-BUS. Порт ввода Y также принимает данные от двух источников: из блока регистров AY и регистра обратной связи AF. Блок регистров AY состоит из двух регистров AY0 и AY1. Эти регистры доступны для чтения и записи с шиной DMD-BUS. Система команд процессора по- зволяет читать регистры AY0 и AY1 с помощью шины PMD-BUS, но также с использованием устройства обмена между шинами. Выводы регистров AY0 и AY1 реализованы аналогично регистрам АХО и АХ1. 152
Глава 14. Устройство ALU Рис. 14.2. Структурная схема ALL) Выход ALU подключен к выходному регистру результата AR и через регистр обратной связи AF на вход ALU через мультиплексор. Регистр AF позволяет результату вычисления использоваться в ка- честве следующего операнда. Регистр AR имеет выход на шину 153
Часть III. Вычислительные и аппаратные устройства DMD-BUS и R-BUS. В системе команд предусмотрена возможность чтения регистра AR посредством шины PMD-BUS аналогично двум предыдущим вариантам. Любой из регистров ALU доступен для записи и чтения в течение цикла процессора (для чтения - в начале цикла, и для записи - в конце процессорного цикла). Таким образом, новое значение, запи- санное в конце одного цикла, может быть прочитано лишь в начале следующего. Это позволяет входным регистрам записать в ALU операнд в начале цикла и считать следующий операнд в конце того же цикла. Это также позволяет сохранить содержимое регистра ре- зультата в памяти и оперировать со следующим результатом в од- ном цикле. Арифметико-логическое устройство имеет альтернативные (те- невые) банки регистров АХ, AY, AF и AR. На структурной схеме они изображены в виде теней. В конкретный момент времени доступен только один из типов банков. Дополнительный банк может быть использован для автоматического сохранения данных в регистрах ALU при быстром переключении на выполнение подпрограммы. В этом случае экономится время на сохранение текущих данных в памяти процессора. Выбор главного или альтернативного банка регистров опреде- ляется битом 0 регистра режимов процессора MSTAT. Если этот разряд равен 0, то выбран главный банк, если он равен 1, то выби- рается дополнительный банк. Арифметико-логическое устройство выполняет набор стандарт- ных арифметических и логических операций. Из арифметических операций АЛУ выполняет сложение, вычитание, отрицание, инкре- мент, декремент и вычисление модуля. Эти операции дополнены двумя примитивами деления, с помощью которых возможна реали- зация цикла многократного деления. Из логических операций АЛУ выполняет логическое сложение (OR), логическое умножение (AND), исключающее ИЛИ (XOR), и логическое отрицание (NOT). Стандартные операции АШ приведены в табл. 14.2. В качестве условных записей операндов X, Y и R ALU, указанных в табл. 14.2, могут выступать следующие регистры: -для X: АХО, АХ1, AR, MRO, MR1, MR2, SRO, SR1; -для Y: AYO, AY1, AF; -для R: AR и AF. Регистры MRO, MR1, MR2 принадлежат умножителю МАС, а ре- гистры SRO, SR1 устройству сдвига Shifter. Они доступны ALU по шине данных. 154
Гпава 14. Устройство ALU Таблица 14.2 Стандартные операции ALU Операция Назначение R=X+Y Сложение операндов X и Y R=X+Y+CI Сложение операндов X и Y с переносом R=X-Y Вычитание операнда Y из X R=Y-X Вычитание операнда X из Y R=X-Y+CI-1 Вычитание операнда Y из X с заемом R=Y-X+CI-1 Вычитание операнда X из Y с заемом R=-X Инверсия операнда X R=-Y Инверсия операнда Y R=X+1 Инкремент операнда X R=Y+1 Инкремент операнда Y R=X-1 Декремент операнда X R=Y-1 Декремент операнда Y R=PASSX Результат равен операнду X с установкой флагов регистра статуса ASTAT R=PASSY Результат равен операнду Y с установкой флагов регистра статуса ASTAT R=0 Очистка результата R=ABSX Результат равен абсолютному значению операнда X (значение по модулю) R=X AND Y Логическое умножение операндов X и Y R=X OR Y Логическое сложение операндов X и Y R=X XOR Y Исключающее «ИЛИ» операндов X и Y R=NOTX Логическое отрицание X R=NOT Y Логическое отрицание Y 155
Часть III. Вычислительные и аппаратные устройства С целью обработки чисел с повышенной точностью, в ALU ис- пользуются сигнал переноса Cl (carry-in) и бит переноса AC (ALU carry). Операция сложения с переносом предназначена для сложе- ния старших частей чисел, а операция вычитания с заемом - для их вычитания. Регистр AR может работать в режиме насыщения. В этом режи- ме он принимает максимально возможное отрицательное или по- ложительное значение, если операция заканчивается переполне- нием. Эта функция регистра AR становится возможной при уста- новке в единицу разряда 3 регистра MSTAT. В табл. 14.3 показано содержимое регистра AR ALU в зависимости от флагов регистра состояния ASTAT при включенном, с помощью регистра MSTAT, режиме насыщения. Таблица 14.3 Содержимое регистра AR ALU в зависимости от флагов регистра состояния AV (перепол- нение) АС (перенос) Содержимое AR 0 0 В соответствии с результатом ALU 0 1 В соответствии с результатом ALU 1 0 0111111111111111 (максимально положительное число) 1 1 1000000000000000 (минимально отрицательное число) Режим блокировки переполнения ALU разрешается при установ- ке в единицу бита 2 регистра MSTAT. В этом режиме при перепол- нении ALU разряд AV устанавливается в единицу и при последую- щих операциях остается в этом состоянии. Таким образом, после- дующее переполнения уже не генерируются. Бит состояния AV можно очистить непосредственно с DMD шины путем записи в ре- гистр состояния ASTАТ нуля. Арифметико-логическое устройство поддерживает операции де- ления. Деление осуществляется путем сложения и циклического сдвига чисел с помощью двух специальных примитивов деления DIVS и DIVQ. Команда DIVS вычисляет знаковый бит частного, а DIVQ вычисляет один бит частного. Данные команды применяются для деления знаковых или беззнаковых чисел. Алгоритм деления выполняет либо сложение, либо вычитание, основываясь на знаках 156
Гпава 14. Устройство ALU делителя и частичного остатка. Остаток при этих операциях недос- тупен. При этом делитель и делимое должны быть одного типа. Обычная точность деления для 32-разрядного делимого, 16- разрядного делителя и 16-разрядного остатка реализуется за 16 циклов. Делитель может быть сохранен в регистре АХО, АХ1 или в любом регистре результатов R. Старший байт знакового делителя должен находиться либо в регистре AY1, либо в AF, а беззнакового делителя - в регистре AF. Младший байт делителя любого типа должен находиться в AY0. Остаток после деления будет записан в регистр AY0. Первый из двух примитивов - это команда DIVS (деление-знак). Она предназначена для деления чисел со знаком. Структура опе- рации DIVS показана на рис. 14.3. Данная операция вычисляет знаковый бит остатка, выполняя операцию «ИСКЛЮЧАЮЩЕЕ ИЛИ» для знаковых разрядов делите- ля и делимого. Регистр AY0 сдвигается на одну позицию таким образом, чтобы знаковый разряд переместился в позицию LSB. Вычисленный зна- ковый разряд сохраняется в бит AQ регистра состояния. При деле- нии чисел без знака операция DIVS не применяется. В этом случае бит AQ устанавливается в 0. Он показывает, что остаток должен быть положительным. 15 15 младших бит Рис. 14.3. Структура операции DIVS 157
Часть III. Вычислительные и аппаратные устройства Второй примитив деления - это команда DIVQ (деление- частное), которая выполняется многократно и генерирует по одному биту частного после очередного выполнения. При простой точности деления чисел без знака команда DIVQ выполняется 16 раз, для такой же точности деления чисел со знаком операция выполняется 15 раз после вычисления знакового разряда с помощью команды DIVS. Операция DIVQ проиллюстрирована на рис. 14.4. DIVQ сдви- гает регистр AY0 влево на один разряд так, чтобы новый бит част- ного оказался в позиции младшего разряда (LSB). Состояние бита AQ, которое генерируется предыдущей операцией, определяет операцию ALU для вычисления частичного результата. Если AQ=1, то ALU добавляет делитель к частичному результату в AF. Если AQ=0, то ALU вычитает делитель из частичного результата в AF. Так же как и в операции DIVS, ALU выводит результат в регистр AF. Формат результата при любом числовом представлении определя- ется форматом делителя и делимого. Пусть NL - число разрядов влево и NR - число разрядов вправо от двоичной точки делимого, DL и DR - соответственно то же самое, толь- ко для делителя. Тогда частное состоит из NL - DL + 1 битов слева от двоичной точки и содержит NR - DR - 1 битов справа. Ниже показан пример формата чисел при выполнении операции деления. 15 15 младших бит Рис. 14.4. Операция DIVQ 158
Глава 14. Устройство ALU Делимое: ХХХХХ.ХХХХХХХХХХХХХХХХХХХХХХХХХХХХ NL=56ht NR=276ht Делитель: ХХ.ХХХХХХХХХХХХХХ DL=26ht DR=146ht Частное: ХХХХ.ХХХХХХХХХХХХ (NL-DL+1)=46ht (NR-DR-1)=126ht Иногда необходимо некоторое изменение формата делимого и делителя. Например, если оба операнда знаковые и дробные (де- лимое в формате 1.31, а делитель в формате 1.15), то результат запишется в формате 1.15. Таким образом, для получения пра- вильного результата операции деления необходимо, чтобы дели- мое было меньше делителя. Чтобы разделить два целых числа (делимое в формате 32, а делитель в формате 16), необходимо перед делением привести делимое к формату 31, т.е. сдвинуть его влево на один разряд. Ес- ли результат не может быть представлен в формате частного, как сказано выше, или когда делитель равен нулю или меньше делимо- го по абсолютному значению, происходит переполнение. При реализации алгоритма деления для знаковых операндов делитель должен храниться в АХО и АХ1 или в любом регистре с шины R. Старшее слово делимого может быть загружено в AY1 или AF, и младшее слово делимого загружается в AY0. Чтобы вычис- лить частное, сначала выполняется команда DIVS, которая вычис- ляет знак частного, за которой следуют 15 команд DIVQ, для вы- числения 15 бит частного. Пример подпрограммы знакового деле- ния с фиксированной точкой показан ниже. Эта подпрограмма бе- рет делитель из регистра АХО, старшее слово делимого из AF и младшее слово делимого из AY0. Частное возвращается в AY0. .MODULE Sig_Div_FP; { Входные данные: AF = старшее слово делимого AY0 - младшее слово делимого АХО = 16-битный делитель Выходные данные: AY0 = 16-битный результат Изменяемые регистры: AYO, AF Время вычислениям 7 циклов } .ENTRY sdivfp; sdivfp: DIVS AF, AXO; {Вычисление знакового бита} 159
Часть III. Вычислительные и аппаратные устройства DIVQ АХО; DIVQ АХО; DIVQ АХО; {Вычисление 15 бит частного} DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; DIVQ АХО; RTS; .ENDMOD; Ниже приводится полный список команд ALU в соответствии с принятыми ранее условными сокращениями. Назначение команд очевидно из их записи и комментариев для некоторых из команд. Команды сложения и сложения с переносом: [IF cond] |AR| = хор + |уор |; |AF| |С | |уор + С | jconstant | Команды вычитания и вычитания с займом: [IF cond] |AR| = хор - |yop |; |AF| |yop+C-1 | jconstant j [IF cond] |AR| = yop - |xop |; |AF| |xop+C-1 | jconstant j Команды логических операций И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ: [IF cond] |AR| = хор |AND | уор; |AF| |OR | |XOR | Команды передачи: [IF cond] |AR| = PASS|xop |; |AF| |yop | jconstant j Команды смены знака: [IF cond] |AR| = - |xop |; |AF| |yop | Команды логического отрицания HE: [IF cond] |AR| = NOT |xop j; |AF| |yop | |0 | 160
Гпава 14. Устройство ALU Команды вычисления абсолютного значения: [IF cond] |AR| = ABS |хор |; |AF| Команды инкремента: [IF cond] |AR| = |уор+1 |; |AF| Команды декремента: [IF cond] |AR| = |yop-1 |; |AF| Команды битовых операций: [IF cond] |AR| = |TSTBIT n xop|; {операция логического «И» разряда n с 1} |SETBIT n xop|; {операция установки разряда п в 1} |CLBIT n xop|; {операция установки разряда п в 0} |TGBIT n xop|; {операция «ИСКЛЮЧАЮЩЕЕ ИЛИ» бита п с 1} Здесь п могут принимать значения от 0 до 15 Команды поразрядного деления: [IF cond] |AR| = DIVS уор, хор; [IF cond] |AR| = DIVQ xop; Команды тестирования результата: NONE = <ALU>; Последняя команда выполняет заданную команду АЛУ, устанав- ливает флаги и сбрасывает значение результата. Она позволяет тестировать значения в регистрах без изменения содержимого AR или AF. Строка <ALU> - это любая безусловная команда АЛУ, кро- ме DIVS, DIVQ и дополнительных команд АЛУ с константами. Для всех приведенных выше команд ALU разрешено использо- вать следующие операнды: хор: АХО, АХ1, AR, MRO, MR1, MR2, SRO, SR1; уор: AYO, AY1, AF; constant: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32767, -2, -3, -5, -9, -17, -33, -65, -129, -257, -513, -1025, -2049, -4097, -8193, -16385, -32768. Команда DIVS не может использовать регистр AY0 как оператор уор. Коды условия IF соответствуют кодам, приведенным ранее в табличном виде. Примеры записи команд: 161
Часть III. Вычислительные и аппаратные устройства AR=AXO+AYO+C; /* Присвоить регистру AR значение суммы ре- гистров АХО, AY0 и переноса*/ IF EQ AR=AX0+AY0+C; /* Выполнение описанной выше опера- ции при условии равенства нулю предыдущего результата */ AF=TSTBIT 7 АХ; /* Занести в регистр AF значение результата операции логического «И» разряда 7 с единицей 7 162
Глава 15. Устройство МАС В этой главе говорится о вычислительном устройстве МАС (умножителя с накопителем) сигнального процессора и выпол- няемых в нем командах. Структура устройства МАС Свое название устройство МАС получило от сокращения анг- лийских слов: multiplier (умножитель) и accumulator (накопитель). Устройство МАС выполняет быстрые одноцикловые операции ум- ножения, умножения с добавлением, умножения с вычитанием, функции насыщения и очистку результата. Функция обратной связи позволяет части результата в одном цикле быть одним из сомножи- телей в следующем цикле. Операции в МАС производятся над числами, представленными в виде двоичных последовательностей. Результат выдается в том же виде. Процессор ADSP-2181 поддерживает два режима корректировки формата: дробный режим для дробных операндов формата 1.15 и целочисленный режим для целых чисел формата 16.0. Когда процессор умножает два операнда в формате 1.15, в ре- зультате получается число в формате 2.30 (два знаковых и 30 дробных разрядов). В дробном режиме МАС автоматически сдвигает результат на один бит влево перед пересылкой его в регистр результата MR. Этим сдвигом результат приводится к виду 1.31, который может быть округлен до формата 1.15. В целочисленном режиме сдвига влево не происходит. Напри- мер, при умножении операндов в формате 16.0 результат пред- ставляется в виде 32.0. Сдвиг влево в этом случае не нужен, т.к. он изменит числовое представление результата. В табл. 15.1 показаны форматы данных операндов и результата для вычислительных устройств процессора ADSP-2181. 163
Часть III. Вычислительные и аппаратные устройства Таблица 15.1 Форматы данных операндов и результата для вычислительных устройств процессора ADSP-2181 Операции Арифметические форматы Операнды Результат Устройство ALU Сложение Знаковые числа или без знака Установка флагов Вычитание Знаковые числа или без знака Установка флагов Логические операции Двоичные строки Тот же, что и опе- ранды Деление Знаковые числа или без знака Тот же, что и опе- ранды Переполнение ALU Знаковые числа Тот же, что и опе- ранды Бит коррекции ALU 16-разрядные числа без знака Тот же, что и опе- ранды Насыщение ALU Знаковые числа Тот же, что и опе- ранды Устройство МАС (дробные числа) Умножение (Р) 1.15 знаковые числа /без знака 32 разряда (2.30) Умножение (MR) 1.15 знаковые числа /без знака 2.30, сдвинутый к 1.31 Умножение с накоп- лением 1.15 знаковые числа /без знака 2.30, сдвинутый к 1.31 Умножение с вычита- нием 1.15 знаковые числа /без знака 2.30, сдвинутый к 1.31 Насыщение МАС Знаковые числа Тот же, что и опе- ранды Устройство МАС (целые числа Умножение (Р) 1.15 знаковые числа /без знака 32 разряда (2.30) Умножение (MR) 16.0 знаковые числа /без знака 32.0 без сдвига 164
Гпава 15. Устройство МАС Операции Арифметические форматы Операнды Результат Умножение с накоп- лением 16.0 знаковые числа /без знака 32.0 без сдвига Умножение с вычита- нием 16.0 знаковые числа /без знака 32.0 без сдвига Насыщение МАС Знаковые числа Тот же, что и опе- ранды Устройство сдвига Shifter Логические сдвиги Баз знака/двоичные строки Тот же, что и опе- ранды Арифметические сдвиги Знаковые числа Тот же, что и опе- ранды Определение порядка Знаковые числа Тот же, что и опе- ранды Структура МАС Рассмотрим подробнее содержимое устройства МАС. Его структурная схема приведена на рис. 15.1. МАС имеет два входных 16-разрядных порта X и У и один 32- разрядный порт вывода результата Р. 32-разрядный результат по- ступает в 40-разрядный блок сложения/вычитания, который либо прибавляет, либо вычитает текущий результат из регистра резуль- тата MR, либо передает текущий результат непосредственно в MR. Регистр MR имеет 40 разрядов. Фактически регистр MR состоит из трех регистров. Два из них, MR0 и MR1, являются 16-разрядными, а регистр MR2 8-разрядный. Мультиплексоры MUX позволяют комму- тировать внутри устройства один из нескольких операндов. Блок сложения/вычитания имеет более 32 разрядов для того, чтобы учесть промежуточные переполнения в ряде операций умно- жения с накоплением. Флаг MV (переполнение) устанавливается в единицу, если значение аккумулятора превышает 32 разряда. Регистры ввода-вывода подобны регистрам ALU. Порт X может принимать данные из регистра MX или из любого другого регистра на R-шине результата. R-шина соединяет выходные регистры всех вычислительных модулей для непосредственного использования результатов вычислений в качестве входных операндов. Регистр MX состоит из двух регистров (МХО и МХ1). 165
Часть III. Вычислительные и аппаратные устройства Рис. 15.1. Структурная схема МАС 166
Гпава 15. Устройство МАС Эти регистры читаются и записываются с DMD-шины. Организо- ваны регистры МХО и МХ1 таким образом, что один из них постав- ляет множитель в блок умножения, а другой управляет DMD-шиной. Порт Y принимает данные из регистра MY или регистра обрат- ной связи MF. Регистр MY также разбит на два регистра (MY0 и MY1), доступ к которым осуществляется с DMD-шины и возможна запись с PMD-шины. Система команд предусматривает чтение этих регистров с помощью PMD-шины, но прямого доступа для этой операции нет, в этом случае используется устройство DMD-PMD обмена. Выводы регистра MY устроены аналогично MX. Результат умножения поступает либо в блок сложе- ния/вычитания, либо в регистры MY или MF. Регистр обратной свя- зи MF позволяет результату вычисления в предыдущем цикле ста- новиться операндом умножения на входе Y, в последующей опера- ции. 40-разрядный регистр MR разделен на три регистра (MR0, MR1, MR2). Содержимое любого из них может быть выведено на DMD-шину или R-шину и записано с DMD-шины. Любой из регистров МАС может быть прочитан и записан в од- ном цикле. Чтение данных происходит в начале цикла, а запись - в конце цикла. Прочитанное содержимое регистра в начале одного цикла записывается в конце предыдущего, следовательно, новое значение регистра может быть прочитано только в течение сле- дующего цикла. Такой механизм позволяет входному порту предос- тавлять операнд для МАС в начале цикла и оперировать со сле- дующим значением из памяти в конце того же цикла. Это относится и к выходному регистру. Регистры MR, MF, MX, MY продублированы в теневых банках. Одновременно процессору может быть доступен лишь один из бан- ков. Теневой банк регистров может быть активизирован для чрез- вычайно быстрого контекстного переключения. Таким образом, но- вая задача, типа подпрограммы обработки прерывания, может вы- полняться без сохранения текущих данных в памяти, благодаря использованию теневых банков. Выбор первичного или теневого банка регистров определяется установкой нулевого разряда в реги- стре MSTAT состояний процессора. Если этот разряд установлен в О, то выбран первичный банк. Операции МАС Теперь рассмотрим операции вычислительного устройства МАС, входные форматы данных, обработку переполнения и насыщения. Набор стандартных операций МАС приведен в табл. 15.2. 167
Часть III. Вычислительные и аппаратные устройства Таблица 15.2 Набор стандартных операций МАС Операция Назначение X*Y Умножение X на Y MR+X*Y Умножение X на Y и сложение с MR MR-X*Y Умножение X на Y и вычитание из MR 0 Очистка MR Как было сказано выше, сигнальный процессор ADSP-2181 обес- печивает два режима работы операций умножения с накоплением. Первый из них - режим работы с дробными числами в формате 1.15. Второй - режим работы с целыми числами в формате 16.0. В дробном режиме выходной регистр Р корректирует формат, т.е. прежде чем добавить значение в MR, оно сдвигается на один разряд влево. Таким образом, бит 31 регистра Р запишется в 32-й разряд регистра MR, а 0-й разряд — в первый. В позицию младшего разряда (LSB) при этом записывается ноль. На рис. 15.2 показан дробный формат работы модуля умножения. — Знак Р Выход умножителя Р- 3l| 31|31 |3l|31131|31 31|зо|29|2в|27|26>25|24123|22| 2l|20|l9|l8 |l7|l6115114|т3|l2111 |l01 9 | 8 | 7 | 6 | 5 | 4 | 3 12 | 1 | 0 т|б|5|4|з|2| 11° 15|l4|l3|l2|ll|l0| 9|в|7|б|5|4|з|2|- '|° 15|l4|l3|l2|l1 |ю| 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Цо MDO MR0 •* Рис. 15.2. Дробный формат работы модуля умножения В целочисленном формате (рис. 15.3) регистр Р не сдвигается, прежде чем прибавиться к MR. Знак Р Выход умножителя Р- 31|31| 31|31 |з1|31131|31 3l|30|29|28|27|26|25|24|23|22|2l|20|l9|l8|l7|l6|l5[l4|l3|l2|ll|l0| 9|8|7|б|5|4|з|2|1 | 0 7I6I5I4I3I2I do 15|l4|l3|l2|ll|l0| 9 | 8|7|б|5|4|з|2|1|0 15|l4|l3|l2|l1 |ю| 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |o u п О - Mr\Z "*• MR1 ► MRO Рис. 15.3. Целочисленный формат 168
Гпава 15. Устройство МАС Выбор режима осуществляется установкой 4-го разряда регист- ра MSTAT процессора. Если этот разряд установлен в 1, то выбран целочисленный режим. В любом формате блок умножения форми- рует 32-разрядный результат и передает его в блок сложе- ния/вычитания, где получается конечное значение операции, кото- рое записывается в MR. Регистры ввода-вывода МАС В операциях МАС обрабатываются данные, которые поступают на порты X и Y, а результат операций выводится на шину R. Ниже приведен перечень регистров, доступных для этих портов. Регистры для входного порта X - МХО, МХ1, AR, MRO, MR1, MR2, SRO, SR1. Регистры для входного порта Y - MYO, MY1, MF. Регистры для выходного порта R - MR (MRO, MR1, MR2), MF. Входные форматы данных Для облегчения умножения входные операнды могут находиться в любых форматах. Входные форматы определяются как часть ко- манды и выбираются динамически при обращении к блоку умноже- ния. Формат: «знаковый * знаковый» - используется при умножении двух знаковых чисел простой точности или двух старших частей знаковых чисел двойной точности. Формат: «без знака * знаковый» или «знаковый * без знака» - используется при умножении верхней части знакового числа на нижнюю часть другого или для умножения знакового числа простой точности с числом той же точности без знака. Формат: «без знака * без знака» - используется при умножении чисел простой точности без знака или нижних частей знаковых чи- сел двойной точности. Операции над регистром MR Как показано на рис.15.1, регистр MR разбит на три регистра: MRO (биты 0-15), MR1 (биты 16-31) и MR2 (биты 32-39). Каждый из этих регистров может быть загружен с DMD-шины и выведен на R-шину или DMD-шину. Регистр MR2 связан с младшими восемью разрядами этих шин. Во время передачи данных MR2 на R-шину 169
Часть III. Вычислительные и аппаратные устройства или DM D-шину происходит добавление 8 знаковых разрядов для расширения числа до 16 разрядов. Кроме того, при загрузке дан- ных с DMD-шины в регистр MR1 регистр MR2 служит как добавле- ние регистра MR1, и заполняется значением старшего знакового разряда MR1. Для того чтобы загрузить в регистр MR2 данные, отличные от знакового разряда MR1, необходимо загружать MR2 после загрузки MR1. Загрузка регистра MR0 не влияет на регист- ры MR0 и MR1. Насыщение и переполнение МАС После каждой операции блок сложения/вычитания генерирует сигнал переполнения MV, который подключен к регистру состояния арифметики процессора ASTAT. Бит MV устанавливается в едини- цу, если результат сложения выходит за границы регистров MR1/MR2 - 32 бита, т.е. если все девять старших разрядов регист- ра MR одновременно не нули или не единицы. Регистр MR имеет возможность насыщения в определенном по- ложительном или отрицательном значении, если происходит пере- полнение. Насыщение зависит от состояния бита MV регистра со- стояний арифметики ASTAT и бита MSB регистра MR2. Операцию насыщения описывает табл. 15.3. Таблица 15.3 Описание операции насыщения Флаг MV Старший разряд MR2 Содержимое регистра MR после операции 0 0 или 1 Без изменений 1 0 00000000 0111111111111111 1111111111111111 (положительное) 1 1 11111111 1000000000000000 0000000000000000 (отрицательное) Насыщение в МАС является скорее командой, чем режимом, как в ALU. Она используется при завершении последовательности ум- ножений с накоплением, таким образом, чтобы промежуточные пе- реполнения не привели сумматор к насыщению. Переполнение больше старшего разряда MSB недопустимо. В обратном случае знаковый разряд будет потерян, и насыщение 170
Гпава 15. Устройство МАС не будет правильным. Однако, чтобы достигнуть этого состояния, требуется 255 циклов переполнения. Округление В сумматоре МАС можно округлять 40-разрядный результат на границе между 15-м и 16-м разрядами. Округление относится к сис- теме команд процессора. Округленный результат направляется ли- бо в регистр MR, либо в регистр обратной связи MF. Когда для вы- вода используется MF, в него записывается 16-разрядный округ- ленный результат. Аналогично, если для вывода выбран MR, то в MR1 записываются 16 разрядов округленного результата, а в ре- гистр MR2 результат округления, таким образом, получается 24-разрядный округленный результат. Сумматор производит процедуру округления без смещения. Стандартный метод смещенного округления состоит в записи еди- ницы в 15-й разряд. Этот метод вызывает положительное смеще- ние, так как срединное значение числа, когда MR=0x8000 округля- ется в сторону увеличения. Сумматор устраняет это смещение, принудительно устанавливая шестнадцатый разряд в ноль, когда значение регистра MR достигает середины. При этом четные зна- чения MR1 округляются в сторону уменьшения, а нечетные в сто- рону увеличения. Таким образом достигается нулевое смещение при выборе множества равномерно распределенных значений. Для наглядности сказанного выше, в табл. 15.4 приведено два примера операций округления результата. Таблица 15.4 Примеры операций округления результата Операнды и операции Регистры MR2 MR1 MR0 Пример 1 Неокругленное значе- ние, где 15-й разряд равен 1 хххххххх хххххххх 00100101 1ххххххххххххххх Прибавление 1 к 15-му разряду и учет переноса 100000000 0000000 Округленное значение хххххххх хххххххх 00100110 Оххххххххххххххх 171
Часть III. Вычислительные и аппаратные устройства Пример 2 Неокругленное значе- ние, где 15-й разряд равен 1, а разряды с 0- го по 14-й равны нулю хххххххх хххххххх 00100110 100000000 0000000 Прибавление 1 к 15-му разряду и учет переноса 100000000 0000000 Неокругленное значе- ние, где бит 16 равен 1 хххххххх хххххххх 00100111 00000000 00000000 Установка 16-го разряда в ноль и получение ок- ругленного значения хххххххх хххххххх 00100110 00000000 00000000 х- произвольное значение (0 или 1). В первом примере число не является срединным и производится его стандартное округление. Во втором примере число имеет срединное значение, поэтому его 16-й разряд устанавливается в ноль. Алгоритм округления применяет- ся для каждой операции округления, но становится очевидным лишь при таком наборе младших бит, который показан в примере 2. Смещенное округление В процессорах ADSP-2181 возможен режим смещенного округ- ления. Этот режим выбирается путем установки 12-го бита (BIARND) регистра управления SPORTO. Если BIARND=O, то ис- пользуется операция несмещенного округления, если BIARND=1, то смещенного. Примеры таких операций приведены в табл. 15.5. Таблица 15.5 Примеры операций округления Значение регистра MR до округления Результат округления со смещением Результат округления без смещения 00-0000-8000 00-0001-8000 00-0000-8000 00-0001-8000 00-0002-8000 00-0002-8000 00-0000-8001 00-0001-8001 00-0001-8001 00-0001-8001 00-0002-8001 00-0002-8001 00-0000-7FFF 00-0000-7FFF 00-0000-7FFF 00-0001-7FFF 00-0001-7FFF 00-0001-7FFF 172
Глава 15. Устройство MAC Этот режим действует только в том случае, когда значение реги- стра MR0 больше 0x8000. Во всех других случаях работают обыч- ные операции округления. Этот режим позволяет более эффектив- но реализовывать алгоритмы, использующие смещенное округле- ние, например подпрограммы речевого сжатия GSM. Полный список команд Ниже приводится полный список команд устройства умножите- ля-накопителя МАС, также в соответствии с принятыми ранее ус- ловными сокращениями. Назначение команд приводится в тексте описания этих команд и комментариях для некоторых из команд. Команды умножения: [IF cond] |MR| = хор * |уор| |(SS) |; |MF| |xop| |(SU) | l(US) | I(UU) I |(RND)| Здесь присутствуют новые символы, которые имеют следующее назначение: S - входной операнд хор или уор знаковый; U - входной операнд хор или уор беззнаковый; RND - выходное значение округляется. Например, команда: MR=MX0*MY0 (SU); означает, что в регистр MR будет занесен результат умножения знакового значения из регистра МХО на беззнаковое значение из регистра MY0. Команда: MR=SR1*MY0(RND); означает, что в регистр MR будет занесен результат умножения значе- ния из регистра SR1 на значение из регистра MY0 и результат вычис- ления будет округлен. Команды умножения с накоплением: [IF cond] |MR| = MR + хор * |yop| |(SS) |; |MF| |xop| |(SU) | I(US) I I(UU) I |(RND)| 173
Часть III. Вычислительные и аппаратные устройства Пример: MR=MR+MXO*MYO (SS); Здесь в регистр MR будет занесен результат сложения преды- дущего значения регистра MR с результатом умножения знакового значения из регистра МХО на знаковое значение из регистра MY0. Команды умножения с вычитанием: [IF cond] |MR| = MR - хор * |yop| |(SS) |; |MF| |xop| |(SU) | I(US) I I(UU) I |(RND)| Команды пересылки MR: [IF cond] |MR| = MR |(RND)|; |MF| Фактически эти команды осуществляют пересылку содержимого регистра MR в регистр MR или в регистр MF с округлением значе- ния. Команды очистки: [IF cond] |MR| = 0; |MF| Команда условного насыщения регистра MR: IF MV SAT MR; Здесь MV - код условия переполнения умножителя. Для всех команд МАС разрешено использовать следующие опе- ранды: хор: МХО, МХ1, AR, MRO, MR1, MR2, SRO, SR1; уор: MYO, MY1, MF; Коды условия IF соответствуют кодам, приведенным ранее в табличном виде. Примеры записи команд: MR=MR+MX0*MY0(SS); /* Присвоить регистру MR значение сум- мы регистров MR и произведения МХО на MY0, где оба операнда произведения знаковые*/ MF=AR*MY0(RND) /* Присвоить регистру MF значение произве- дения регистра AR на MY0, с округлением результата*/ 174
Гпава 15. Устройство МАС MF=AR*MYO(RND), MY1=DM(I3,M3); /* Мультипроцессорная ко- манда вычисления произведения и одновременной пересылки дан- ных из памяти в регистр*/ MF=MR(RND); /* Осуществить пересылку содержимого регистра MR в регистр MF с округлением значения 7 IF EQ MR=0; /* Очистить регистр MR, если предыдущий резуль- тат равен нулю 7 175
Глава 16. Устройство сдвига В этой главе говорится об устройстве сдвига сигнального процессора и выполняемых с его помощью командах. Устройство сдвига именуется как Shifter и обеспечивает пол- ный набор сдвиговых функций для 16-разрядных операндов, ре- зультатом которых является 32-разрядное слово данных. К числу сдвиговых функций относятся арифметические сдвиги, логические сдвиги и нормализация. Кроме того, shifter позволяет вычислить порядок (экспоненту) числа и порядок для целого массива (блока) чисел. Эти базовые функции могут быть объединены для быстрого преобразования любого формата чисел, в том числе и чисел с пла- вающей точкой. Структура устройства сдвига На рис. 16.1 представлена структурная схема устройства сдвига. Shifter включает в себя следующие основные блоки: массив сдвига, логику OR/PASS (ИЛИ/ПЕРЕДАЧА), детектор порядка и логику сравнения порядка. Массив сдвига состоит из шестнадцати 32-разрядных регист- ров. Он принимает 16-разрядные данные и в одном цикле может поместить их в любой позиции 32-разрядного поля вывода, начиная с данных, полностью сдвинутых влево, и кончая данными, полно- стью сдвинутыми вправо, за один цикл. Это дает 49 вариантов воз- можных размещений 16-разрядных входных данных в 32- разрядном поле вывода, как показано в табл. 16.1. Размещение 16 входных разрядов определяется кодом управления «С» и сигналом ссылки HI/LO. Код управления «С» является 8-битным значением, которое указывает направление сдвига и число разрядов, на которое необходимо будет сдвинуть данные. Положительные значения кода управления указывают на сдвиг данных влево, а отрицательные на сдвиг вправо. Код управления может быть взят из регистра экспоненты SE или непосредственно 176
Глава 16. Устройство сдвига из инструкции команды. Сигнал ссылки HI/LO определяет началь- ную точку сдвига. В состоянии HI все сдвиги производятся относи- тельно регистра SR1 (старшей половины выходных данных), а в состоянии LO все сдвиги производятся относительно регистра SR0 (младшей половины выходных данных). В табл. 16.2 показа- ны все возможные комбинации сдвигов данных для сигналов ссылки LO и HI. Массив сдвига и связанная с ним логика OR/PASS находятся в окружении набора регистров. Входной регистр SI (Shifter Input) со- держит данные для массива сдвига и детектора порядка. Разряд- ность регистра SI составляет 16 бит. Рис. 16.1. Структурная схема устройства сдвига 177
178 Таблица 16.1 Варианты возможных размещений 16-разрядных входных данных в 32-разрядном поле вывода N Разряды СО О со СП СМ 00 см СМ со СМ L0 см со СМ см см см о см г* 00 г* СО г* L0 ч— ч— со г* см Г" ч— о V" CD 00 г- со U0 00 см о 1 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 2 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X U0 ч— 3 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X U0 V" • • • 17 X X X X X X X X X X X X X X X X L0 т— г* со т— СМ V" г* о г* о 00 г- со LO 00 см V" о 18 X X X X X X X X X X X X X X X L0 г* т— 00 г* см т— г* о г* о 00 Г- со U0 00 см о X • • • 33 L0 ч— г* со ч— см ч— ч— о ч— О) оо г- со L0 со см г* о X X X X X X X X X X X X X X X X 34 Ч— со ч— см г* о г* О) 00 г- со L0 00 см ч— о X X X X X X X X X X X X X X X X X • • • 47 V" о X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 48 о X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 49 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Гпава 16. Устройства сдвига
Таблица 16.2 Возможные комбинации сдвигов данных для сигналов ссылки L0 и HI Управляющий код для сигнала сдвига Выходное значение массива сдвига HI LO +16...+127 +32...+127 00000000 00000000 00000000 00000000 +15 +31 ROOOOOOO 00000000 00000000 00000000 +14 +30 PROOOOOO 00000000 00000000 00000000 +13 +29 NPR00000 00000000 00000000 00000000 +12 +28 MNPR0000 00000000 00000000 00000000 +11 +27 LMNPR000 00000000 00000000 00000000 +10 +26 KLMNPR00 00000000 00000000 00000000 +9 +25 JKLMNPR0 00000000 00000000 00000000 +8 +24 IJKLMNPR 00000000 00000000 00000000 +7 +23 HIJKLMNP ROOOOOOO 00000000 00000000 +6 +22 GHIJKLMN PROOOOOO 00000000 00000000 +5 +21 FGHIJKLM NPR00000 00000000 00000000 +4 +20 EFGHIJKL MNPR0000 00000000 00000000 +3 +19 DEFGHIJK LMNPR000 00000000 00000000 +2 +18 CDEFGHIJ KLMNPROO 00000000 00000000 +1 +17 BCDEFGHI GKLMNPRO 00000000 00000000 0 +16 ABCDEFGH IJKLMNPR 00000000 00000000 -1 +15 XABCDEFG HIJKLMNP ROOOOOOO 00000000 -2 +14 XXABCDEF GHIJKLMN PROOOOOO 00000000 -3 +13 XXXABCDE FGHIJKLM NPROOOOO 00000000 -4 +12 XXXXABCD EFGHIJKL MNPR0000 00000000 -5 +11 ХХХХХАВС DEFGHIJK LMNPROOO 00000000 -6 +10 ХХХХХХАВ CDEFGHIJ KLMNPROO 00000000 -7 +9 ХХХХХХХА BCDEFGHI JKLMNPRO 00000000 Часть III. Вычислительные и аппаратные устройства
180 Управляющий код для сигнала сдвига Выходное значение массива сдвига HI LO -8 +8 хххххххх ABCDEFGH IJKLMNPR 00000000 -9 +7 хххххххх XABCDEFG HIJKLMNP R0000000 -10 +6 хххххххх XXABCDEF GHIJKLMN PR000000 -11 +5 хххххххх XXXABCDE FGHIJKLM NPR00000 -12 +4 хххххххх XXXXABCD EFGHIJKL MNPR0000 -13 +3 хххххххх ХХХХХАВС DEFGHIJK LMNPR000 -14 +2 хххххххх ХХХХХХАВ CDEFGHIJ KLMNPR00 -15 +1 хххххххх ХХХХХХХА BCDEFGHI JKLMNPR0 -16 0 хххххххх хххххххх ABCDEFGH IJKLMNPR -17 -1 хххххххх хххххххх XABCDEFG HIJKLMNP -18 -2 хххххххх хххххххх XXABCDEF GHIJKLMN -19 -3 хххххххх хххххххх XXXABCDE FGHIJKLM 65 -4 хххххххх хххххххх XXXXABCD EFGHIJKL -20 -5 хххххххх хххххххх ХХХХХАВС DEFGHIJK -21 -6 хххххххх хххххххх ХХХХХХАВ CDEFGHIJ -22 -7 хххххххх хххххххх ХХХХХХХА BCDEFGHI -23 -8 хххххххх хххххххх ХХХХХХХХ ABCDEFGH -24 -9 хххххххх хххххххх ХХХХХХХХ XABCDEFG -25 -10 хххххххх хххххххх хххххххх XXABCDEF -26 -11 хххххххх хххххххх хххххххх XXXABCDE -27 -12 хххххххх хххххххх хххххххх XXXXABCD -28 -13 хххххххх хххххххх хххххххх ХХХХХАВС -29 -14 хххххххх хххххххх хххххххх ХХХХХХАВ -30 -15 хххххххх хххххххх хххххххх ХХХХХХХА -31 -16...-128 хххххххх хххххххх хххххххх ХХХХХХХХ -32...-128 Гпава 16. Устройства сдвига
Глава 16. Устройство сдвига Этот регистр записывается с DMD-шины. В качестве входных регистров для массива сдвига и детектора порядка могут служить регистры AR, SR или MR, подключенные через R-шину. Выходной 32-разрядный регистр SR (Shifter Result) разделен на два 16- разрядных регистра SR0 и SR1. Загрузка данных в эти регистры может производиться с DMD-шины, а результат выводится на R- шину или DMD-шину. Регистр SR подключен к блоку OR/PASS логи- ки для проведения сдвигов двойной точности. Регистр SE (Shifter Exponent) состоит из 8 разрядов и содержит порядок во время нормализации и денормализации данных. Он доступен через 8 младших разрядов DMD-шины. Его формат 8.0 в дополнительном коде. Регистр SB (Shifter Block) используется в блочных операциях для чисел с плавающей точкой. Его значение определяет сдвиг для нормализации чисел в блоке данных, т.е. значение, на которое должен произойти сдвиг для нормализации самого большого числа в блоке данных. Разрядность регистра SB составляет 5 бит. Он доступен через 5 младших разрядов DMD-шины. Его формат 5.0 в дополнительном коде. При чтении регистров SE и SB на DMD-шину числа автомати- чески дополняются знаковыми битами до 16-разрядного значения. Любой из регистров SI, SE, SR может быть прочитан или записан в одном и том же цикле. Shifter также имеет банк теневых регистров SI, SE, SR и SB. Выбор банка регистров производится установкой нулевого бита ре- гистра режима MSTAT процессора. Устройство сдвига заполняет все биты 32-разрядного резуль- тата правее сдвига нулями, а левее сдвига битом расширения. Бит расширения может принимать значение знакового бита, бита флага АС из регистра ASTАТ или нулевое значение, в зависимости от вы- полняемой инструкции. Логика OR/PASS позволяет правильно комбинировать сдвину- тые секции числа с двойной точностью. При выборе инструкции PASS результат массива сдвигов загружается в регистр SR без из- менения. При выборе инструкции OR результат массива сдвигов подвергается операции «ЛОГИЧЕСКОЕ ИЛИ» с предыдущим зна- чением регистра SR и после этого вновь помещается в SR. Детектор порядка вычисляет степень из входного операнда устройства сдвига. Входное значение для него интерпретируется в зависимости от одного из трех режимов, в котором он работает. В режиме HI входной операнд воспринимается как число с оди- 181
Часть III. Вычислительные и аппаратные устройства нарной точностью или как старшая половина числа с двойной точ- ностью. Детектор степени определяет количество знаковых разря- дов и формирует код, который будет служить для сдвига данных влево так, чтобы оставить в данных только один знаковый разряд. В режиме HIX входной операнд воспринимается как результат сложения или вычитания, выполненного в ALU, когда могло про- изойти переполнение. Поэтому детектор степени берет в учет зна- чение флага AV регистра ASTAT. Если он установлен, формируется дополнительный бит для нормирования данных. Если флаг сбро- шен, отличий между режимами HI и HIX нет. В режимах HI и HIX детектор степени формирует бит знака SS (Shifter Sing), который помещается в регистр ASTАТ устройства ALU. Он соответствует старшему разряду входного операнда, за исключением тех случаев, когда установлен флаг AV в режиме HIX. В этом случае формирует- ся отрицание старшего разряда входного операнда, для сохране- ния знака переполненного значения. В режиме LO входной операнд интерпретируется как младшая половина числа с двойной точностью. В этом режиме детектор сте- пени интерпретирует бит SS как знак числа. Регистр SE загружает- ся результатом детектора порядка только в том случае, если ре- гистр SE равен минус 15. Это происходит в тех случаях, когда старшая часть числа содержит лишь знаковые разряды. При этом выходное значение детектора порядка сдвигается на 16 разрядов влево, для того чтобы определить, что операнд является младшей половиной 32-разрядного числа. Для наглядности, в табл. 16.3 - 16.5 показаны все три режима рабо- ты детектора порядка. В таблицах приняты следующие условные обо- значения: S-знаковый бит, N-знаковый бит, D-незначащий бит. Таблица 16.3 Детектор порядка в режиме работы HI Старший байт Младший байт Степень SNDDDDDD DDDDDDDD 0 SSNDDDDD DDDDDDDD -1 SSSNDDDD DDDDDDDD -2 SSSSNDDD DDDDDDDD -3 SSSSSNDD DDDDDDDD -4 SSSSSSND DDDDDDDD -5 182
Глава 16. Устройство сдвига Старший байт Младший байт Степень SSSSSSSN DDDDDDDD -6 SSSSSSSS NDDDDDDD -7 SSSSSSSS SNDDDDDD -8 SSSSSSSS SSNDDDDD -9 SSSSSSSS SSSNDDDD -10 SSSSSSSS SSSSNDDD -11 SSSSSSSS SSSSSNDD -12 SSSSSSSS SSSSSSND -13 SSSSSSSS SSSSSSSN -14 SSSSSSSS SSSSSSSS -15 Таблица 16.4 Детектор порядка в режиме работы HIX ФлагАУ Старший байт Младший байт Степень 1 DDDDDDDD DDDDDDDD +1 0 SNDDDDDD DDDDDDDD 0 0 SSNDDDDD DDDDDDDD -1 0 SSSNDDDD DDDDDDDD -2 0 SSSSNDDD DDDDDDDD -3 0 SSSSSNDD DDDDDDDD -4 0 SSSSSSND DDDDDDDD -5 0 SSSSSSSN DDDDDDDD -6 0 SSSSSSSS NDDDDDDD -7 0 SSSSSSSS SNDDDDDD -8 0 SSSSSSSS SSNDDDDD -9 0 SSSSSSSS SSSNDDDD -10 0 SSSSSSSS SSSSNDDD -11 0 SSSSSSSS SSSSSNDD -12 0 SSSSSSSS SSSSSSND -13 0 SSSSSSSS SSSSSSSN -14 0 SSSSSSSS SSSSSSSS -15 183
Часть III. Вычислительные и аппаратные устройства Таблица 16.5 Детектор порядка в режиме работы LO Флаг SS Старший байт Младший байт Степень S DDDDDDDD DDDDDDDD -15 S SNDDDDDD DDDDDDDD -16 S SSNDDDDD DDDDDDDD -17 S SSSNDDDD DDDDDDDD -18 S SSSSNDDD DDDDDDDD -19 S SSSSSNDD DDDDDDDD -20 S SSSSSSND DDDDDDDD -21 S SSSSSSSN DDDDDDDD -22 S SSSSSSSS NDDDDDDD -23 S SSSSSSSS SNDDDDDD —24 S SSSSSSSS SSNDDDDD -25 S SSSSSSSS SSSNDDDD -26 S SSSSSSSS SSSSNDDD -27 S SSSSSSSS SSSSSNDD -28 S SSSSSSSS SSSSSSND -29 S SSSSSSSS SSSSSSSN -30 S SSSSSSSS SSSSSSSS -31 Источниками входных данных в устройстве сдвига могут служить регистры SI, AR, MRO, MR1, MR2, SR0 и SR1. Результат работы устройства сдвига всегда помещается в регистр SR (SRO, SR1). Команды устройства сдвига Как было сказано выше, устройство сдвига выполняет следую- щие функции: • Арифметический сдвиг (ASHIFT) • Логический сдвиг (LSHIFT) • Нормализация числа (NORM) • Определение экспоненты (ЕХР) • Блочное изменение экспоненты (EXPADJ) Данные команды устройства сдвига применяются при выполне- 184
Глава 16. Устройство сдвига нии арифметических операций над числами. С их помощью произ- водится определение порядка блока, немедленные сдвиги, норма- лизация и денормализация чисел. Ниже приводится полный список команд устройства сдвига Shifter в соответствии с принятыми ранее условными сокращения- ми. Назначение команд приводится в тексте описания этих команд и комментариях для некоторых из команд. Команды арифметического сдвига: [IF cond] SR = |SR OR| ASHIFT xop [(HI) |; l(LO) | Команды логического сдвига: [IF cond] SR = |SR OR| LSHIFT xop |(HI) |; l(LO) | Команды нормализации: [IF cond] SR = |SR OR| NORM xop |(HI) |; l(LO) | Команды выделения порядка: [IF cond] SR = EXP xop |(HI) |; l(LO) | I(HIX) I Команды выравнивания блочного порядка: [IF cond] SR = EXPAD J xop; Команды арифметического непосредственного сдвига: [IF cond] SR = |SR OR| ASHIFT xop BY <exp> [(HI) |; l(LO) | Команды логического непосредственного сдвига: [IF cond] SR = |SR OR| LSHIFT xop BY <exp> |(HI) |; l(LO) | В записях некоторых команд присутствуют символы, которые имеют следующее назначение: HI - сдвиг выполняется относительно старших 16 разрядов (SR1); LO - сдвиг выполняется относительно младших 16 разрядов (SR0); 185
Часть III. Вычислительные и аппаратные устройства HIX - расширенный режим HI (при выделении порядка учитыва- ется бит переполнения AV). Например, команда: SE=EXP AR (HIX); означает, что в регистр SE будет занесен результат выделения порядка из регистра AR в расширенном режиме, т.е. с учетом бита переполнения AV. Команда: SR=NORM AR (HI); (Нормализация) означает, что в регистр SR будет занесен результат нормализа- ции регистра AR, причем сдвиг при нормализации будет выпол- няться относительно старших 16 разрядов. Для всех команд устройства сдвига разрешено использовать следующие операнды хор: SI, SRO, SR1, AR, MRO, MR1, MR2, а в качестве ЕХР может быть любое целое число от -128 до 127. Коды условия IF соответствуют кодам, приведенным ранее в табличном виде. Ниже приведен пример программы для вычисления разницы двух чисел в формате с плавающей точкой, с применением устрой- ства сдвига. .MODULE float_point_sub; { Программный модуль вычисления z = х - у в формате с плавающей точкой Входные операнды: АХО = показатель х, АХ1 = мантисса х, AY0 = показатель у, AY1 = мантисса у. Выходные данные: AR = показатель z, SR1 = мантисса z Изменяются регистры: АХО,AY1,AYO,AF,AR,SI,SE,SR Время вычисления = 11 циклов } .ENTRY fps; fps : AF=AX0-AY0; {Показатель x > показателя у ?} IF GT JUMP shifty; {Если да - переход на сдвиг у} SI=AX1, AR=PASS AF; {Иначе - сдвиг х} SE=AR; SR=ASHIFT SI (HI); AR=SR1-AY1; {Вычисление мантиссы} JUMP subt; shifty: SI=AY1, AR=-AF; SE=AR; SR=ASHIFT SI (HI); AY1=SR1; 186
Глава 16. Устройство сдвига AYO=AXO, AR=AX1-AY1; {Вычисление мантиссы} subt: SE=EXP AR (HIX); AXO=SE, SR=NORM AR (HI); {Нормализация} AR=AX0+AY0; {Вычисление показателя} RTS; .ENDMOD; Данная программа содержит многофункциональные команды, что позволило сократить время ее работы. Программа выполняется всего за 11 машинных циклов процессора. 187
Глава 17. Устройство обмена между шинами В этой главе говорится об устройстве обмена между шина- ми памяти программ PMD и памяти данных DMD. В операциях обмена данными и при загрузке данных вычисли- тельными устройствами процессора, часто используется устройст- во обмена между шиной памяти программ PMD и шиной памяти данных DMD. Это устройство позволяет передавать данные между упомянутыми выше шинами в обоих направлениях. Рассмотрим работу данного устройства. Его структурная схема приведена на рис. 17.1. Как видно из рисунка, устройство состоит из нескольких буфе- ров, мультиплексора и регистра РХ. Регистр РХ используется для временного хранения 8 разрядов данных. Он необходим для Рис. 17.1. Устройство обмена между шинами памяти программ PMD и памяти данных DMD 188
Гпава 17. Устройство обмена между шинами обеспечения корректной передачи данных между 16-разрядной шиной DMD и 24-разрядной шиной PMD. При этом старшие 16 разрядов 24- разрядной шины PMD передаются на 16 разрядов шины DMD непо- средственно, а 8 младших разрядов записываются в регистр РХ, а за- тем передаются на младшие 8 разрядов шины DMD. Из структурной схемы устройства видно, что данные между ши- нами передаются двумя путями. Первый путь позволяет осуществ- лять прямую пересылку старших 16 разрядов данных между шина- ми через буферные регистры. Второй путь служит для пересылки младших 8 разрядов данных между шинами. Рассмотрим механизм обмена данными с использованием реги- стра РХ. Когда данные считываются из памяти программ в любой ре- гистр, происходит автоматическая загрузка регистра РХ младшими 8 разрядами 24-разрядного слова. Например: АХО = РМ(17,М7); При выполнении этой команды старшие 16 разрядов 24-разрядного слова памяти программы загружаются в регистр АХО, а младшие 8 разрядов автоматически загружаются в регистр РХ. При записи данных в память программ содержимое регистра РХ автоматически считывается в младшие 8 разрядов памяти про- грамм. Например: РМ(17,М7) = АХО; Здесь данные регистра АХО записываются в старшие 16 разря- дов 24-разрядного слова памяти программы, а 8 разрядов, храня- щиеся в регистре РХ от предыдущей команды, автоматически запи- сываются в младшие 8 разрядов этого же слова. Таким образом, достигается автоматическая пересылка данных между 16- и 24- разрядными шинами. Кроме того, существуют команды прямого доступа к регистру РХ с шины памяти данных. При этом используются только младшие 8 разрядов шины данных, а старшие 8 разрядов данных отбрасыва- ются или заполняются нулями. Например: РХ = АХО; Эта команда передает в регистр РХ 8 младших разрядов из ре- гистра АХО через шину данных. Восемь старших разрядов 16- разрядного слова при этом отбрасываются. Следующая команда передает содержимое регистра РХ в 8 младших разрядов регистра АХО. При этом старшие 8 разрядов регистра АХО заполняются нулями. АХО = РХ; 189
Часть III. Вычислительные и аппаратные устройства Каждый раз, когда содержимое какого-либо регистра записыва- ется в память программ, из этого регистра передаются 16 старших разрядов, а содержимое регистра РХ автоматически добавляется в качестве младших 8 разрядов данных. Если эти 8 младших разря- дов регистра РХ должны иметь определенное значение, они долж- ны быть предварительно загружены в регистр РХ соответствующей командой. Ниже приведен модуль программы, предназначенной для пере- сылки 24-разрядных данных из одной области памяти программ в другую при помощи 16-разрядного регистра. .MODULE copy_pdm; { Входные данные: I4 = адрес источника данных L4 = длина буфера данных I5 = адрес приемника данных Выходные данные: Перемещенные данные Изменяемые регистры: AR, М4 } .ENTRY COPY_PMDAT; COPY_PMDAT: М4=1; CNTR = L4; DO COPY_MEM UNTIL CE; AR=PM(l4, M4); PM(I5, M4)=AR; COPY_MEM: RTS; .ENDMOD; Обратите внимание, что в этой программе регистр РХ не ис- пользуется явным образом в командах, тем не менее, пересылка 24-разрядных данных через 16-разрядный регистр AR осуществля- ется корректно, благодаря автоматическому режиму работы уст- ройства обмена данными с применением регистра РХ. 190
Глава 18. Программный автомат В этой главе говорится о программном автомате сигналь- ного процессора и выполняемых с его помощью командах. Программный автомат управляет последовательностью выпол- нения программы. Он содержит контроллер прерываний и логиче- ское устройство состояний. Программный автомат позволяет осу- ществлять последовательное выполнение команд, условные и без- условные переходы в программе, обработку прерываний и подпро- грамм. Структурная схема этого устройства приведена на рис. 18.1. Основным блоком программного автомата является программ- ный счетчик (PC-program counter). Он представляет собой 14- разрядный регистр, в котором постоянно содержится адрес теку- щей выполняемой команды. Это значение инкрементируется (увеличивается на 1) каждый раз при выполнении очередной последовательной команды. Стек программного счетчика служит для временного хранения адреса очередной команды при переходе на обработку подпро- граммы, цикловой операции или прерывания. Он позволяет хранить до шестнадцати 14-разрядных слов. Таким образом, уровень вложенности подпрограмм не должен превышать 16. Контроллер прерываний формирует адрес подпрограммы обработчика прерывания. Он использует данные регистров статуса и влияет на выбор источника следующего адреса. Блоки счетчика циклов, стека счетчика, компаратора циклов и стека циклов позволяют организовать цикловые операции в про- грамме, не привлекая для этого другие регистры процессора. Логика выбора формирует сигнал для выбора источника следующего адреса команды. Команды управления программой Ниже приводится полный список команд, выполняемых про- граммным автоматом в соответствии с принятыми ранее условны- ми сокращениями. Назначение команд приводится в тексте описа- ния этих команд и комментариях для некоторых из команд. 191
Часть III. Вычислительные и аппаратные устройства Рис. 18.1. Программный автомат сигнального процессора Выполнять цикл до определенного условия: DO <addr> [UNTIL term]; Условный (безусловный) переход: [IF cond] JUMP | (I4) |; I(I5) I |(I6) I |(I7) | |<addr>| 192
Гпава 18. Программный автомат Вызов подпрограммы: [IF cond] CALL | (I4) I(I5) | I(I6) | I(I7) | |<addr>| Переход (вызов подпрограммы) по состоянию вывода флага Flag In: [IF] |FLAG_IN | |JUMP| <addr>; |IF NOT FLAGJN | |CALL| Изменение состояния вывода флагов: [IF cond] |SET |RESET | |TOGGLE |FLAG_OUT| [,...]; {установка флага) |FLO | {сброс флага) | |FL1 | {инверсия флага) |FL2 | Возврат из подпрограммы: [IF cond] RTS; Возврат из подпрограммы прерывания: [IF cond] RTI; Ожидание прерываний: IDLE; Команда переводит процессор в режим пониженного потребле- ния на некоторое неопределенное время. Для того, чтобы перевес- ти процессор в этот режим на продолжительное время, необходимо после этой команды вставить команду перехода на IDLE, зациклив тем самым программу. Выход из этого режима произойдет по лю- бому прерыванию процессора. Допустимые значения <term> и <cond> приведены в табл. 18.1 и табл. 18.2 соответственно. Запись <addr> может быть меткой или числовым значением от 0 до 0x3FFF. Примеры команд управления программой: CNTR=100; {Заполнить счетчик циклов) DO Met1 UNTIL СЕ; {Выполнить цикл до метки Met1, пока счетчик циклов не пуст) 193
Часть III, Вычислительные и аппаратные устройства Таблица 18.1 Допустимые значения <term> Значение <term> Пояснение СЕ Счетчик циклов пуст EQ Равно нулю NE Не равно нулю LT Меньше нуля GE Больше или равно нулю LE Меньше или равно нулю GT Больше нуля АС Перенос АЛУ NOT АС Нет переноса АЛУ AV Переполнение АЛУ NOT AV Нет переполнения АЛУ MV Переполнение умножителя NOT MV Нет переполнения умножителя NEG Входной операнд «хор» отрицателен POS Входной операнд «хор» положителен FOREVER Бесконечный цикл Таблица 18.2 Допустимые значения <cond> Значение <cond> Пояснение EQ Равно нулю NE He равно нулю LT Меньше нуля GE Больше или равно нулю LE Меньше или равно нулю GT Больше нуля AC Перенос АЛУ NOT AC Нет переноса АЛУ AV Переполнение АЛУ 194
Гпава 18. Программный автомат Значение <cond> Пояснение NOT AV Нет переполнения АЛУ MV Переполнение умножителя NOT MV Нет переполнения умножителя NEG Входной операнд «хор» отрицателен POS Входной операнд «хор» положителен NOTCE Счетчик циклов не пуст FLAGJN* Вывод Fl=1 NOT FLAGJN* Вывод FI=0 'Только для команд JUMP, CALL. АХО - DM(IO,MO); {Переслать данные через регистр АХО} Met1: DM(I1,M1)=AXO; {в новую область памяти} JUMP(I4); {Осуществить переход по адресу в индексном регист- ре 14} CALL (16); {Вызвать подпрограмму по адресу в индексном реги- стре 16} SET FLAG_OUT; {Установить в 1 вывод FLAG_OUT} RESET FL2 {Сбросить флаг FL2} TOGGLE FLO {Инвертировать флаг FLO} Met2: IDLE; {Режим ожидания прерывания} JUMP Met2: 195
Глава 19. Генераторы адресов В этой главе говорится об устройствах генераторов адре- сов сигнального процессора и выполняемых с его помощью ко- мандах. Ранее мы уже рассматривали назначение генераторов адресов (DAG). На этот раз рассмотрим их структуру и команды, которые они позволяют выполнять. Сигнальный процессор имеет в своем составе два неза- висимых генератора адреса данных, обеспечивающих одновре- менный доступ к памяти данных и памяти программ. Генераторы адреса осуществляют косвенную адресацию данных. Оба генера- тора могут выполнять автоматическую модификацию адреса дан- ных. С помощью циклических буферов, они могут выполнять моди- фикацию адреса по модулю. Отличие генераторов адреса друг от друга состоит в следующем. Первый генератор адреса (DAG1) ге- нерирует только адреса памяти данных, но обеспечивает при этом изменение порядка разрядов в адресе на обратный (реверс разрядов). Второй генератор адреса (DAG2) генерирует как адреса памяти данных, так и адреса памяти программы, но не способен поддерживать реверсную адресацию. Структурная схема генератора адреса приведена на рис. 19.1. Отличия структуры DAG1 от DAG2 показаны на самой схеме. Каждый генератор имеет в своем составе три регистровых блока: блок регистров модификации (М), блок индексных реги- стров (I) и блок регистров длины (L). Каждый из регистровых бло- ков состоит из четырех регистров разрядностью 14 бит. Чтение и запись данных в эти регистры осуществляется через шину данных DMD. Индексные регистры I содержат действительные адреса, ис- пользуемые для доступа к памяти. При косвенной адресации дан- ных адрес, находящийся в выбранном индексном регистре, ста- новится адресом памяти. Разряды адреса на выходе DAG1 мо- гут быть переставлены в обратном порядке за счет установки соот- ветствующего бита режима в регистре состояний режима MSTAT или при помощи команды ENA BIT_REV. Реверс адреса (адресация 196
Гпава 19. Генераторы адресов Шина DMD Адрес Рис. 19.1. Структурная схема генератора адреса с перестановкой разрядов в обратном порядке) необходим для вы- полнения операций БПФ (быстрого преобразования Фурье) для цифровых значений сигнала. Данную операцию часто называют скремблированием (от английского слова scramble-смешивать). Сброс бита режима реверса адреса в регистре состояний режима MSTAT производится командой DIS BIT_REV. Для наглядности ска- занного в табл. 19.1 приведен нормальный и реверсивный порядок адресов для 2-, 3- и 4-разрядных адресов. Из таблицы видно, каким образом при этом перемешиваются значения адреса. Таблица 19.1 Нормальный и реверсивный порядок адресов для 2-, 3- и 4-разрядных адресов Значение адреса Нормальный порядок Реверсивный порядок Значение адреса 2-разрядный адрес 0 00 00 0 1 01 10 2 2 10 01 1 3 11 11 3 197
Часть III. Вычислительные и аппаратные устройства Значение адреса Нормальный порядок Реверсивный порядок Значение адреса 3-разрядный адрес 0 ООО 000 0 1 001 100 4 2 010 010 2 3 011 110 6 4 100 001 1 5 101 101 5 6 110 011 3 7 111 111 7 4-разрядный адрес 0 0000 0000 0 1 0001 1000 8 2 0010 0100 4 3 0011 1100 12 4 0100 0010 2 5 0101 1010 10 6 0110 0110 6 7 0111 1110 14 8 1000 0001 1 9 1001 1001 9 10 1010 0101 5 11 1011 1101 13 12 1100 0011 3 13 1101 1011 11 14 1110 0111 7 15 1111 1111 15 Генераторы адреса используют пост-модификацию. Т.е. после доступа к данным при использовании косвенной адресации содер- жимое заданного регистра модификации М прибавляется к содер- жимому индексного регистра I для формирования нового значения регистра I. Выбор регистров М и I в пределах одного DAG произво- лен. Т.е. любой из индексных регистров 10-13 DAG1 может быть модифицирован содержимым любого из регистров модификации МО-МЗ. Для DAG2 аналогично используются регистры I4-I7 и М4- М7. Значения модификации, содержащиеся в регистрах модифи- кации М, являются знаковыми числами, поэтому следующий вычис- ленный адрес может быть больше или меньше предыдущего. 198
Гпава 19. Генераторы адресов Генераторы адреса поддерживают адресацию линейных и цик- лических буферов данных. Содержимое регистра длины L опреде- ляет режим адресации для соответствующего индексного регистра I. При адресации циклических буферов регистр L инициализируется длиной буфера. При адресации линейных буферов регистр L ини- циализируется нулем. Для каждого регистра I соответствующий регистр L несет информацию о длине буфера. Если сумма значе- ний регистра модификации М и индексного регистра I превышает значение длины циклического буфера, модифицированное значе- ние регистра I вычисляется логическим устройством адресации по модулю с использованием значения регистра длины L. Поскольку регистры I и L содержат беззнаковые числа, два старших разряда шины данных заполняются при чтении этих ре- гистров нулями. Регистры модификации М хранят числа со знаком, поэтому старшие два разряда шины данных дополняются знаковым расширением при их чтении. Реверсная адресация Логическое устройство инвертирования разрядов адреса пред- назначено для вычислений БПФ, когда разряды двоичных значений данных вводятся или генерируются в обратном порядке. Постанов- ка разрядов в обратном порядке возможна только для адресов, ге- нерируемых DAG1. Точкой поворота является средняя точка 14- разрядного адреса, между разрядами 6 и 7, как показано ниже: Нормальный порядок разрядов: 13 12 11 10 09 08 07 06 05 04 03 02 01 00. Реверсный порядок разрядов: 00 01 02 03 04 05 06 07 08 09 10 11 12 13. Реверсная адресация разрешается при установке соответст- вующего бита в регистре состояния режима MSTAT. При разреше- нии данного режима работы DAG1 разряды всех адресов, сгенерированных с использованием индексных регистров I0-I3, ставятся в обратном порядке на выходе. При этом значения адре- сов в индексных регистрах хранятся в нормальном порядке, а пре- образование адреса происходит только при выводе на шину адре- са. Этот режим сохраняется до сброса соответствующего бита со- стояния MSTAT. В DAG1 можно также инвертировать значения адресов с раз- рядностью менее 14 бит. Для этого необходимо определить первый адрес и записать при инициализации в регистр модификации М 199
Часть III. Вычислительные и аппаратные устройства значение, вычисляемое для модификации инвертированного вы- ходного значения регистра I в нужном интервале. Это значение равно 214-N, где N - число разрядов, которое необходимо поста- вить в обратном порядке. Поскольку генераторы адресов используются для формирования адресов данных, эти устройства используются в командах пересыл- ки данных. Ниже приводится полный список команд пересылки данных в соответствии с принятыми ранее условными обозначе- ниями. Назначение команд приводится в тексте описания этих ко- манд. Команды пересылки данных Чтение из памяти данных (косвенная адресация): dreg = DM( |10|,|М0|); |11|.|М1| |12|.|М2| |13|.|МЗ| |14|.|М4| |15|.|М5| |16|.|М6| |17|.|М7| Чтение из памяти программ (косвенная адресация): dreg = PM( |I4|,|M4|); |15|.|М5| |16|.|М6| |17|.|М7| Запись в память данных (косвенная адресация): DM( |IO|,|MO|) = dreg; |11|.|М1| |12|.|М2| |I3|.|M3| |14|.|М4| |15|.|М5| |16|.|М6| |17|.|М7| Запись в память программ (косвенная адресация): РМ( |I4|,|M4|) = dreg; 200
Глава 19. Генераторы адресов |15|,|М5| |16|,|М6| |17|,|М7| Запись в память данных (прямая адресация): DM (<addr>) = reg; Запись содержимого регистров оверлеев в память данных: DM (<addr>) = DMOVLAY; Запись в область ввода/вывода (прямая адресация): IO (<addr>) = dreg; Пересылка регистр-регистр: reg = reg; Непосредственная загрузка регистра: reg = <data>; dreg = <data>; Чтение регистра оверлеев: dreg = DMOVLAY; Запись в регистр оверлеев: DMOVLAY = dreg; Чтение из памяти данных (прямая адресация): reg = DM (<addr>); Чтение из памяти ввода/вывода (прямая адресация): dreg = IO (<addr>); Символьная запись <addr> для команд ввода/вывода может принимать значения адреса в диапазоне от 0 до 2048, а для команд обращения к памяти данных от 0 до 16383 (0x3FFF). Вместо записи dreg могут быть использованы регистры: АХО, АХ1, AYO, AY1, AR, МХО, МХ1, MYO, MY1, MRO, MR1, MR2, SI, SE, SRO, SR1. Вместо записи reg могут быть использованы все регистры dreg и регистры: I0-I7, МО-М7, L0-L7, ТХО, ТХ1, RXO, RX1, SB, РХ, AST АТ, 201
Часть III. Вычислительные и аппаратные устройства MSTAT, 53ТАТ(только чтение), IMASK, ICNTL, 1БС(только запись), CNTR, OWRCNTR (только запись). Примеры команд пересылки данных: АХ0=АХ1; {Переслать содержимое регистра АХ1 в АХО} AY0=0xA37F; {Загрузить в регистр 16-разрядное число 0xA37F) AY0=DM (1247); {Прочесть данные из ячейки памяти с адресом 1247 в регистр AY0} PM(I7, М7) = АХО; {Записать в память программ значение реги- стра АХО, используя индексные регистры I7 и М7} Ниже приведен пример подпрограммы реверсирования разря- дов адреса. Данная программа служит для размещения данных по адресам, в которых изменен нормальный порядок разрядов на об- ратный порядок. .MODULE scram; {Вход: Буфер данных input Выход: Буфер данных output Используемые регистры: I0, 14, МО, М4, AY1) .CONST N=1025, mv=H#0010; {Инициализация констант mv=16384/N} .EXTERNALinput, output; .ENTRY scramble; scramble: l4=Ainput; {I4 присвоить адрес начала буфера входных данных} IO=Aoutput; {I0 присвоить адрес начала буфера выходных данных} М4=1; M0=mv; {МО=модификатор для реверса} L4=0; {Линейные буферы} L0=0; ENA BIT_REV; {Разрешение инвертирования разрядов} CNTR=N; DO Met UNTIL СЕ; {Организация цикла} AY1=DM(I4,M4); {Чтение последовательно организованных данных} Met: DM(IO,MO)=AY1; {Запись данных в ячейки в обратном порядке) DIS BIT_REV; {Запрещение инвертирования разрядов} RTS; {Возврат в вызывающую программу} .ENDMOD; 202
Глава 20. Таймер В этой главе говорится об устройстве таймера сигнально- го процессора и его назначении. Кроме рассмотренных нами вычислительных устройств, сиг- нальный процессор содержит в своем составе программируемый таймер, обеспечивающий автоматический отсчет времени, и два программируемых последовательных порта для связи с внешней периферией. Рассмотрим поочередно эти устройства. Программируемый таймер сигнального процессора позволяет циклически генерировать прерывания через определенные проме- жутки времени, кратные циклам процессора. Структурная схема таймера представлена на рис. 20.1. Шина DMD 16 Разрешение работы Рис. 20.1. Структурная схема таймера 203
Часть III. Вычислительные и аппаратные устройства Как видно из рисунка, таймер включает в себя 16-раз- рядный регистр периода TPERIOD, 8-разрядный регистр масштабирования TSCALE, 16-разрядный регистр-счетчик TCOUNT и логику управле- ния. Все три регистра отображены на область памяти данных про- цессора в соответствии с табл. 20.1. Таблица 20.1 Формат регистров таймера, отображенных на память данных процессора Разряды регистров Адрес 15 14 13 12 11 10 9 8 TPERIOD 0x3FFD TCOUNT 0x3FFC 0 0 0 0 0 0 0 0 0x3FFB Разряды регистров Адрес 7 6 5 4 3 2 1 0 TPERIOD 0x3FFD TCOUNT 0x3FFC TSCALE 0x3FFB Разрешение работы таймера производится установкой в единицу 5-го разряда регистра состояния процессора MSTAT. Когда работа таймера разрешена, регистр-счетчик TCOUNT декрементируется сигналами от логики масштабирования. При достижении счетчиком нуля, формируется прерывание таймера для процессора. После чего в регистр-счетчик TCOUNT автоматически загружается значение ре- гистра периода TPERIOD и работа таймера продолжается. Регистр масштабирования TSCALE содержит коэффициент де- ления тактовой частоты процессора и позволяет изменять время между прерываниями таймера. Значения регистров TPERIOD и TSCALE могут загружаться с шины DMD. Таким образом, с помощью таймера можно генериро- вать прерывания каждые (TPERI0D+1)*(TSCALE+1) циклов, т.е. от 1 до FFFFFF16=1677721510 циклов. При тактовой частоте процессо- ра 40МГц таймер может формировать прерывания с периодом от 20 нс до 0,3 с. При необходимости прерывания таймера можно маскировать, сбрасывать или принудительно устанавливать программным образом. 204
Гпава 20. Таймер Ниже приведен пример команд инициализации таймера: {Регистр таймера TPERIOD=Ox3FFD (Регистр периода)} AX0=0X7FFF; DM(TPERIOD)=AXO; {Регистр таймера TCOUNT=Ox3FFC (Регистр счетчика)} AX0=0X7FFF; DM(TCOUNT)=AXO; {Регистр таймера TSCALE=0x3FFB (Регистр масштабирования)} АХО=255;{ОТ О ДО 255} DM(TSCALE)=AXO; Строка обработки прерывания в программе может иметь сле- дующий вид: jump V_TIMER; nop; nop; nop; {Вектор прерывания таймера} Следующий пример обработчика прерывания таймера позволя- ет автоматически наращивать значения ячейки памяти 0x3000 и выводить эти значения в порт ввода-вывода по адресу 2000. {===== Обработчик прерывания таймера =====} V_TIMER: ENA SEC_REG; AX0=DM(0X3000); AR=AX0 + 1; DM(0X3000)=AR; IO(2000)=AR; RTI; Подобным образом можно организовывать автоматическую ре- генерацию динамической памяти, подключаемой к сигнальному процессору. Учитывая, что объем такого типа памяти составляет десятки миллионов байт в одной микросхеме, можно догадаться о мощности устройств, создаваемых с ее применением. В то же вре- мя регенерация динамической памяти очень легко решается при подключении ее к сигнальному процессору. 205
Глава 21. Синхронные последовательные порты В этой главе говорится о двух синхронных последователь- ных портах, входящих в состав сигнального процессора, об их устройстве, назначении и использовании. Кроме рассмотренных нами вычислительных и других уст- ройств, сигнальный процессор имеет встроенные коммуникацион- ные средства в виде двух синхронных последовательных портов, называемых SPORTO и SPORT1. Данные порты поддерживают множество последовательных протоколов обмена данными и, кро- ме того, обеспечивают прямое соединение процессоров в много- процессорной системе. Рассмотрим подробнее эти устройства и команды, которыми они управляются. Каждый SPORT имеет пять интерфейсных линий: SCLK - тактовый сигнал; RFS - прием кадровых синхроимпульсов; TFS - передача кадровых синхроимпульсов; DR - прием данных; DT - передача данных. SPORT1, в отличие от SPORTO, имеет возможность программ- но переназначать все сигнальные линии, кроме SCLK. Описание выводов последовательных портов сигнального процессора ADSP- 2181 приведено в табл. 21.1. SPORTO и SPORT1 способны одновременно принимать после- довательный поток данных на входе DR и передавать последова- тельный поток через выход DT, обеспечивая тем самым дуплекс- ный режим работы. Кроме того, передаваемые и принимаемые данные могут быть аппаратно запакованы и распакованы с помо- щью аппаратного блока компандирования. Данная процедура ши- роко применяется в аппаратуре цифровой связи. Биты данных син- хронизируются тактовыми синхроимпульсами SCLK внутреннего генератора, если процессор запрограммирован как источник син- хронизации. Если порт запрограммирован в режим внешней син- хронизации, SCLK становится входом для внешних импульсов син- хронизации. 206
Гпава 21. Синхронные последовательные порты Таблица 21.1 Описание выводов последовательных портов сигнального процессора ADSP-2181 Сигнал Направ- ление Назначение DT0 О Передача данных TFS0 I/O Кадровая синхронизация передачи RFS0 I/O Кадровая синхронизация приема DR0 I Прием данных SCLK0 I/O Программируемый генератор порта 0 DT1/FO О Передача данных или выходной флаг TFS1/IR Q1 I/O Кадровая синхронизация передачи или внеш- ний запрос прерывания 1 RFS1/IR Q0 I/O Кадровая синхронизация приема или внешний запрос прерывания 0 DR1/FI I Прием данных или входной флаг SCLK1 I/O Программируемый генератор порта 1 l-вход, О-выход, 1/О-вход/выход. Сигналы кадровой синхронизации RFS и TFS используются для указания начала слова последовательно передаваемых данных или потока последовательно передаваемых слов. Эти сигналы так- же могут генерироваться внутри процессора или формироваться извне. На рис. 21.1 показана структурная схема последовательного порта. Данные, предназначенные для передачи, записываются через шину данных DMD из внутреннего регистра процессора в регистр данных передатчика порта ТХ. Эти данные могут перед передачей сжиматься в блоке компандирования (упаковки-распаковки) при за- дании такого режима. После чего данные автоматически передают- ся в сдвиговый регистр передатчика. Из регистра сдвига биты пе- редаются на вывод последовательного порта DT, начиная со стар- шего разряда, синхронно с тактовыми синхроимпульсами SCLK. Приемник последовательного порта принимает данные с вывода DR, также синхронно с тактовыми синхроимпульсами SCLK. После приема одного слова данные распаковываются в блоке компандирования (если такая процедура была предварительно программно задана), 207
Часть III. Вычислительные и аппаратные устройства Шина DMD 16 Рис. 21.1. Структурная схема последовательного порта а затем передаются в регистр данных приемника RX последовательно- го порта. Таким образом, происходит аппаратная одновременная пе- редача и прием последовательных данных в обоих портах. После записи данных в регистр ТХ последовательного порта этот порт готов к передаче данных. Передача начинается синхрон- но с сигналом TFS. После начала передачи каждое слово, записан- ное в регистр ТХ, подается во внутренний сдвиговый регистр пере- датчика, откуда оно передается на выход последовательно по би- там, начиная с самого старшего бита. Каждый бит сдвигается по переднему фронту тактового синхроимпульса. После окончания пе- редачи первого (самого старшего) бита слова последовательный порт генерирует прерывание передатчика. Несмотря на то, что пе- редача первого слова продолжается, становится возможной запись нового слова данных в регистр ТХ. В приемнике последовательного порта биты накапливаются в том же порядке, как они поступают во внутренний сдвиговый ре- гистр приемника. По окончании приема одного целого слова оно записывается в регистр RX, и последовательный порт генерирует прерывание приемника. 208
Гпава 21. Синхронные последовательные порты Благодаря имеющейся возможности программной настройки конфигурации портов, достигается их гибкость в работе и совмес- тимость с другими типами последовательных портов. Режим рабо- ты каждого последовательного порта задается программно с по- мощью регистров управления. Назначение регистров управления последовательных портов сигнального процессора, а также назна- чение и приоритетность прерываний последовательных портов SPORTO и SPORT 1 были подробно описаны ранее. Кроме дуплексного режима работы, каждый SPORT имеет двойную буферизацию. Т.е. приемник и передатчик последовательного порта имеют регистр данных для передачи слов данных в процессор и из него, а также сдвиговые регистры данных. Двойная буферизация со- кращает время для обслуживания последовательного порта. SPORTO и SPORT1 могут самостоятельно формировать такто- вые импульсы синхронизации последовательных потоков данных в широком диапазоне частот или использовать внешние тактовые синхроимпульсы. Каждый последовательный порт поддерживает длину слова по- следовательно передаваемых и принимаемых данных от трех до шестнадцати бит. Приемник и передатчик последовательного порта может функ- ционировать как с использованием сигналов кадровой синхрониза- ции, так и без кадровой синхронизации. Сигналы кадровой синхронизации могут быть активными по высо- кому или по низкому уровню и с программируемой длительностью. SPORTO и SPORT1 могут выполнять аппаратное компандирова- ние по A-закону или Мю-закону, согласно рекомендациям Междуна- родного консультативного комитета по телеграфии и телефонии (МККТТ) G.711. Каждый последовательный порт может работать в режиме авто- буферизации. Используя генераторы адреса данных, каждый по- следовательный порт может автоматически принимать и переда- вать весь циклический буфер со скоростью: одно слово данных за один процессорный цикл. Приемник и передатчик последовательных портов способны ге- нерировать прерывания по завершению передачи слова данных или после передачи целого буфера в режиме автобуферизации. Порты имеют возможность задания режима кадровой синхрони- зации. В нормальном режиме сигнал кадровой синхронизации фор- мируется раньше начала первого бита на один синхросигнал, а в альтернативном режиме сигнал кадровой синхронизации формиру- 209
Часть III. Вычислительные и аппаратные устройства ется одновременно с первым битом информации. В обоих режимах биты информации приемника фиксируются по заднему фронту так- тового сигнала SCLK, а передаваемые биты информации поступа- ют на выход передатчика по переднему фронту сигнала SCLK. Пример диаграмм работы порта в различных режимах работы при передаче и приеме слов длиной в четыре бита информации показан на рис. 21.2 - 21.13. Описание рисунков диаграмм для удобства пользования сведено в табл. 21.2. Таблица 21.2 Описание рисунков диаграмм Номер рисунка Направле- ние потока Режим кадро- вой синхрони- зации Поток дан- ных Наличие син- хронизации 21.2 Прием Нормальный С интерва- лами Есть 21.3 Прием Нормальный Непрерыв- ный Есть 21.4 Прием Альтернатив- ный С интерва- лами Есть 21.5 Прием Альтернатив- ный Непрерыв- ный Есть 21.6 Прием Нормальный Непрерыв- ный Нет 21.7 Прием Альтернатив- ный Непрерыв- ный Нет 21.8 Передача Нормальный С интерва- лами Есть 21.9 Передача Нормальный Непрерыв- ный Есть 21.10 Передача Альтернатив- ный С интерва- лами Есть 21.11 Передача Альтернатив- ный Непрерыв- ный Есть 21.12 Передача Нормальный Непрерыв- ный Нет 21.13 Передача Альтернатив- ный Непрерыв- ный Нет 210
Гпава 21. Синхронные последовательные порты RFS INPUT №№№№» DR Рис. 21.3 SCLK RFS OUTPUT RFS INPUT DR Рис. 21.4 SCLK RFS OUTPUT RFS INPUT DR Рис. 21.5 211
Часть III. Вычислительные и аппаратные устройства sclk _ГУ_ГУ_ГУ_ГУ_ГУ—ГЛ^Г\_ГГ_Г^^___ГУ— Рис. 21.6 SCLK Рис. 21.7 sclk ~ГГ__Г\~ГГ-—ГЛ~ГУ-_ГЛ—Г\_Г\_^Г^ГУ~ГГ—Г TFS OUTPUT TFS INPUT №)Ж®Ж DT ----------( B3 x B2 Г"вТ <~вГТ~вГТ^ГТ~во~^ SCLK TFS OUTPUT TFS INPUT Рис. 21.8 И^ЭвННв 7 во у DT < B3 X~~B2~~X В1 X ВО X ВЗ X B2 X В1 X ВО X B3 XB2 Рис. 21.9 212
Гпава 21. Синхронные последовательные порты sclk —ГЛ—ГЛ_ГЛ_ГЛ_ГЛ_ГЛ—ГЛ__гл_ГЛ_ГЛ_гл_ OUTPUT TFS INPUT ШШШШШ ЮЖШМВЖД DT ODGbiXIOZboD-------------ГвТУ~вГТ~вГТ~во~> Рис. 21.10 SCLK TFS OUTPUT TFS INPUT ММИ—ffl OOCZbOZboZZKZXZbOZjiZOlZOoZ>- Рис. 21.11 SCLK TFS DT -----------( вз B1 y~~BO~)( ВЗ у B2 x B1 X BO X ВЗx B2 Рис. 21.12 SCLK dt ----------( вз Г~вП bi у во X вз X В2 Х~~вТ~Х во X вз Х~~В2 Рис. 21.13 213
Часть III. Вычислительные и аппаратные устройства SPORTO в отличие от SPORT1 может кроме того работать в ре- жиме многоканальности. Т.е. он может избирательно принимать и передавать данные последовательного потока с использованием мультиплексирования 24 или 32 каналов с временным разделением информации. Это необходимо для использования цифровых ком- муникационных интерфейсов Т1 и Е1, а также может использовать- ся для сетевой коммуникации нескольких процессоров. В однока- нальном режиме сигналы кадровой синхронизации обозначают на- чало слова или непрерывного потока слов. В многоканальном ре- жиме сигнал кадровой синхронизации приема данных RFS0 обо- значает начало конкретного слова в потоке данных, состоящих из 24 или 32 слов, для одновременного приема и передачи этого сло- ва по раздельным линиям приемопередатчика. Многоканальный режим разрешается установкой в единичное состояние 15-го раз- ряда в регистре управления SPORTO по адресу 0x3FF6. Формат пакетов при этом определяется разрядом 9 этого же регистра. Если он установлен в единицу, будет задан 32-словный формат, при ус- тановке в ноль задается 24-словный формат данных. Кроме того, разряды с 10-го по 13-й этого же регистра, с условным названием MFD, устанавливают задержку сигнала кадровой синхронизации в многоканальном режиме для того, чтобы кадровый синхроимпульс обозначал необходимое для приема и передачи слово в потоке данных. Диаграмма задержки сигнала кадровой синхронизации для нескольких значений MFD при работе SPORTO в многоканальном режиме показана на рис. 21.14. RFS MFD=9_/ \_______________________________________________ RFS MFD=8 I \______________________ RFS MFD=7___I \____________________ RFS MFD=6/ \ RFS MFD=5________I \_______________ RFS MFD=1 RFS MFD=O Рис. 21.14. Диаграмма задержки сигнала кадровой синхронизации 214
Гпава 21. Синхронные последовательные порты WO-3 W8-11 W16-19 П DR ЙШГТТТ К Л К )! XX К X К К К Л I К XX XX к X ш DT —иши (ХИ) (ИХ) TDV —J \ / \ / \ Рис. 21.15. Пример диаграммы работы SPORTO в многоканальном режиме Сигнал кадровой синхронизации передатчика TFS0 в многока- нальном режиме работает как сигнал TDV (Transmit Data Valid), пе- реводимый как правильные данные передачи и предназначенный для управления включением и отключением внешней буферной логики передатчика. Фактически этот сигнал осуществляет строби- рование тех слов данных, которые были разрешены в конфигура- ционном регистре для передачи. В зависимости от установки 7-го разряда в регистре управления SPORTO по адресу 0x3FF6 описан- ный сигнал может иметь активное значение с высоким или с низким уровнем потенциала. На рис. 21.15 приведен пример диаграммы работы SPORTO в многоканальном режиме. Рассмотрим пример программного конфигурирования обоих по- следовательных портов сигнального процессора, приведенный ниже. { = = = = = = = = = = = = = = = = = = = =: = = = = =:=: = =:=: SPORTO ================================== } { Регистры разрешения мультиканального приема/передачи данных SPORTO } { Регистр разрешения приема SPORTO_RX_Channelsl = 0x3ffa } { Биты: FEDCBA9876543210 0-игнорирован 1-доступен } { Каналы: 3322222222211111 } { 1098765432109876 } ахО = Ь#0000000000000000; DM(SPORTO_RX_Channelsl) = ахО; { Регистр разрешения приема SPORTO_RX_ChannelsO = 0x3ff9 } { Биты: FEDCBA9876543210 О-игнорирован 1-доступен } { Каналы: 111111 } ( 5432109876543210 } ахО = Ь#0000000000000010; DM(SPORTO_RX_ChannelsO) = ахО; { Регистр разрешения передачи SPORTO_TX_Channelsl = 0x3ff8 } { Биты: FEDCBA9876543210 0-игнорирован 1-доступен } { Каналы: 3322222222211111 } { 1098765432109876 } ахО = Ь#0000000000000000; DM(SPORTO_TX_Channelsl) = ахО; { Регистр разрешения передачи SPORT0_TX_Channels0 = 0x3ff7 } { Биты: FEDCBA9876543210 0-игнорирован 1-доступен } { Каналы: 111111 } { 5432109876543210 ) ахО = b#0000000000000011; DM(SPORT0_TX_Channels0) = ахО; { Регистр SPORT0_Control_Reg = 0x3FF6 (Регистр управления SPORTO) ) { Биты: FEDCBA9876543210 ) { Исх.сост: 0000000000000000 } ахО = Ь#1100011100110111; DM(SPORT0_Control_Reg) = ахО; 215
Часть III. Вычислительные и аппаратные устройства { Регистр SPORTO_SCLKDIV = 0x3FF5 (Модуль деления последоват. такт, импульсов) } { частота CLKOUT внутренняя удвоенная частота процессора } { SCLKDIV = -------------------------------------------------------- - 1; } {(кадр.с.и.) 2*(частота SCLK синхронизация бит порта) } { } { SCLKDIV =(( 2*16384КГц ) / ( 2*2048КГц )) -1 = 8-1 = 7 } ахО = 7; DM(SPORTO_SCLKDIV) = ахО; { Регистр SPORTO_RFSDIV = 0x3FF4 (Модуль деления последоват. такт, импульсов) } { частота SCLK } { RFSDIV = ---------------- -1; } { частота RFC } { RFSDIV = 2048КГЦ / 8КГц - 1 = 256-1 = 255 } ахО = 255; DM(SPORTO_RFSDIV) = ахО; ( Регистр SPORTO..Autobuf = 0x3FF3 (Регистр управления автобуферизацией SPORTO) } { Биты: FEDCBA9876543210 } { Исх.сост: 0000XXXXXXXXXX00 } ахО = Ь#0000011110101011; DM(SPORTO_Autobuf) = ахО; { ============================= S Р О R Т 1 ====я==SXSSS==K===SZSSS=S========= } { Регистр SPORTl_Control_Reg = 0x3ff2 (Регистр управления SPORT1) } { Биты: FEDCBA9876543210 } { Исх.сост: 0000000000000000 } ахО = b#0111101001001001; DM(SPORTl_Control_Reg) = ахО; { Регистр SPORT1_SCLKDIV = 0x3FFl (Модуль деления последоват. такт, импульсов) } { частота CLKOUT внутренняя удвоенная частота процессора } { SCLKDIV = ------------------------------------------------------- - 1; } {(кадр.с.и.) 2*(частота SCLK синхронизация бит порта) } { } { SCLKDIV =(( 2*16384КГц ) / ( 2*115200 Гц )) -1 = 142-1 = 852 } ахО = 141; DM(SPORT1_SCLKDIV) = ахО; { 115200 бод } { Регистр SPORT1_RFSDIV = 0x3FF0 (Модуль деления последоват. такт, импульсов) } { частота SCLK } { RFSDIV = ----------------- - 1; (или число бит в пакете -1) } { частота RFC } { RFSDIV = 19200 Гц / 1920 Гц - 1 = 10-1 = 9 ахО = 9; DM(SPORT1_RFSDIV) = ахО; { Регистр SPORTl_Autobuf = 0x3FEF (Регистр управления автобуферизацией SPORT1) } { Биты: FEDCBA9876543210 } { Исх.сост: 0000XXXXXXXXXX00 } ахО = b#0000000000000000; DM(SPORTl_Autobuf) = ахО; В первых двух блоках программы разрешается работа первого канала приемника SPORTO. В следующих двух блоках программы разрешается работа нулевого и первого канала передатчика SPORTO. Далее в регистр SPORTO_Control_Reg заносится инфор- мация о длине слова, формате данных, выравнивании слова, типе компандирования, инвертировании кадровых импульсов и др. ре- жимов работы порта. После чего вычисляется коэффициент деле- ния для тактовой частоты синхронизации SCLK и записывается в регистр SPORTO_SCLKDIV. Аналогично, в следующем блоке про- граммы, производится вычисление коэффициента деления для так- товой частоты кадровых импульсов и запись этого значения в ре- гистр SPORTO_RFSDIV. Завершается конфигурирование SPORTO записью режима работы порта в регистр управления автобуфери- зацией SPORTO_Autobuf. Аналогично производится конфигуриро- вание порта SPORT 1. 216
Гпава 21. Синхронные последовательные порты Прием и передача данных через порты могут осуществляться с помощью регистров передатчика ТХО, ТХ1 и регистров приемника RXO, RX1 в портах SPORTO и SPORT1 соответственно. Эти регист- ры не отображены в карте памяти процессора, но распознаются мнемоникой ассемблера. Доступ к этим регистрам обеспечивается в произвольный момент во время выполнения программы. Напри- мер, следующая команда записывает данные из регистра АХО в регистр передатчика SPORT 1: ТХ1 =АХ0; {Содержимое регистра АХО передается в порт SPORT1} Естественно, что перед этим SPORT1 должен быть программно сконфигурирован ранее описанными командами. Следующая команда запишет принятые данные из регистра приемника порта SPORTO в регистр АХО: АХО = RX0; {Содержимое регистра приема SPORTO записыва- ется в регистр АХО} 217
ЧАСТЬ IV. СРЕДА РАЗРАБОТКИ VISUAL DSP++ В этой части книги говорится об установке на компью- тер современного средства разработки программ для сиг- нальных процессоров - программного пакета Visual DSP++, его запуске и работе. Приводятся примеры программ и их отладка в среде разработки. Демонстрируется спектраль- ный анализ сигнала с помощью Visual DSP++. Рассказывается о программирование на Си в данной среде разработки. 218
Глава 22. Установка В этой главе говорится об установке на компьютер совре- менного средства разработки программ для сигнальных процес- соров - программного пакета Visual DSP++. Введение После знакомства с архитектурой и аппаратными блоками сиг- нального процессора, а также с его системой команд и директивами языка программирования, пришло время познакомиться с програм- мами, реализующими различные методы математической обработ- ки с помощью сигнального процессора. В предыдущих материалах мы рассмотрели средства програм- мирования сигнальных процессоров для операционной системы MS DOS. В настоящее время существует более мощное и современное средство программирования для операционной системы Windows, которое носит название Visual DSP++. Для знакомства с новыми примерами программ удобнее исполь- зовать Visual DSP++, поскольку он имеет интегрированный интер- фейс разработчика и обладает мощными средствами визуализации и отладки программ. В этом читатели вскоре смогут убедиться са- мостоятельно. Программный пакет Visual DSP++ свободно распространяется фирмой Analog Device со своего сервера в Интернете. Он пред- ставляет собой тестовую (trial) версию и может быть загружен по адресу http://www.analog.com/processors/resources/crosscore. Кроме самого программного пакета, необходимо скачать ин- сталлятор лицензий и пройти бесплатную регистрацию на сервере для получения лицензии. Тестовую версию Visual DSP++, кроме Интернета, можно полу- чить в представительстве компании Analog Device, или у офици- альных дистрибьюторов компании на компакт-диске. Фирма Analog Device периодически создает новые версии Visual DSP++, тем не менее при этом соблюдается совместимость с предыдущими про- граммными продуктами, и интерфейс данного пакета легко узнава- 219
Часть IV. Среда разработки VisualDSP++ ем для любой версии. Поскольку описываемый программный пакет не русифицирован и содержит всю информацию на английском языке, ниже дается методика установки программного пакета Vis- ual DSP++, с целью избавления от ошибок при установке пакета и экономии времени читателей. Установка Рассмотрим поэтапно установку программного пакета Vis- ual DSP++ на примере версии 3.0. Вначале необходимо загрузить файл программы установки паке- та и файл программы его лицензирования с источника, указанного выше. После успешной загрузки программ установки и лицензиро- вания, необходимо получить серийный номер для последующей регистрации пакета, зайдя в Интернет по ссылке http://forms.analog.eom/Form_Pages/processors/visualDSPTestDrive.a sp и заполнив одностраничную форму. Серийный номер пакета бу- дет выслан вам по электронной почте на адрес, который вы укаже- те в анкете. Для установки пакета на компьютер необходимо иметь не менее 100 Мб свободного дискового пространства. Процесс установки Vis- ual DSP++ начинается с запуска самораспаковывающегося файла VisualDSP-H-3.0for21xx.exe. При этом на экране монитора отобразит- ся окно (рис. 22.1), текст которого сообщает о том, что вам будет предложен каталог для распаковки пакета перед его установкой. Этот временный каталог необходим только для установочных целей и не является конечным каталогом, куда будет окончательно установлено приложение. Если вы установили ранее любое из аппаратных устройств (например, такое, как EZ-KIT Lite, или аппаратные средства ICE), вам понадобится в дальнейшем указать «Мастеру Новых Уст- ройств» на этот каталог, когда Windows пытается установить драйверы устройств. Ознакомившись с данным сообщением, необходимо нажать про- граммную кнопку «Далее». При этом появится новое окно (рис. 22.2), в котором предлагается ввести название временного катало- га, куда будут распакованы файлы программы. Если указанный ка- талог не существует, его необходимо будет создать. Вы можете вручную подкорректировать указанный каталог или выбрать его из созданных ранее, нажав кнопку «Browse». После чего необходимо нажать кнопку «Continue». 220
Гпава 22. Установка You are about to be prompted for a directory in which to unpackage this installation. This is a temporary directory for installation purposes only, not the final directory where the application will be installed. I f you are installing any hardware device drivers (e. g., you | are installating EZ-KIT Lite or ICE hardware), you will need j to point Windows’ "New Hardware Wizard" to this directory when Windows attempts to locate the device drivers. | |й||Ш • ] Далее? I Отмена Рис. 22.1 VisualDSP •+ +3.0 for 21 ик - lost* XJ Installation Folder Please enter the folder where the files should be unpacked. If the folder does not exist, you will be prompted to create it. Browse... J "continu—। Отмена j Рис. 22.2 221
Часть IV. Среда разработки VisualDSP++ The specified output folder does not exist. Create it? Рис. 22.3 Далее программа предложит создать несуществующий каталог (рис. 22.3) и начнет распаковку файлов в этот каталог (рис. 22.4), если будет нажата кнопка «Да». Reading package... Cancel | Рис. 22.4 После чего на экране кратковременно отобразится окно с цвет- ной заставкой программного пакета Visual DSP++ (рис. 22.5) и от- кроется окно с приглашением процедуры установки пакета (рис. 22.6). В этом окне сообщается о том, что на вашу систему будет произведена установка программного обеспечения для сигнальных процессоров семейства 218х и 219х, инструменты, спецификации и документация. Рис. 22.5 222
Гпава 22. Установка Рис. 22.6 После нажатия на кнопку «Next» установка будет продолжена и на экране отобразится лицензионное соглашение (рис. 22.7), определяю- щее права и обязанности пользователя данного продукта. Для про- должения установки необходимо подтвердить свое согласие с усло- виями использования пакета путем нажатия кнопки «Yes». Please review the Analog Devices Software license Agreement before proceeding janalog DEVICES SOFTWARE LICENSE AGREEMENT This is a legal document between you (either an individual or entity) and Analog Devices. Inc. (ADI). Read the following terms and conditions carefully before using the accompanying software. They define your rights and obligations with respect to the enclosed ADI -software and documentation (SOFTWARE). If you do not agree to the terms of this agreement, promptly return the software and accompanying documentation to the place you obtained them or to Analog Devices Inc. If the return is postmarked, or is received, within thirty (30] days of shipment charges for the software will be removed from your bil USING THE SOFTWARE INDICATES YOUR AGREEMENT WITH AND By clicking Yes, you accept the terms of the License Agreement. <Back | J Yes- ^~] No Рис. 22.7 223
Часть IV. Среда разработки VisualDSP++ Рис. 22.8 Далее будет предложено ввести ваше имя и название компании (рис. 22.8). Здесь необходимо ввести те имена, которые вы исполь- зовали при заполнении анкеты на получение серийного номера для регистрации пакета, например Ivan Soft. ¥«ua»5P++ 3.0 For ? 1 Чх Destination Location Please enter the location where you would like to install the program. You may type a new folder name or click the Browse button to find a new location. Browse... < Back I Next > I Cancel Рис. 22.9 224
Гпава 22. Установка Нажмите на кнопку «Next», и перед вами откроется новое окно установки (рис. 22.9), в котором предлагается ввести рабочий ката- лог программы, куда будет установлен сам программный пакет Vis- ual DSP++. Здесь можно оставить все без изменений или выбрать другой каталог, по аналогии с процедурой определения временного ката- лога для установки программы. Для продолжения установки нажмите кнопку «Next». Теперь от- кроется окно выбора устанавливаемых компонентов (рис. 22.10). Visthill)SI4 I 3.1 Ho Component Selection install ______________________________________ V* VisualD5P++ Development Environment V VisualDSP++ Help ADSP-2191 EZ-KIT Lite ADSP-2192-12 EZ-KIT Lite ADSP-21990 EZ-KIT Lite ADSP-2181 EZ-KIT Ute ADSP-2189 EZ-KIT Lite Space Required on C: Space Available on C: -............. 93944 К 3992984 К This component includes all i|il' BWit Cancel.. j Рис. 22.10 Здесь необходимо отметить те вспомогательные компоненты, которыми вы располагаете. В нашем случае можно отметить ADSP 2181 EZ-KIT Lite, поскольку тестовая плата, описанная ранее, со- вместима с указанным устройством, и ею можно пользоваться, так же как отладочным средством ADSP 2181 EZ-KIT Lite. В принципе, можно отметить все компоненты или, наоборот, не отмечать ни од- ного дополнительного компонента, поскольку сам программный па- кет Visual DSP++ в любом случае все равно будет работоспособен. Установка компонентов влияет лишь на присутствие или отсутствие дополнительных функций пакета. *4* Й f' < . 225
Часть IV. Среда разработки VisualDSP++ Installing: VisualDSP++ Development Environment Files... C: 'v.. WisualD SP\218x\etc\ vid!218x-be. exe Cancel Рис. 22.11 После нажатия кнопки «Next» процесс инсталляции продолжит- ся, и на экране начнется отображение окон, подобных представ- ленным на рис. 22.11 и рис. 22.12, в которых сообщается об именах распаковываемых файлов и краткая информация о самом пакете соответственно. Заканчивается первый этап установки отображением окна при- веденного на рис. 22.13, в котором сообщается об успешном окон- чании установки и предлагается нажать кнопку «Finish» для завер- шения установки. X 0 for 21^х/219х Development Tools \ from Analog' Devices . ; /. .. Statistical Profiling • Nonantrusive H "" ' * identify bottlenecks quickly . and efficiently , ' • Based on standard statistical methods I I n staffing. VisuatD S P< + 0 evetopmerA E nvn onnwnt Fite« К Рис. 22.12 226
Гпава 22. Установка Iнг 7 18и '2.1 Cfcck Finish to ext Рис. 22.13 Следующим шагом в установке пакета является его регистра- ция. Для выполнения этой процедуры необходимо запустить файл лицензирования Licenselnstaller5RC45.exe, который после запуска отобразит окно (рис. 22.14) с сообщением, в котором предлагается выбрать тип лицензии. Рис. 22.14 227
Часть IV. Среда разработки VisualDSP++ Рис. 22.15 Самым простым и распространенным видом лицензирования является установка одиночного пользователя лицензии (Install Sin- gle User License). Для выполнения этого выбора необходимо нажать соответст- вующую надпись в окне. После нажатия программной кнопки «Next» на экране появится окно с содержанием лицензионных прав (рис. 22.15). Для продолжения установки необходимо подтвердить свое со- гласие с условиями использования пакета путем нажатия про- граммной кнопки «Yes». После этого появится окно (рис. 22.16) с предложением ввести серийный номер продукта, который был выслан вам по электронной почте и обычно представляет собой строку, состоящую из 3 букв и 15 цифр. После введения номера и нажатия кнопки «Next» появится окно с сообщением о том, что данный серийный номер позволяет вам использовать установленный продукт, включающий в себя среду Visual DSP++, симулятор, компилятор, ассемблер и компоновщик, в течение 30 дней с момента регистрации (рис. 22.17). 228
Гпава 22. Установка Рис. 22.16 21 xx Family Components: This serial number licenies The following components: VisualDSP++ E nvironment Simulator Compiler Assembler Linker This is a demonstration license. It will expire in 30 days. 1.н cnsrd ( oniponrnl s < Back |Cancel. j Рис. 22.17 229
Часть IV. Среда разработки VisualDSP++ Рис. 22.18 Нажмите на кнопку «Next». В результате на экране появится ок- но, сообщающее об успешном лицензировании пакета Vis- ual DSP++ (рис. 22.18). Здесь необходимо нажать кнопку «Finish». На этом процесс установки программного пакета Visual DSP++ заканчивается, и можно приступать к его использованию. Кроме того, теперь можно удалить все файлы из временного каталога, по- скольку программа инсталляции не делает этого самостоятельно. 230
Глава 23. Запуск VisualDSP++ В этой главе говорится об использовании современного сред- ства разработки программ для сигнальных процессоров - про- граммного пакета VisualDSP++. После установки программного пакета VisualDSP++ на компью- тер можно начать работу с ним. Установленная программа нахо- дится по умолчанию в каталоге eC:\Program_Files\Analog De- vices\VisualDSP\System\ldde.exee и запускается по пути: Пуск- >nporpaMMbi->VisualDSP->VisualDSP++ Environment. При первом запуске этой программы на экране монитора ото- бразится окно (рис. 23.1), текст которого сообщает о том, что ваша лицензия на использование VisualDSP++ истечет через 30 дней. После чего необходимо будет либо купить, либо вновь зарегистри- ровать данный программный пакет. Temporary License Notification Your kense to use the VisualD3P++ IDDE will expire in 30 days, Рис. 23.1 Окно, появляющееся после истечения срока лицензии, приведе- но на рис. 23.2. В нем сообщается об окончании срока лицензии и предлагается посетить в Интернете страницу по адресу: http://www.analog.com/dsp/tools/register\VisualDSP\System\reg_info.txt, содержащую регистрационную информацию. До истечения лицензии данное окно не появляется, и после на- жатия программной кнопки «Ок» на экране появится окно новой сессии (рис. 23.3), в котором необходимо выбрать семейство про- цессоров, платформу и тип процессора, с которым будет выпол- няться работа. 231
Часть IV. Среда разработки VisualDSP++ Рис. 23.2 Здесь можно выбрать вариант, представленный на рис.23.3 для работы с устройством EZ-KIT Lite или тестовой платой, описанной ранее, либо задать вариант, представленный на рис. 23.4 для ра- боты в режиме программной эмуляции процессора. Во втором слу- чае никаких аппаратных средств при использовании VisualDSP++ не потребуется. Рис. 23.3 232
Гпава 23. Запуск VisualDSP++ New Session Debug target: |ADSP-218x Family Simulator 2 Platform: [Simulation Session game:...... |ADSP-2181 Simulation Processor: ADSP-2183 ADSP-2184 ADSP-2185 ADSP-2186 ADSP-2187 ADSP-2188 ADSP-2188 Cancel j Рис. 23.4 После нажатия кнопки «Ок» откроется основное рабочее окно программы (рис. 23.5), представляющее собой среду разработки. □____________________________________________ Be Sesrbrr Project (Mister Memory Cebuo Settees loots Wfodo» Beb С й I.» 1&: !S ¥ .% E?- ' : Л Й 1 -H 0= с: Гл'% % % Jj' a* t j Analog Oev ice» вши х1 ]№ й :| ' J "ж ® 1T-a 'if Г Я m' 't:=' “ f ® © Г *• >ф (ООООГ.,-) [7: : £000002) : f,GGOOP S’j I (COCOO-;) i t :>oooe<sj - ; [cococ?:. / Project [* (OOOOO.3) roocooa.) [COl.'OCij (CC.C.OOB) (oooooc) Еоооадм tC-OOOOE) [CGOO&FJ (COCCIO' £0000 112 [икню ILlU Ready ................... ' ” ........................ • '' »*ed........i...............!........... ‘.. ЙМ; 3! Рис. 23.5 233
Часть IV. Среда разработки VisualDSP++ Среда разработки VisualDSP++ предполагает работу как с от- дельными файлами, так и с проектами, включающими в себя набор файлов, различных по назначению и содержанию. Это могут быть файлы с программами, входными и выходными данными, настрой- ками среды разработки и т.п. Рассмотрим интерфейс пользователя VisualDSP++. В верхней части программы находится главное меню, с помощью которого можно выполнять различные программные действия. Ниже разме- щаются кнопки меню инструментов, дублирующие некоторые ко- манды главного меню. В левой части программы размещается окно проекта, в котором содержатся сведения о файлах проекта. Справа находится окно дизассемблированного кода. Окно выходной ин- формации, содержащее стандартные текстовые сообщения ввода- вывода, сообщения об ошибках и др. сообщения, находится внизу. Средняя часть экрана отведена под окно редактирования. Внешний вид среды разработки может настраиваться по вкусу пользователя, позволяя отображать необходимую для отладки программы ин- формацию. Более детально познакомиться с интерфейсом среды можно, изучая примеры программ, входящих в состав самого паке- та, и с помощью встроенной электронной справки. Установленный на компьютере программный пакет VisualDSP++ включает в себя множество готовых примеров программ и большой объем справочной информации. Файлы с примерами программ и справкой находятся в каталогах «C:\Program_Files\AnalogDevicesWisualDSP\218x\Examples» и «C:\Program_Files\AnalogDevicesWisualDSP\Help». Рассмотрим работу программы на основе готового примера из самого пакета. Выберите в главном меню программы команду: Project->Open и в открывшемся окне диалога (рис. 23.6) укажите путь к проекту с именем Examplel в каталоге «C:\Program_Files\Analog Devices\VisualDSP\218x\ Examples\Example1». Откройте каталог «Examplel», выделите в нем файл проекта «Examplel» и нажмите кнопку «Открыть». После этого найдите в открывшемся проекте файл с названием «Vectadd.asm» и щелкните по нему дважды левой кнопкой мыши. В центре экрана откроется новое окно, для редактирования вы- бранного файла. Разверните это окно, щелкнув кнопку разворота окна, и закройте окно дизассемблирования, если оно открыто. 234
Гпава 23. Запуск VisualDSP++ lips 4» Pro jet I ?J_xJ Папка: | Examples "j] 4= © flt- Ю]- ... :2189М ASM Hardware Overlay ... jExamplel 2189M C Hardware Overlay .........-ExamplelP j A5M Soft Overlay Example ...jvcse .. ExampleZ : Examples Имя файла: (Examplel Открыть Тип Файлов: [Project Files (;dpi) 3 °™ена Рис. 23.6 Это позволит увеличить область редактирования, для удобства восприятия информации. Среда разработки примет при этом вид, подобный тому, что изображен на рис. 23.7. h Дла1од tteVtCCT VHwrfOSPt’-f [ MtI ;• I: ;-НИ Swnnl.HK.n I НЧ|>И'Г »: № № м» в.^ СФид >««₽ rook м> ~‘ '........JS!*) n s v а S3- - а м «5 -м & « : л л ч % ••«, *? t : Л / loebug ' Д j:S Ш % ОТ 0 441С « й- F <2 I1' 4 1) ЛГ О И d ' ШиязИ •_J Header Пег ;-i ZJ Linker Res ' J ADSP-2iei.lt > Project [ Vf.c!-or ДДД EMJ!l»»”T5«nr«; fdefine n 10 •define 2_ouc 0x100 .section/data datal; .VAR x_inpuc[n] • "xln.daf',’ .section/pa P^^da; ..VAk y_input[n] - '’Yin.dat"; .section/pa interrupts; .'••----Inr-titupr. veer ar. table.. _reset: ЛШР start; nop; nop; nop; /’ 9x0030: Feact vector*/ RTI; nop; nop; nop; СхООгК: 1RQ>V RTI; nop; nep; nop; /’ охипСЗ: TRQli*.' RTI; nop; nop; nop; ЗкОООС: IPOLO*/ P.TI; nop; nop; nop; 3x0010; s?0R7G ttansuit*/ RTI; nop; nop; nop; 0x0014: SPORTO receive*/ RTI; nop; nop; nop; uxuois; J___________J Рис. 23.7 235
Часть IV. Среда разработки VisualDSP++ Данный проект содержит программу, предназначенную для сло- жения двух векторов (массивов) данных xjnputfn] и y_input[n] и размещения результата по адресу ввода-вывода z_out. В програм- ме иллюстрируется начальная инициализация входных массивов и настройка генераторов адреса. Среда разработки VisualDSP++ по- зволяет по шагам посмотреть процедуру инициализации массивов, выборки чисел из памяти и их сложения в цикле. Массивы имеют длину п=10, объявленную в самом начале программы с помощью оператора: #define л 10. Результат сложения будет пересылаться в область ввода-вывода с адресом z_out=0x100, объявленным в про- грамме с помощью оператора: #define z_out 0x100. Массив данных x_input[n] будет храниться в памяти данных процессора после за- грузки из файла exin.date, что определено строками программы: .section/data datal; .VAR x_input[n] = exin.date; Второй массив данных y_input[n] будет храниться в памяти про- грамм процессора после загрузки из файла eyin.date, что определя- ется строками программы: .section/pm pm_da; .VAR yjnputfn] = eyin.date; Далее в программе размещаются векторы прерываний. Тело ос- новной программы состоит из строк: .section/pm program; start: I2=x_input; /‘pointer to x input buffer*/ L2=0; /‘noncircular buffer*/ I6=y_input; /'pointer to у input buffer*/ L6=0; M0=1; L0=0; M5=1; L5=0; CNTR=n-1; AXO=DM(I2,MO), AYO=PM(I6,M5); /'Get first data*/ DO addjoop UNTIL CE; AR=AX0+AY0, AXO=DM(I2,MO), AYO=PM(I6,M5); add_loop: io(z_out)=AR; /'Write output*/ AR=AX0+AY0; io(z_out)=AR; IDLE; Выполним данную программу в пошаговом режиме. Для этого вначале произведем компиляцию программы, нажав на клавиатуре клавишу F7. В результате программа будет скомпилирована, и ото- бразится окно, приведенное на рис. 23.8. 236
Гпава 23. Запуск VisualDSP++ □ 6» Е* 5««Son Wn» bow aegista №ror Й*Ч SettOgs Ьх* JAndox ЦНр =l®i?El п вав:5 з > - ®' М й *9«• л чч 4 «₽ t v h-a Ч •& Ч % & a S A [b.bug d ‘ jS И %а И 1»йа 4> а^Г ‘ 'Zs,-S' .-.*•; "иеСхнё”ГейЛхТоГ” r Ewmptel - J J Souice Filet fl Vectaddasm □ Header Fies •-I О Linker Fites J ADSP-218U .section/data total; .’/AR x_input(nj - "xin.tot"; •section/pm p»_to; • VAR yjnput[n] - "yin.tot"; section/pm. interrupts;_______... ________£ Ф /......re set: JUHP star t;. nop.; ...noy .. J ЭТТ;'nop; nop; nop; RTI; nop; nop; nop; RTI; nop; nop; nop; RTI; nop; nop; nop; RTI; nop; nop; nop; RTI; nop; nop; nop; RTI; nop; nop; nop; RTI; nop; nop; nop; RTI; nop; nop; nop; Lt!_____I ••ОС..Ж1 ;оо..-с'.п; LOO coo;: -j fooouon rcvz-ca-ii rococo «5 J CWGOH lOQOOO-rj CO coc-oej i'.'OOCOSj (OOOOOCl > UCIOOOEJ г ООО.OOF) tOOOOlO] M ........... I > il Pw>f«t Й1.ищ>й:кя-и*лм«/ H*ed Рис. 23.8 Этот же результат можно получить, выполнив команду главного меню Project->Build project или нажав соответствующую ей кнопку на панели инструментов. Из рисунка видно, что стрелка, показывающая очередную выполняемую программу, располагается напротив строки с меткой «reset». Кроме того, справа автоматически открывается окно дизассемблированных команд программы. Выполнять программу в пошаговом режиме можно, нажимая клавишу F11, выполнив команду Debug->Step Into или нажав соответствующую ей кнопку на панели инструментов. При каждом таком действии будет выполняться очередная строка команд. Результат работы программы можно наблюдать по измене- нию содержимого памяти и регистров процессора. Окна, отобра- жающие память процессора, вызываются с помощью главного меню «Memory». Для отображения окон с содержимым регистров процес- сора используется кнопка главного меню «Register». Для отображе- ния регистров удобно воспользоваться командой Register->Custom, которая позволяет выбрать только те регистры, которые необходимо видеть пользователю. При выполнении этой команды откроется окно, изображенное на рис. 23.9. 237
Часть IV. Среда разработки VisualDSP++ 1I ps^jisl ers to Display in a Window ] Cancet I Рис. 23.9 Выделяя в этом окне с помощью мышки необходимые для кон- троля регистры и щелкая по кнопке «Add», можно создать набор регистров для отображения на дисплее в одном окне. Кроме того, в строке «Title of window» можно задать название отображаемого ок- на. Таким образом, можно создать несколько окон для отображения различных групп регистров для контроля их состояния. Создав та- кое окно, можно продолжать выполнение программы по шагам. При этом в окне регистром будет видно изменение содержимого регист- ров, которые участвовали в выполнении очередной строки команд программы. Текущие изменения будут выделяться красным цветом. Выполнение программы завершается оператором IDLE, который переводит процессор в режим энергосбережения. Для повторного запуска программы необходимо вновь выполнить команду Project- >Build. Перед повторной компиляцией проекта в программу можно вносить собственные изменения с целью получения практики про- граммирования. Можно, например, изменить программу таким об- разом, чтобы результат сложения массивов записывался не по ад- ресу ввода-вывода, а в память данных. Закрытие проекта произво- дится командой Project-Close. 238
Глава 24. Работа с VisualDSP++ В этой главе рассматриваются очередные примеры про- грамм, способы настройки симулятора и получение загрузочного файла в среде разработки VisualDSP++. Рассмотрим еще один пример программы, который демонстри- рует работу с последовательным портом и предназначен для ос- воения работы с симулятором и потоками ввода-вывода. Откройте в установленном пакете Visual DSP++ каталог с при- мером проекта программы «Ехатр1е2», выделите в нем файл про- екта «Ехатр1е2» и нажмите кнопку «Открыть». После этого найдите в открывшемся проекте файл с названием «Sport.asm» и щелкни- те по нему дважды левой кнопкой мыши. В центре экрана откро- ется новое окно, позволяющее просматривать и редактировать выбранный файл. Разверните это окно, щелкнув кнопку разверты- вания окна. В этой программе выполняется инициализация последователь- ных портов SPORTO и SPORT1 с последующей передачей данных, используя процедуру прерываний. В обработчике прерываний процессор вначале считывает дан- ные из последовательного порта SPORT1, а затем передает их в этот же порт. Данный обработчик прерываний состоит из следую- щих строк: sample: AX0=RX1; /*принять данные в АХО*/ ТХ1 =АХ0; Лпередать данные из АХО*/ RTI; В рассматриваемой программе организован бесконечный цикл за счет того, что процессор находится в состоянии ожидания до тех пор, пока не будет сгенерировано прерывание от приемника SPORT1. Входные и выходные потоки данных могут моделировать- ся с помощью файлов. Перед запуском этой программы необходи- мо настроить потоки ввода-вывода. Для этого необходимо подключить ко входу и выходу порта фай- лы, которые будут содержать входные и выходные данные. Выпол- 239
Часть IV. Среда разработки VisualDSP++ Active streams: | OK ~| Cancel | Рис. 24.1. ните команду главного меню: «Setting->Streams2». После этого на дис- плее откроется окно «Streams», показанное на рис. 24.1. Щелкните в открывшемся окне по кнопке «Add» (добавить). Во вновь открывшемся окне «Add New Streams» (рис. 24.2) в группе настроек «Source» выберите группу «File» и, щелкнув по кнопке «Browse» (обзор), найдите, выделите и откройте файл «Serin.dat» с помощью кнопки «Орел» (открыть). Рис. 24.2. 240
Гпава 24. Работа с VisualDSP++ После чего выберите в списке «Format» строку «Binary». Остальные настройки данной группы оставьте без изменений. Теперь в группе на- строек «Destination» выберите в списке «Device» устройство Sport! и нажмите кнопку «Ок». После этого вновь открывается окно «Streams», в котором будет присутствовать заданная нами настройка. Далее необходимо подключить выходной файл. Вновь щелкните в окне «Streams» по кнопке «Add». В открывшемся окне «Add New Streams» в группе настроек «Source» переключитесь на группу «De- bug target» и выберите в списке «Device» устройство «Sportl». Те- перь в группе настроек «Destination» выберите группу «File» и, щелкнув по кнопке «Browse», найдите, выделите и откройте файл «Serout.dat» с помощью кнопки «Save» (сохранить) или задайте это имя для выходного файла. В списке «Format» выберите строку «Bi- nary» и нажмите кнопку «Ок». Теперь в открывшемся окне «Streams» будут присутствовать две записи настроек, показанные на рис. 24.3. Нажмите в окне «Streams» кнопку «Ок», и оно закроется. Перед запуском программы создайте с помощью команды меню Register->Custom окно, в котором будут отображаться регистры АХО, RX1, ТХ1. Кроме того, откройте еще одно с помощью команды меню Register->Program Control для отображения содержимого ре- гистров управления процессора. Изменение содержимого этих ре- гистров можно будет наблюдать в процессе пошагового выполнения Streams Рис. 24.3 241
Часть IV. Среда разработки VisualDSP++ программы. Допускается добавление окон для отображения и других регистров, но помните, что избыточная информация загромождает эк- ран и затрудняет изучение программы. Теперь можно скомпилировать и запустить программу в пошаго- вом режиме, с помощью клавиш F7 и F11 соответственно. Кроме того, программу можно запустить в непрерывном режиме, исполь- зуя команду Debug->Run, или клавишу F5, или соответствующую кнопку на панели инструментов. В результате выполнения про- граммы, данные из входного файла Serin.dat должны без измене- ний переписаться в выходной файл Serout.dat. После окончания работы программы в окне выходной информации появится сооб- щение: «Error in reading from stream for Sport 1», которое означает, что отладчик достиг конца входного файла при чтении данных. При выполнении программы в непрерывном режиме допускается устанавливать точки останова в тех местах программы, где необхо- димо проконтролировать значение каких-либо данных в регистрах или памяти процессора. Для этих целей используются кнопки пане- ли инструментов в виде кисти руки или синих флажков. Для уста- новки точки останова необходимо выделить какую-либо строку про- граммы и нажать кнопку с именем «Toggle Bookmark». Снятие лю- бой точки останова производится повторным нажатием этой же кнопки. Для снятия всех точек останова в программе используется кнопка с именем «АП Clear Bookmark». Переход между точками ос- танова вверх или вниз производится с помощью кнопок «Next Bookmark» и «Prevision Bookmark» соответственно. В исследуемом примере программы, инициализация SPORT1 задает формирование внутреннего кадрового сигнала порта. Про- граммный пакет Visual DSP++ позволяет симулировать внешний кадровый сигнал для порта, с заданными временными параметра- ми. Для того чтобы задействовать данный механизм, произведите небольшую корректировку программы, изменив настройку кадровой синхронизации для порта SPORT1. Затем установите параметры внешнего прерывания кадровым сигналом с помощью команды главного меню «Setting->lnterrupts». В открывшемся окне (рис. 24.4) выберите в качестве источника внешнего прерывания (External In- terrupts) кадровый сигнал приемника RFS1 и задайте число циклов Min cycles=0 a Max cycles=10. Нажмите кнопку «Add», а затем «Ок». Теперь на панели инструментов найдите и нажмите кнопку «Restart» и выполните программу по шагам, нажимая клавишу F11. Выполняя программу в пошаговом режиме, можно наблюдать за изменением всех регистров, а также определять число циклов про- цессора при выполнении любой строки команд. 242
Гпава 24. Работа с VisualDSP++ Рис. 24.4 В программном пакете Visual DSP++ можно создавать новые проекты. Для этого необходимо закрыть открытый ранее проект с помощью команды Project->Close и выполнить команду Project- >New. При этом откроется окно «Save New Project As» для создания нового проекта (рис. 24.5). ; bо ve Nеw Projе11 As ' s Папка: ) .. Examples J > 3 tf & 2169M ASM Hardware Overlay .. Example4 .. -Z189M C Hardware Overlay .... ExarnplelP . . ASM Soft Overlay Example . vcse Example 1 Новая папка . Example? : Examples Имя Файла: |j“ Тип файла: [Proiect Files l/.dpj) [.Сонранигь"] Отмена | Рис. 24.5 243
Часть IV. Среда разработки VisualDSP++ Рис. 24.6 Нажмите в этом окне кнопку создания нового каталога и задайте ему новое имя. Теперь откройте вновь созданный каталог и задайте имя нового проекта. После чего нажмите кнопку «Save» (сохра- нить). При этом откроется окно свойств проекта «Project Options» (рис. 24.6). Выберите в этом окне в списке «Processor» тип ADSP- 2181 и закройте окно с помощью кнопки «Ок». Далее создайте новый файл программы с помощью команды «File->New» и введите в него текст программы, подобный тому, что приведен ниже: .section/pm interrupts; ___reset: JUMP start; NOP; NOP; NOP; /‘reset vector*/ RTI; NOP; NOP; NOP; /*IRQ2*/ RTI; NOP; NOP; NOP; /‘IRQL17 RTI; NOP; NOP; NOP; /‘IRQL27 RTI; NOP; NOP; NOP; /‘SPORTO transmit*/ RTI; NOP; NOP; NOP; /‘SPORTO receive*/ RTI; NOP; NOP; NOP; /‘IRQE7 RTI; NOP; NOP; NOP; /‘BDMA*/ RTI; NOP; NOP; NOP; /‘SPORT1 transmit*/ RTI; NOP; NOP; NOP; /‘SPORT1 receive*/ 244
Гпава 24. Работа с VisualDSP++ RTI; NOP; NOP; NOP; /*Timer7 RTI; NOP; NOP; NOP; /‘Power down*/ .section/pm program; start: nop; jump start; Этот текст в дальнейшем можно использовать в качестве шаб- лона (заготовки) новой программы для сигнального процессора. Сохраните созданный файл с каким-либо допустимым именем и расширением «asm» и выполните команду Project->Add to Project- >File(s). Выберите сохраненный файл с программой и нажмите кнопку «Add». Теперь необходимо добавить в каталог с проектом файл Adsp-2189.ldf, который можно взять из рассмотренных ранее каталогов с примерами проектов. Данный файл необходим для оп- ределения типа процессора и трансляции программы. После этого программу можно транслировать и запускать на выполнение. При успешной компиляции проекта, в подкаталоге «Debug» проекта должен появиться исполняемый файл с расширением «dxe», кото- рый автоматически загружается в отладчик-симулятор при запуске программы. Для получения файла в рассмотренном нами ранее формате «Ida» можно воспользоваться специальной утилитой elf2aexe.exe, входящей в состав Visual DSP++. С целью автоматизации этого процесса предлагаю использовать командный файл, имеющий сле- дующее содержание: cis elf2aexe.exe %1 .dxe %1 del %1 .Ida del%1.sym ren %1 .ехе %1 .Ida Здесь вначале производится очистка дисплея, затем вызывает- ся утилита elf2aexe.exe с именем преобразовываемого файла в ка- честве входного параметра. После чего выполняются операции удаления вспомогательных файлов и переименования полученного файла. Данный командный файл можно назвать именем dxe_lda.bat и использовать для его вызова команду: dxe_lda.bat имя_файла. Полученный таким образом файл с расширением «Ida» можно использовать для загрузки в аппаратный эмулятор или тестовую плату через интерфейс IDMA. 245
Глава 25. Спектральный анализ сигнала в среде Visual DSP++ В этой главе рассматривается программный метод спек- трального анализа цифрового сигнала на примере программы, выполняемой в среде разработки Visual DSP++. Наиболее распространенной и актуальной задачей цифровой обработки сигналов является спектральный анализ сигнала. Полу- ченный в результате анализа спектр сигнала позволяет получить такие важные характеристики сигнала как частоту и амплитуду гар- моник, из которых состоит сигнал. Имея эти данные, можно прово- дить анализ сигнала, на содержание в нем той или иной частоты с определенной амплитудой и длительностью. Одним из наиболее распространенных и известных методов по- лучения спектра является метод дискретного преобразования Фу- рье (ДПФ). Этот метод активно применяется в анализаторах спек- тра, устройствах обработки звука и изображений, распознавания образов и т.п. ДПФ позволяет преобразовать N комплексных отсчетов сигнала во временной области в N комплексных отсчетов спектра в частот- ной области. Из многих теоретических источников известно, что во временной области входному сигналу с частотой, равной f, в час- тотной области соответствует спектр сигнала, отображаемый в диапазоне от -f/2 до f/2, где отрицательные значения составляют мнимую, а положительные значения - действительную часть спек- тра сигнала. Причем действительная часть спектра обладает чет- ной симметрией, а мнимая часть - нечетной. С целью сокращения количества операций и ускорения тем самым расчетов спектра сиг- нала, обычно ограничиваются вычислением модуля спектра сигна- ла в области частот от 0 до f/2. Вычисление N отсчетов спектра сигнала с помощью ДПФ произ- водится с помощью уравнения, приведенного на рис. 25.1. Здесь Х(к) являются искомыми отсчетами спектра сигнала, а х(п) - исход- ными отсчетами сигнала во временной области. N представляет собой количество отсчетов при вычислении ДПФ. 246
Гпава 25. Спектральный анализ сигнала в среде Visual DSP++ . /V-1 ч М-1 Х(к) = — У x(n)e’J2’l*/w = —У x(n)[cos(2nnk/ /V) - jsin(2nnkI Л/)] wn=o N^o Рис. 25.1. Вычисление N отсчетов спектра сигнала с помощью ДПФ В квадратных скобках уравнения присутствуют коэффициенты для действительной и мнимой частей. Рассмотрим очередной пример программы, демонстрирующей реализацию метода дискретного преобразования Фурье для полу- чения спектра сигнала в среде Visual DSP++. Откройте в программ- ном пакете Visual DSP++ очередной проект из каталога C:\ProgramFiles\AnalogDevicesWisualDSP\218x\Examples\Example4 и разверните в нем программу, находящуюся в файле с именем «Dft.asm». В этой программе производится расчет спектра сигнала по N отсчетам сигнала, используя алгоритм дискретного преобра- зования Фурье. Текст этой программы с переведенными автором книги комментариями приведен ниже: /*===================================================== Файл:DFT.ASM Процессор:ADSP-218х Дискретное Преобразова- ние Фурье (ДПФ) Эта программа выполняет ДПФ для N точек согласно следую- щему уравнению: N-1 real(k)+j*imag(к) = SUM input(n)[С - j*S]; k=0 до N-1 n=0 где: C=cos(2*pi*k*n/N), S=sin(2*pi*k*n/N), j=sqrt(-l) =====================================================*/ #define N 64 /* Константа - количество входных отсче- тов * I #define COS OxOOOCl /* Адрес буфера временных данных COS */ #define SIN 0x000C5 /* Адрес буфера временных данных SIN */ .section/data datal; .VAR input[N]=etest64.date; /* Таблица данных тестируе- мого сигнала */ .VAR real[N]; /* Буфер действительных значений спек- тра * / .VAR imag[N]; /* Буфер мнимых значений спектра */ .section/pm pm_da; .VAR sine[N]=esine64.date;/* Таблица данных гармониче- ского сигнала */ 247
Часть IV. Среда разработки VisualDSP++ .section/pm interrupts; __reset: JUMP start; rti; rti; rti; /* 0x0000: reset */ rti ; rti ; rti ; rti ; /* 0x0004: IRQ2 */ rti ; rti ; rti ; rti ; /* 0x0008: IRQL1 */ rti ; rti ; rti ; rti; /* 0x000c: IRQL0 */ rti ; rti ; rti ; rti ; /* 0x0010: SPORTO tx */ rti ; rti ; rti ; rti ; /* 0x0014: SPORT1 rx */ rti ; rti ; rti ; rti ; /* 0x0018: IRQE */ rti ; rti ; rti ; rti ; /* 0x001c: BDMA */ rti ; rti ; rti ; rti ; /* 0x0020: SPORT1 tx or IRQ1 */ rti ; rti; rti ; rti; /* 0x0024: SPORT1 rx or IRQO */ rti; rti ; rti ; rti ; /* 0x0028: timer */ rti; rti; rti; rti; /* 0x002c: power down */ .section/pm seg_code; /* Пример установки программы ДПФ */ start: Ml = l; М2 = 0; М7 = 1; М5 = 0; !0=input; L0=64; /* Входной буфер циклический */ Il=imag; Ll=0; /* Нециклический буфер Image */ I2=real; L2=0; /* Нециклический буфер Real */ /* Подпрограмма ДПФ _*/ df t: I6=sine; /* Указатель на Sine */ L6 = 64; /* Для N=64 значений */ I7=sine + N/4; /* Получение косинуса из синуса */ L7=64; /* Сдвиг указателя на pi/2 */ /* и использование циклического буфера.*/ I4=COS; L4 = 2 ; I3=SIN; L3=2; 15 = 0; L5 = 0; CNTR=N; DO outer UNTIL CE; M6=I5; DM(I4,M7)=0; DM(14,M7)=0;/* Очистка буфера временных данных COS */ DM(I3,M1)=O; DM(13,M1)=0;/* Очистка буфера временных 248
Гпава 25. Спектральный анализ сигнала в среде Visual DSP++ данных SIN */ CNTR=N; DO calc UNTIL CE; MX0=DM(10,Ml), MY0=PM(I7,M6);/* Чтение input, чтение COS */ MX1= МХО; /* Копирование input */ MY1=PM(I6,M6); /* Чтение SIN */ MR1=DM(14,M7); /* Чтение текущего значения COS и суммирование */ MR0=DM(14,М7); MR=MR+MX0*MY0(SS);/* Мультисуммирование COS */ DM(14,M7)=MR1; /* Запись нового накопленного зна- чения COS */ DM(14,М7)=MR0; MR1=DM(13,Ml); /* Чтение текущего значения SIN и суммирование */ MR0=DM(13,Ml); MR=MR-MX1*MY1(SS);/* Мультисуммирование SIN */ DM(13,Ml)=MR1; /* Запись нового накопленного зна- чения SIN */ calc : DM(13,Ml)=MR0; AR=DM(I4,M5); DM(12,Ml)=AR; /* Запись результата действующей вели- чины * / AR=DM(I3,M2); DM(Il,Ml)=AR; /* Запись результата мнимой величины */ outer: MODIFY(15,М7); /* Модификация указателей цикли- ческой таблицы */ end: IDLE; Как видно из текста программы, в ней задействованы регистры ге- нераторов адреса DAG для задания указателей на буфер данных тестируемого сигнала, таблицу значений гармонического сигнала, буферы результата и другие вспомогательные буферы. Вычисление значений спектра производится в двух циклах, счетчики которых ини- циализируются числом отсчетов N = 64. Вся программа выполняется за N*N групп операций. Результат работы программы заносится в выходные буферы действительных значений real и мнимых значений imag спектра. Для выполнения программы выполните ее трансляцию с помо- щью клавиши F7. Затем установите точку останова на последнем операторе программы и запустите ее с помощью клавиши F5. Через несколько секунд программа выполнит свою работу и остановится. Визуальный просмотр тестируемого сигнала, а также результатов работы программы и других вспомогательных буферов данных мож- но осуществлять с помощью открытия окна памяти данных процес- 249
Часть IV. Среда разработки VisualDSP++ сора, используя для этого команду Memory->Data. Кроме того, эти данные можно просматривать в графическом виде. Для этого необ- ходимо выполнить команду: View->Debug Windows->Plot->New. При этом откроется окно конфигурации графического построителя Plot Configuration, показанное на рис. 25.2. Рис. 25.2. Окно конфигурации графического построителя Plot Configuration Рассмотрим работу с данным конфигуратором на примере про- смотра буфера данных тестируемого сигнала. Оставьте в открыв- шемся окне конфигуратора без изменений строку Line Plot в поле Туре группы настроек Plot. В поле Title введите имя графика «Input» или другое схожее по смыслу. В группе Data Setting оставьте без изменений имя Data Set1 в поле Name и тип памяти DM в поле Memory. Нажмите на кнопку Browse в поле Address и выделите в открывшемся окне Browse for Symbol строку с именем input (рис. 25.3), после чего нажмите кнопку Ок. 250
Гпава 25. Спектральный анализ сигнала в среде Visual DSP++ Browse for Symbol л*! Symbol datal imag real Address Тхйбоо’ 0x00080 ПИВ 0x00040 OK | Cancel Рис. 25.3 В поле смещения данных Offset оставьте нулевое значение, а в поле счетчика Count замените значение 100 на 64, что соответству- ет количеству отсчетов в программе. Оставьте шаг сетки в поле Stride по умолчанию равным 1, а формат данных в поле Data цело- численным int. Нажмите на кнопку Add для добавления заданных установок в поле Data sets графического построителя. При жела- нии, в это поле можно добавить и другие данные для отображения, а затем установить или снять перед соответствующим именем гра- фика флажок для отображения этого графика. Теперь, нажмите на кнопку Ок, после чего в правой части окна Visual DSP++ отобразит- ся график заданных данных (рис. 25.4). Рис. 25.4 251
Часть IV. Среда разработки VisualDSP++ sinus Рис. 25.5 Для разворачивания и сворачивания окно графика имеет кнопку в виде стрелки. Аналогично можно построить и рассмотреть гра- фик, сформированный из буфера синусоидальных значений и хра- нящихся после выполнения программы в области памяти программ РМ процессора с именем «sin» (рис. 25.5). Данные из буфера синусоидальных значений используются в программе в качестве табличных значений гармонического сигнала для расчета коэффициентов при вычислении спектра сигнала. После выполнения программы результат ее работы будет хра- ниться в буферах с именами real и imag и также может быть визу- ально изучен. Встроенный в программный пакет Visual DSP++ графопострои- тель обладает рядом дополнительных функций. Эти функции дос- тупны с помощью контекстного меню (рис. 25.6), открываемого щелчком правой кнопки мыши на окне графика. Data Cursor Reset Zoom Configure... Modify Settings... Save Settings... Export.,. -/ Allow Docking Close Float In Main Window Рис. 25.6 252
Гпава 25. Спектральный анализ сигнала в среде Visual DSP++ Рис. 25.7 Первой в этом меню присутствует команда Data Cursor, которая позволяет узнать координатное значение любой точки графика, щелкая по нему левой кнопкой мыши. Следующая команда Reset Zoom приводит вид графика в исходное состояние. Команда Con- figure вызывает окно конфигурирования графопостроителя, рас- смотренное выше. Команда Modify Setting вызывает окно установок Plot Setting построителя (рис. 25.7). Данное окно состоит из пяти закладок и позволяет настроить изображение графопостроителя по вкусу пользователя. Закладка General позволяет задать имя Title и вспомогательное имя Subtitle для графика. В группе Grid Lines этой закладки можно задать цвет Grid color и присутствие сетки графика по осям X, Y, обеим осям (Both) или их отсутствие (None). Группа Background 253
Часть IV. Среда разработки VisualDSP++ Color задает цвет графика Plot и фона окна Window. Группа Margins позволяет изменить масштаб графика или произвести сброс поль- зовательских установок масштаба с помощью кнопки Reset. Нако- нец, группа Option позволяет отображать рядом с графиком его имя и статистические данные с помощью флажков, устанавливаемых в поле Legend и Statistics соответственно. Следующая закладка 2-D Axis (рис. 25.8) позволяет задать имя осей X и Y графика в полях Title, а также начальное значение оси X в поле Start value и ее шаг в поле Increment value. Для оси Y можно задать линейный или логарифмический вид представления графика с помощью поля Linear/Log. Для обеих осей имеются группы Scale для задания автоматического (Auto) или ручно- го (Manual) масштабирования осей. При этом параметры Min value Plot Settings General 2-D Axis | Font | Style X-Axis Title: j Data Processing | Y-Axis Title: Start value: j Increment value: SF—-------------------““ Scale & Auto Manual j Min value: i i j | Мак value: . IP j Multiplier: Linear/Log • Linear Г Log Scale Auto F Manual Min value: (и Max value: Multiplier: L£Z Отмена Рис. 25.8 254
Гпава 25. Спектральный анализ сигнала в среде Visual DSP++ и Max value задают соответственно минимальное и максимальное зна- чение по осям ординат, а параметр Multiplier определяет множитель шкалы. Закладка Font (рис. 25.9) позволяет задать имя (Font name), цвет (Font color) и размер (Font size) шрифта для отображения надписей на графике. Очередная закладка Style (рис. 25.10) конфигурирует линии гра- фика с помощью полей типа линии (Line type), ее ширины (Line width), цвета (Line color) и символов (Symbol) для отображения ли- нии с их размерами (Symbol size). Plot Settings General | 2-D Axis Font | Style ] Data Processing | Font name: Font color: ] | ▼ j Font Size f” Variable Fixed : Size: [l0 I OK | Отмена Справка j Рис. 25.9 255
Часть IV. Среда разработки VisualDSP++ Рис. 25.10 Наконец, последняя закладка Data Processing (рис. 25.11) позво- ляет задать для любого графика с именем, выбранным в поле Data Sets, формат его преобразования, определяемый в поле Data Proc- ess. При этом допускается отображение графика без преобразова- ния (None), с преобразованием в шкалу децибел (Convert to dB), преобразованием Фурье (FFT Magnitude) или двумерным преобра- зованием Фурье (2D FFT Magnitude). Кроме того, на этой закладке можно задать частоту преобразования в поле Sample rate и сохра- нение следов в поле Stored traces. Поле Trigger позволяет задать нарастание (Rising), спадание (Falling) и величину порога триггера 256
Гпава 25. Спектральный анализ сигнала в среде Visual DSP++ Рис. 25.11 (Threshold value) для исследуемого сигнала, наподобие установок ос- циллографа. Следующая команда Save Settings контекстного меню (см. рис. 25.6) позволяет сохранить заданные выше настройки Plot Setting. Очередная команда Export контекстного меню вызывает окно Export Plot (рис. 25.12), которое позволяет задать приемник для экспорта данных графопостроителя. В качестве такого приемника может быть буфер обмена (Clip Board), файл (File), принтер (Printer) или звуковая карта (Sound Card). При экспорте данных в файл пользователю предоставляется возможность выбрать любой из следующих форматов файла: jpg, bmp, gif, tif, eps, txt или dat. 257
Часть IV. Среда разработки VisualDSP++ Рис. 25.12 Снятие флажка перед командой Allow Docking приводит к преоб- разованию окна графика в перемещаемое окно. Щелчок левой кнопкой мыши по графику вызывает цветную рам- ку, задающую область графика для увеличения. Команда Close контекстного меню закрывает график. Наконец, команда Float In Main Window вызывает перемещение графика в главное окно среды Visual DSP++. Время вычисления спектра сигнала является основной характе- ристикой спектрального анализатора. Чем оно меньше, тем произ- водительнее анализатор. Поэтому для ускорения вычисления спек- тра используют метод быстрого преобразования Фурье (БПФ). Фактически БПФ является модернизацией ДПФ за счет сокра- щения количества операций умножения и сложения. Это стало возможным благодаря использованию свойств симметрии и перио- дичности коэффициентов уравнения преобразования, представ- ляющих собой базовые гармонические функции. Если для вычис- ления N отсчетов спектра сигнала при использовании ДПФ требу- ется N*N операций умножения комплексных чисел, то при исполь- зовании БПФ количество операций сокращается до (N/2)log2(N). Эффективность БПФ по сравнению с ДПФ становится существен- ной, когда количество точек увеличивается до нескольких тысяч. В табл. 25.1 приведено соотношение объема вычислительных затрат при различном объеме входных данных. 258
Гпава 25. Спектральный анализ сигнала в среде Visual DSP++ Таблица 25.1 Соотношение объема вычислительных затрат при различном объеме входных данных Количество отсчетов N Количество умножений Коэффициент эффективности ДПФ БПФ 2 4 1 4 4 16 4 4 8 64 12 5 16 256 32 8 32 1024 80 13 64 4096 192 21 128 16384 448 37 256 65536 1024 64 1024 1048576 5120 205 2048 4194304 11264 372 4096 16777216 24576 683 При вычислении спектра сигнала методом БПФ используют раз- личные алгоритмы. Алгоритм по основанию два (Radix2) разделяет полное вычисление ДПФ на комбинацию двухточечных ДПФ. Каж- дое двухточечное ДПФ использует базовую операцию умножения с накоплением (так называемую «бабочку»). При этом число точек в БПФ должно быть степенью двойки. Если количество точек являет- ся степенью числа четыре, то можно использовать алгоритм по ос- нованию четыре (Radix4). Эти алгоритмы хорошо реализуются в программах для сигнальных процессоров, поскольку в них имеются генераторы адреса с битреверсивной адресацией, предназначен- ной как раз для реализации подобных алгоритмов. 259
Глава 26. Программирование на языке СИ Это заключительная глава книги, в которой рассматривают- ся примеры программ на языке программирования Си и их выпол- нение в среде разработки Visual DSP++. Кроме ассемблерных программ, среда разработки Visual DSP++ позволяет транслировать программы, написанные на языке про- граммирования «Си». Рассмотрим пример простой программы, напи- санной на языке «Си», которая вычисляет значения тригонометриче- ской функции синуса для четырех заданных значений аргумента. Создайте новый проект с именем «С» и подключите к проекту новый файл с именем «с1.с», набрав в нем текст программы, при- веденный ниже: #include <math.h> #define PI 3.14159 /* Число Пи */ int у1,у2,уЗ,у4; main() { у1 = sin(O); у2 = sin(PI/2.0); уЗ = sin(PI); у4 = sin(PI+PI/2.0); } Здесь используются стандартные директивы и операторы языка «Си». В начале программы оператор включения подключает биб- лиотеку математических функций math.h. Далее производится оп- ределение символьного имени PL Ниже объявляются целочислен- ные переменные у1 - у4. В данном примере переменные объявле- ны целочисленными для наглядности представления результата работы программы. Главный цикл программы main состоит из че- тырех однотипных операций вычисления значений функции синуса для различных значений аргумента. В данном случае аргумент при- нимает значения, кратные PI/2. Результатом данной программы будут значения функции синус, которые очевидно должны прини- мать значения 0,1,0 и -1. 260
Гпава 26. Программирование на языке СИ Выполните трансляцию этой программы, нажав клавишу F7. За- тем выполните ее, нажав клавишу F5. После выполнения програм- мы в правой части экрана откроется окно дизассемблера, в котором будет присутствовать текст программы на языке ассемблера. Этот текст позволяет увидеть соответствие операторов языка «Си» на- бору ассемблерных инструкций. Для просмотра результата работы программы необходимо открыть окно памяти данных с помощью команды Memory->Data. По умолчанию, в этом окне данные ото- бражаются в шестнадцатеричном виде. Для отображения результа- тов в знаковом целочисленном виде щелкните на окне правой кноп- кой мыши и в открывшемся контекстном меню (рис. 26.1) выберите формат Select Format->Signed Integer. В результате данные в окне будут представлены в более при- вычном для человека виде (рис. 26.2). Как видно, результат работы программы оказался абсолютно то- чен. Заметьте, что благодаря лаконичности записи, присущей языку ВЫСОКОГО уровня «Си», программа для вычисления тригонометри- ческих функций состоит всего лишь из несколько строк. Для напи- сания подобной программы на ассемблере понадобилось бы не- сколько десятков строк. Теперь немного усложним программу, изменив ее текст на тот, что приведен ниже: #include <math.h> ttdefine PI 3.14159 /* Число Пи 7 ttdefine D P1/180.0 /* Число Дельта 7 #define N 100 /* Число отсчетов 7 float y1[N],y2[N]; main() { int i; for (i=0; i<N; i++) { y1[i] = sin(10.0TD); y2[i] = cos(10.0TD); } Здесь определены два массива у1 и у2 с данными в формате float. Значения этих массивов будут вычисляться в цикле for для N значений аргумента функций синуса и косинуса. 261
Часть IV. Среда разработки VisualDSP++ Edit Go То... Ctrl+G Dump... lite Lock Columns Select Format " ► New Tracking... Allow Docking Close Float In Main Window Hexadecimal Unsigned Integer Octal Fractional Character Binary Рис. 26.1. Контекстное меню Выполните трансляцию программы и установите точку останова на последней строчке программы. После чего запустите программу на выполнение. Через несколько секунд выполнение программы завершится. Для просмотра результата ее работы откройте новое ► An.ti'iil i,l> Vr'.4.iU»M'•! I [ 1 : АПЧР ?]ГЦ ‘.rltsubllKltl ] [PriHrit: ........................................................... 1 ЕЙ ЕЛ Session View Project Register Memory Qebug Settings Tools jgndow Het _ xl si ;; ъ e м й q?« i *'» к \w t : :[0ЫЬщГ* “~3 j jS Ш % ЙЕЭ ; Рис. 26.2. Данные в окне представлены в более привычной для человека форме 262
Гпава 26. Программирование на языке СИ Рис. 26.3. Окно для задания значений полей окно графопостроителя. Для этого выполните команду View->Debug Windows->Plot->New. В открывшемся окне задайте значения всех полей в соответствии с рис. 26.3 и нажмите программную кнопку «Browse». В новом открывшемся окне (рис. 26.4) найдите и выделите в па- мяти данных строку с массивом у1, после чего нажмите кнопку «Ок». Нажмите в окне Plot Configuration программную кнопку «Add». При этом в поле Data sets появится запись Data set1. Теперь еще раз нажмите программную кнопку «Browse» и выделите в памяти данных строку с массивом у2, после чего нажмите кнопку «Ок». Вновь нажмите в окне Plot Configuration программную кнопку Add. После этих действий в поле Data sets появится новая запись Data set2. Убедитесь, что строке Data set1 соответствует адрес у1, а строке Data set2 - адрес у2, выделяя по очереди каждую из строк в окне Plot Configuration. Для обеих строк данные должны иметь тип float. Если это не так - исправьте формат данных на float. 263
Часть IV. Среда разработки VisualDSP++ Symbol | Address j * I „libJNT.LO „libJNT_L1 _libJNTJ_2 „lib_INT_L3 _libJNT_L5 „lib INT L6 „libJNT L7 „libJNT_M3 _libJNT_M5 „lib INT_PMOVLAY „libJNT„PX -Jibjntjable _main_arg1 ^ipain_argy 0x0030a 0x0030b 0x00315 0x00316 0x00317 0x0030c 0x00318 0x00310 0x00311 0x00314 0x00312 0x002d7 0x00000 ogggj 0x00006 ' v ОК | Cancel [ Рис. 26.4. Окно для сопровождения работы программы Теперь нажмите в окне кнопку «Ок», разверните окно с графи- ками результатов работы программы (рис. 26.5). Как видно из рисунка, графики представляют собой кривые функций синуса и косинуса, полученные из результатов работы про- граммы. С помощью графопостроителя можно увидеть и спектр сигналов. Для этого необходимо щелкнуть правой кнопкой мыши по окну с графиками и в открывшемся контекстном меню выбрать команду Modify Setting. Рис. 26. 5. Кривые функций синуса и косинуса 264
Гпава 26. Программирование на языке СИ Plot Settings General j 2-0 Axis | Font j Style _________£a>aSels- Data Set2 Sample rate (Hz): jO Stored trace»: |7~ T rigger i F F Threshold level. | Data Processing । Отмена | | Рис. 26.6. Окно для сопровождения дальнейшей работы программы Далее в открывшемся окне Plot Setting открыть закладку Data Processing и выделить в поле Data Process строку FFT Magnitude (рис. 26.6). После чего закрыть окно, нажав кнопку Ок. В результате график преобразуется к виду, приведенному на рис. 26.7. Рис. 26.7. Функция косинуса и спектр функции синуса 265
Часть IV. Среда разработки VisualDSP++ Здесь отображены одновременно функция косинуса и спектр функции синуса. Подобным образом можно производить вычисление и других математических функций, для которых существуют готовые биб- лиотеки в трансляторе языка Си. Среда разработки Visual DSP++ содержит ряд других примеров, в том числе на языке Си, изучив которые, можно расширить объем знаний в этой области. Кроме того, встроенная справочная система среды разработки дает боль- шой объем дополнительной информации по многим вопросам, воз- никающим в процессе программирования. 266
Заключение Дорогие читатели, вы познакомились с материалами, посвящен- ными сигнальному процессору ADSP2181 и средствам для его про- граммирования. Данная книга позволяет пройти путь изучения сигнального про- цессора от самых основ до самостоятельного программирования и разработки на его базе устройств с цифровой обработкой сигнала. В ней были изложены как схемотехнические решения, так и про- граммные материалы. Однако возможности сигнальных процессо- ров фирмы Analog Devices, а также средств разработки Visual DSP++ не исчерпываются приведенными в этой книге материалами и примерами. Это связано не только с краткостью изложения мате- риала, но и с непрерывным развитием, как самих процессоров, так и программных средств для них. Появление на рынке электроники новых процессоров приводит к необходимости постоянного обновления и углубления знаний в этой области. Автор надеется, что изложенный материал уже помог и еще по- может тем, кто захочет заняться изучением и применением сиг- нальных процессоров в своей практике. 267
Список литературы 1. http://www.analog.com/ 2. ADSP-2181 DSP Microcomputer. Data Sheet. Rev.B., Analog De- vices Inc. 3. ADSP-2100 Family User's Manual. Edition 3, Analog Devices Inc. 4. Сато Ю. Обработка сигналов. Первое знакомство. /Пер. с яп.; под ред. Есифуми Амэмия. — М.:Издательский дом «Додэка-XXI», 2002.-176 с.: ил. 5. Калабеков Б.А. Микропроцессоры и их применение в систе- мах передачи и обработки сигналов. - М.: Радио и связь, 1988. 268
Оглавление Предисловие.................................................3 Часть I. Схемотехника.......................................4 Глава 1. Обзор...........................................5 Глава 2. Архитектура.....................................8 Глава 3. Практические схемы включения...................21 Глава 4. Программно-логическая модель...................38 Глава 5. Система прерываний.............................54 Часть II. Программирование.................................56 Глава 6. Первая программа...............................57 Глава 7. Порт BDMA......................................80 Глава 8. Порт IDMA......................................83 Глава 9. Адаптер LPT-IDMA...............................92 Глава 10. Менеджер памяти...............................99 Глава 11. Директивы ассемблера.........................105 Глава 12. Форматы данных...............................129 Глава 13. Система команд...............................135 Часть III. Вычислительные и аппаратные устройства.........149 Глава 14. Устройство ALU...............................150 Глава 15. Устройство МАС...............................163 Глава 16. Устройство сдвига............................176 Глава 17. Устройство обмена между шинами...............188 Глава 18. Программный автомат..........................191 Глава 19. Генераторы адресов...........................196 Глава 20. Таймер.......................................203 Глава 21. Синхронные последовательные порты............206 Часть IV. Среда разработки Visual DSP++...................218 Глава 22. Установка....................................219 Глава 23. Запуск Visual DSP++..........................231 269
Глава 24. Работа с Visual DSP++........................239 Глава 25. Спектральный анализ сигнала в среде Visual DSP++.246 Глава 26. Программирование на языке СИ.................260 Заключение................................................267 Список литературы.........................................268 270
О.Д. Вальпа РазраОотк? jcipoHciB на основе цифрбоык сигнапьных процессоров фирмы Analog Devices с использованием Visual DSP++ На прилагаемом к книге диске находятся исходные тексты и исполняемые файлы программ, а так же некоторые полезные утилиты Книга предназначена для самостоятельного изучения и приме- нения на практике цифровых сигнальных процессоров DSP (Digital Signal Processor). На примере популярной микросхемы ADSP2181 фирмы Analog Devices рассмотрены устройство, архитектура и техни- ческие характеристики цифрового сигнального процессора. Приве- дено описание вычислительных блоков процессора, средств разра- ботки программного обеспечения, языка программирования и системы команд процессора. Разработанные автором книги практические схемы с применением сигнального процессора, исходные тексты программ и схемы вспомогательных устройств, полезных при отладке программ для процессора помогут получить необходимые практи- ческие навыки, с помощью которых читатель легко освоит другие типы сигнальных процессоров. Книга написана простым языком и позволяет быстро освоить сигнальный процессор и применять его на практике в собственных разработках. Для специалистов в области разработки цифровой электронной аппаратуры, будет полезна студентам и аспирантам. Книги издательств «Горячая линия - Телеком» можно заказать через почтовое агентство DESSY: 107113, г.Москва, а/я 10, а также интернет-магазин: www.dessy.ru Сайт издательства: www.techbook.ru ISBN 5-93517-342-5 9 785935 173425