Перейти к содержанию
    

DMA и доступ к памяти в Blackfin

Добрый день, форумчане! :)

 

Организую вывод на новый дисплей от BF548. И повторно разбираясь в своем коде подключения дисплея, заметил, что у меня запись картинки в буфер экрана и канал DMA, настроенный на вывод из этого буфера, никак свой доступ не разграничивают по времени. Это допустимо?

 

В большинстве примеров от AD вывод на экран идет с помощью 2-х буферов по типу Ping-Pong. Т.е. после отработки одного буфера, каналу DMA "подсовывается" другой буфер, а в отработавший пишется новая картинка. Но мне это когда-то показалось неудобным, по причине необходимости согласовывать запись в тот или другой буфер с драйвером дисплея и я сделал так, что запись идет всегда в один буфер и вывод с него же. При этом драйвер не "отвлекается" на прерывания об отработке буфера, что положительно сказывается на скорости вывода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Организую вывод на новый дисплей от BF548. И повторно разбираясь в своем коде подключения дисплея, заметил, что у меня запись картинки в буфер экрана и канал DMA, настроенный на вывод из этого буфера, никак свой доступ не разграничивают по времени. Это допустимо?

Если не страшны артефакты от процесса рисования на экране (нет динамической картинки), то допустимо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок. спасибо за ответ. Успокоили.

 

Ну непосредственно отрисовка идет в другой буфер. Под программным доступом я подразумевал переброску из буфера отрисовки в буфер экрана. Артефакты есть (ну иногда мелькают кадры с недорисовкой нового кадра. Но это на 100 мс примерно), но очень малозаметные. Скорость вывода при этом возрастает раза в 1.5...2. В приборе будут достаточно статичные картинки, простые меню выбора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"дисплей от BF548", если это про ADI http://www.analog.com/ru/processors-dsp/bl...ts/product.html, то может вы имели в виду котроллер дисплея, а не дисплей?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения. перечитал свой вопрос. BF548 - это микроконтроллер.

"Организую вывод на новый дисплей от BF548" надо читать как "Организую вывод изображения на новый дисплей с микроконтроллера BF548".

 

Ну главное в вопросе: не будет ли конфликта при одновременной записи со стороны моей программы в область памяти, на которую настроен канал DMA драйвера дисплея. Вот. Ну jcxz уже сказал, что конфликта не будет (что я, в общем-то, и наблюдаю). Просто в документации не нашел каких-либо рекомендаций на счет разграничения по времени доступа для DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения. перечитал свой вопрос. BF548 - это микроконтроллер.

"Организую вывод на новый дисплей от BF548" надо читать как "Организую вывод изображения на новый дисплей с микроконтроллера BF548".

 

Ну главное в вопросе: не будет ли конфликта при одновременной записи со стороны моей программы в область памяти, на которую настроен канал DMA драйвера дисплея. Вот. Ну jcxz уже сказал, что конфликта не будет (что я, в общем-то, и наблюдаю). Просто в документации не нашел каких-либо рекомендаций на счет разграничения по времени доступа для DMA.

 

Ядро имеет приоритет над каналами DMA при доступе к внешней памяти, поэтому рисование больших полигонов лучше делать с помощью MEMDMA, как и копирование областей. Конечно это не 2D ускоритель, но это сильно ускорит процесс. В этом проце добавили FIFO на чтение буфера, поэтому артефактов быть не должно даже при сильной загрузке. А по времени различные DMA каналы и ядро сами разберутся. Но все это для небольших и средних дисплеев. Для 1024на768 там все хуже будет с производительностью, но заставить сносно работать можно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Недавно был конфликт с одной из библиотечных DSP функций. При расчете FFT экран рассинхронизировался. В регистре статуса DMA появлялась ошибка заполнения буфера DMA. Оказалось, что при интенсивной работе с внешней SDRAM памятью такие ошибки возможны и в контроллере для решения этой проблемы есть даже отдельные битики для установки приоритета DMA параллельного интерфейса EPPI. Если кто столкнется с аналогичной проблемой - то вот решение:

 

*pHMDMA0_CONTROL = *pHMDMA0_CONTROL | ( 1<<10) | ( 1 << 11 );

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...