Модуль с ADSP-2181
ADSP-2181 - однокристалльный цифровой сигнальный процессор, предназначенный для работы в приложениях, связанных с высокоскоростной числовой обработкой (по крайней мере, так было, когда он появился).
ADSP-2181 объединяет основную архитектуру ADSP-2100 с дополнительными возможностями, включающими два последовательных порта, внутренний 16-разрядный порт ПДП, байтовый порт ПДП, программируемый таймер, флаги ввода/вывода, расширенные возможности прерываний и встроенную память программ и память данных. ADSP-2181 включает в себя 80 Kб встроенной двухпортовой памяти, сконфигурированной как 16 Кслов 24-разрядной памяти программ и 16 Кслов 16-разрядной памяти данных. На рисунке показаны основные узлы процессора.
Структура ядра
Первые рабочие модули приходилось выполнять объемным монтажом, так было быстро и дешево, но очень трудоемко, хотя при шаге между выводами 0,65 еще терпимо. В последствии, чтобы сократить время и силы на макетирование процессорной части, я сделал процессорный модуль на основе ADSP-2181, (да и изготовление 2-х слойной печатной платы стало вполне доступно по цене) а необходимые внешние схемы подключал к нему. Здесь я опишу этот модуль, рабочее название PM2181, модуль показан на фото
Основные компоненты:
Процессор ADSP-2181KS-160 40МГц
Внешнее ПЗУ 8-и разрядное AT29C512
ПЛИС фирмы Atmel ATF1508AS
Гальванически развязанный RS-232 порт на AOT101АС до 115200
Два RS-485 порта
Две микросхемы 24LC256 – память с последовательным входом
Часы реального времени
Тактовый генератор для ПЛИС
Схема сброса
Электрическая схема разработана в ORCAD, скачать ее вместе с перечнем элементов можно по этой ссылке pm2181_schema.rar, там же схема программатора для ПЛИС ATF1508AS. Для быстрого просмотра схема в графическом формате pm2181_schema.png
Печатную плату разводил в PCAD, расстановка, скоростные линии и питание вручную, все остальное сделала Specctra pm2181_pcb.rar.
Компилятор ассемблера и С (командная строка), эмулятор процессора 21XX.rar, писать программы можно в любом текстовом редакторе. Пользоваться С конечно можно, но процессор не очень к нему адаптирован. Тем, кому нравиться работать в интегрированной среде, можно использовать
Примеры кода от Analog Devices DSPEXAMP.RAR скачать
Описание процессора на русском языке можно скачать в разделе - Документация на русском.
ПЛИС ATF1508AS можно заменить на EPM7128SLC84 от ALTERA, и использовать MAX+PLUS II (является аббревиатурой от Multiple Array MatriX Programmable Logic User System. Система MAX+PLUS II имеет средства удобного ввода проекта, компиляции и отладки, а также непосредственного программирования устройств, сайт разработчика
ATMELISP - ПО для внутрисхемного программирования ПЛИС серии ATF1500 (версия 4.2) с помощью "ByteBlaster" (по спецификации фирмы "Altera") или оригинального кабеля для программирования.
Программное обеспечение модуля PM2181 представляет набор программ и различных тестов, все функции описывать не буду, только приведу краткий список основных.
Когда устройство готово и написана первая программа, возникает желание загрузить ее в процессор, как можно более коротким путем (т.е. используя минимальное аппаратное обеспечение, потому что оно еще не проверено, а искать ошибки в ПО и аппаратуре одновременно трудно). И прошивать каждый раз внешнюю память при корректировке программы трудоемко и долго. В таком случае, я использовал загрузку памяти программ процессора через RS-232, программно эмулируя его, использую выводы PF0, PF1. Хотя в примерах есть эмулятор RS-232, я написал свой, файл программы и прошивки называется - lrom. Потом отлаживал остальную аппаратную часть и по мере готовности источник загрузки заменял на какой-либо стандартный канал, реализованный в схеме.
При разработке ПО возникает еще одно неудобство, стек организован аппаратно и его глубина сильно ограничена, в тех случаях, когда скорость вызова функций и сохранения регистров в стеке не является критичной, можно стек эмулировать программно. Функции, которые я разработал для этой цели, находятся в файле - stack.h.
Ну и для совсем экзотических целей, я разработал библиотеку (больше это похоже на набор макросов) имитирующую многопоточность. С помощью ее можно создавать несколько потоков выполнения, количество которых ограничено только памятью отводимой под стек. Переключение между ними происходит либо по таймеру либо поток сам может отдать управление вызвав функцию, в комбинации с некоторым условием ее можно использовать как объект синхронизации между потоками. Контекст потока располагается в памяти программы прямо перед точкой, с которой он начинает выполнение. Если вы будете писать код, вызываемый из разных потоков, нужно помнить, что данные, которые он обрабатывает должны находиться в контекстно зависимой памяти (другими словами не использовать одни и те же глобальные переменные). Библиотека и пример находятся в папке – PROCESS.
Реклама