Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: GPIO by DMA LPC2468 + ext SRAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
mempfis_
Всем добрый день.
У меня есть отладочная платка с LPC2468 и есть внешний источник 8битных данных - камера.
Данные могут поступать с выбранной мною частотой (зависит от частоты тактирования камеры).
Я попробовал считывать данные напрямую с порта и сохранять их во внешнюю SRAM. Получил порядка 700000 считываний в секунду при условии что процессор занимается только тем, что захватывает данные и сохраняет их в память.

У меня возникла идея - если DMA способна выполнять транзакции memory-memory, могу ли я настроить DMA-контроллер данного процессора так, чтобы он автоматически с GPIO выполнил скажем 640*480 транзакций считывания во внешнюю SRAM без участия процессора. Я бегло просмотрел описание DMA - если я всё правильно понял, то он может выполнять чтение с одного адреса без автоинкремента и отправлять данные на другой адрес с автоинкрементом с шириной данных 8 бит. Насколько это применимо к GPIO (каждый порт GPIO ведь имеет свой адрес) и внешней SRAM (в моём случае 512к 8бит 10nS). Если данный процессор не сможет сохранять данные во внешнюю SRAM используя DMA, то во внутреннюю SRAM он наверняка сможет это сделать? Также есть ли возможность задать период выборки с GPIO - например инициировать DMA-транзакцию по какому-либо таймеру?
Кто работал с DMA этого процессора подскажите насколько реализуема данная затея?
Данный процессор выбран только из-за того, что есть под рукой отладочная плата.
Вообще я тесно работаю ещё с LPC17xx и Freescale Kinetis KL15 - но с ихними DMA я тоже не работал.
Возможно кто подскажет другие доступные ARM-процессоры (не DPS, а именно ARM), которые могут позволить решить данную задачу.
Заранее всем спасибо за ответы.

jcxz
Неужто - заглянуть в UM совсем не судьба???
mempfis_
Цитата(jcxz @ Dec 29 2013, 20:04) *
Неужто - заглянуть в UM совсем не судьба???


Возможно я поторопился создавать тему после беглого просмотра User Manual.
Просмотрев более подробно разделы о EMC и таймерах я понял, что DMA не сможет работать с внешней памятью с помощью EMC и я не смогу использовать таймеры для задания периода считывания данных с порта с помощью DMA. Получается на данном процессоре я не смогу реализовать выборку с заданным периодом с помощью DMA. Когда снова доберусь до платы проверю в железе чтение с порта во внутреннюю SRAM чтобы оценить период выборки и по возможности подогнать тактирование камеры.
scifi
В семействах STM32F2xx, STM32F4xx есть DCMI - Digital Camera Interface.
mempfis_
Цитата(scifi @ Dec 29 2013, 22:04) *
В семействах STM32F2xx, STM32F4xx есть DCMI - Digital Camera Interface.


Спасибо за наводку. Буду иметь ввиду что существуют процессоры с готовым аппаратным модулем для связи с внешней камерой.
jcxz
Цитата(mempfis_ @ Dec 30 2013, 00:55) *
Просмотрев более подробно разделы о EMC и таймерах я понял, что DMA не сможет работать с внешней памятью с помощью EMC и я не смогу использовать таймеры для задания периода считывания данных с порта с помощью DMA.

Не работал с LPC24xx, но в LPC17xx запускать DMA от таймерных запросов можно и считывать с GPIO - тоже.
mempfis_
Цитата(jcxz @ Dec 30 2013, 06:04) *
Не работал с LPC24xx, но в LPC17xx запускать DMA от таймерных запросов можно и считывать с GPIO - тоже.


Спасибо. Обязательно изучу эти возможности лпц17. Они у нас потребляются десятками тысяч в серийных устройствах.
jcxz
Цитата(mempfis_ @ Dec 30 2013, 14:33) *
Они у нас потребляются десятками тысяч в серийных устройствах.

Везёт вам sm.gif
SyncLair
Как то я портировал всю библиотеку перифириную с LPC1768 на LPC2468. В итоге получил приемлимую для меня систему которая настраивается на оба процессора путём условной компиляции. Так вот по поводу DMA, сам я его ни разу не использовал но чисто формально садапировал и исходник с DMA -- если есть желание то проверяйте. Во время портирования запомнил, что DMA каналов и устройств что поддерживают DMA в LPC2468 гораздо меньше.

В частности если я не ошибаюсь в 1768 GPIO может работать через DMA, и довольно не хило -- где то видел примеры.

Похожая с вашим случаем задача по чтению 8 битных данных у меня есть для работы с NAND FLASH.
На LPC2468 она решается через интерфейс static RAM, которого вроде нет в 1768. Буду переходить на LPC1768 в новых разработках планирую всё-таки использовать GPIO через DMA при чтении с NAND FLASH. В итоге, советую Вам если будете использовать LPC1768 подключайте через GPIO, если ипользуете LPC2468 то через static RAM. В любом случае процессоры весьма похожи друг на друга.





jcxz
В двух текущих проектах на LPC1778 и в одном на LPC1758 у меня используется программно-эмулируемый UART на связке GPIO+DMA с event-ами от таймера.
Всё работает прекрасно.
И ранее также использовал связку GPIO+DMA с event-ами от таймера.
Но будьте осторожны при высокочастотных запросах! На LPC до семейства LPC177x/8x нельзя изменить приоритет доступа к шине AHB устройств, и у CPU он выше чем у GPDMA.
Так что если используете высокочастотные запросы к DMA (уже на сотнях кГц), то ваш протокол обмена через линии GPIO должен быть устойчив к потерям отдельных событий
активации DMA (т.е. - некоторые запросы к DMA не будут отрабатываться из-за того что шина занята более приоритетным bus master-ом - CPU).
Сам с этим сталкивался при работе GPDMA+SSP на частотах SSP == 10...30МГц.
mempfis_
Огромное спасибо всем ответившим как в форум, так и в личку. Я получил достаточное кол-во информации по интересующим меня вопросам.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.