Уже в четырех записях я упомянул чудесный параллельный интерфейс EBI. Он идентичен, что у STM32, что у ATSAM. Некоторые называют интерфейс асинхронным, но это не так: отсутствует лишь порт тактовой частоты, однако периферии на этот счет хватает.
Суть вопроса?
МК — управляющий, а все остальные — подчиненные.
В своих проектах я сталкивался с низкой скоростью передачи данных между двумя устройствами, ввиду отсутствия всякого DMA и буфера внутри контроллера.
Это будет долго, в любом случае. Почему бы не соорудить на ПЛИС внешний DMA контроллер? Ко всему прочему будет возможность развить его во что-то большее, чем простой пересыльщик. Здесь всплывают следующие проблемы:
- У МК нету средства отсоединения от передающей шины, когда ее использует DMA. Произойдут короткие замыкания.
- Кто и как будет решать, чью шина?
- Как передавать данные «пересыльщику»?
Мы приходим к системе с двумя управляющими (Master) или ее называют Multi-master системой.
Микроконтроллер может также свободно работать с шиной, отдавать команды DMA для пересылок и автоматически отключаться от шины. Все конфликты урегулируются новым блоком — Арбитр.
Арбитр
Независимое устройство, которое всеми силами пытается избежать ситуации, когда два управляющих подключаются к шине одновременно. Здесь его задача проста:
- Не пускать DMA в шину, пока с ней работает МК.
- Не пускать МК в шину, пока с ней работает DMA.
У обоих есть для этого специальные сигналы типа WAIT (подожди!). Отдельная ситуации — это когда контроллер будет передавать данные контроллеру пересылок.
Ворота
Для того, чтобы переключать линии между устройствами необходимо что-то в роде мультиплексора. Да! Но в нашем случае необходим двунаправленный и четырехпортовый.
Необходима микросхема с параметром tpd < 7ns, иначе образуется слишком большая латентность.
Реализация
Ниже представлены многоплатная система, состоящая из: ATSAM4C (МК), EP1C3 (ПЛИС), Арбитр (кучка логики и FET) и внешние модули: видеопроцессор и память.
Демонстрация
Наглядное переключение шин, при захвате DMA. Прошу прощения за помехи.
Пример использования в качестве усовершенствованного DMA с некоторыми графическими функциями.
Все картинки (спрайты) хранятся в модуле внешней памяти, куда их загружает микроконтроллер при старте.
Почему «черная пятница»?
Из-за сбоя в питании, естественно по моей вине, вся система целиком и полностью сгорела. Резкий запах пластмассы дал понять, что это был последний эксперимент. В связи с этим, я не могу продолжать цикл обучающих статей по ARM Cortex-M4, увы. Это также касается FPGA.
Оставлю это здесь. Исходный код ATSAM4C: