HDMI dma что это

▌Что это?
Есть в современных контроллерах такой блок DMA — контроллер прямого доступа к памяти (ПДП). Штука очень простая, несмотря на умное название. Вся ее суть заключается в том, чтобы по команде от периферии или ядра взять и скопировать кусок памяти с одного места на другой.

Для этого мы в настройки DMA загружаем адрес откуда копировать, адрес куда копировать, какой размер блока данных копируемый за раз (байт, два байта — слово, два слова и так далее) и сколько блоков надо скопировать. А дальше контроллер DMA ждет команды или разрешения на работу. Как оно будет получено он фоном, не занимая проц, это все сделает.

При этом сам ,если нужно, будет увеличивать адреса, выбирая следующий блок. А по завершении подаст прерывание, махнет флажком, в общем. Как то отчитается о работе.

Что с этим можно делать? Ой да много чего. Можно, задать в качестве источника адрес какой-либо периферии, скажем выходной регистр АЦП, а в качестве приемника адрес массива в ОЗУ, дать приказ DMA по команде завершения оцифровки АЦП хватать результат и пихать в массив. При этом DMA сам скопирует, сам увеличит адрес, а как заполнит буфер, то обнулится и начнет его переписывать по кругу заново.

STM32. Урок 14. DMA. Direct Memory Access

И вот у нас, автоматически, без работы проца вообще, образуется циклический буфер приема данных с АЦП, которые мы можем тут же прогнать через любую цифровую обработку, да хоть через усреднение, и получить отфильтрованные уже данные. Или то же самое сделать с UART и заставить DMA аккуратно складывать входящие данные в кольцевой буфер.

А можно сделать и наоборот. Сказать DMA что мол вот тебе буфер, там лежит пара сотен байт, возьми и запихай их все в жерло UART и пойти по своим делам, а DMA трудолюбиво отправит в передачу весь буфер.

▌Ближе к теме
Контроллеры
Если рассмотреть конкретно STM32 то там находится один (на малых контроллерах вроде STM32F103C8T6) или два DMA контроллера DMA1 и DMA2 соответственно. На DMA1 есть 7 каналов, на DMA2 всего 5. Оба канала DMA сидят на шине AHB и перед тем как начать с ним работать надо на него подать тактирование, подняв биты DMA1EN и DMA2EN в регистре RCC_AHBENR, как и с любой другой периферией на STM32. В остальном они идентичные и работа с первым и вторым одинакова.

Каналы контроллера
Каждый канал независимый и может работать сам по себе со своими настройками. Но в один момент времени может работать только один канал у каждого контроллера. Чтобы избежать коллизий у каждого канала есть два уровня приоритета. Первый, программный. Мы просто в битах настройки задаем один из четырех уровней.

А второй аппаратный, если придут запрос на два канала с одинаковым приоритетом в настройках, то победит тот, чей номер меньше. Сходно с обработкой прерываний. Там такой же двухступенчатый арбитраж.

За выбор приоритета отвечают два бита PL регистра DMA_CCRx Для каждого канала регистр свой. Вариантов там немного, всего четыре:

What are IRQ, DMA & Address Ports? — Soundcard Memories [Byte Size] | Nostalgia Nerd

  • 00 — низкий
  • 01 — средний
  • 10 — высокий
  • 11 — сверхвысокий.

Каждый канал привязан к конкретной периферии. Т.е. если вам нужно чтобы DMA пинал АЦП, то ищите к какому каналу подключено именно АЦП.


Обратите внимание на то, что помимо аппаратных событий в мультиплексор еще ведет софтверный триггер от бита MEM2MEM. Для каждого канала:

Т.е. мы можем гонять данные не только по приказу периферии, но и просто по желанию левой пятки. Просто надо поставить бит MEM2MEM, указать откуда куда и дать приказ в виде EN бита. И DMA исполнит. Это дает некоторую свободу. Например, у нас нет возможности повесить DMA канал на периферию ,т.к. ее родной канал уже занят другой периферией. Бывает такое огорчение. Что делать?

Правильно, взять любой другой канал, настроить на обслуживание этой периферии, а пинок давать не через аппаратное событие, в прерывании, вручную дернуть этот канал через Mem2Mem бит. Да будет не совсем красиво, но куда лучше чем в том же прерывании вручную копировать все это. Хотя тут надо смотреть что будет быстрей. Возможно выгоды не будет никакой. Ради одного байта заряжать DMA смысла нет, а вот ради четырех… уже может иметь смысл.

Размер данных
За раз DMA может копировать порцию данных в 1, 2 или 4 байта. В первую очередь это влияет на приращение адресов при вычислении куда класть. Так что это настройка жизненно важна. Сколько и куда класть определяется обычно периферией. Т.е. если UART принимает и выдает по байту, то результат у нас 8 битный. А вот АЦП, может, например, выдать 16 битный результат.

Значит размер указывать надо два байта, чтобы сразу за один заход их все забрать. Ну и, очевидно, что размер принимаемых и сохраняемых данных обычно совпадает. Хотя, вам никто не запретить класть однобайтные данные периферии в 32 разрядный массив, выравниваясь по двойному слову. Тогда размер может быть и разный.

За размер данных периферии и памяти отвечают два бита PSIZE и MSIZE регистра DMA_CCRx

00 — 1 байт
01 — 2 байта
10 — 4 байта
11 — не используется.

Откуда куда
Адрес периферии для каждого канала задается в регистре DMA_CPARх этого канала. Просто пишем туда адрес нужного регистра периферии. Но есть два важных момента. Во-первых, нельзя писать в этот регистр при включенном DMA. Т.е. при изменении их бит EN должен быть снят. Второе, адрес зависим от битов PSIZE регистра DMA_CCRx.

Еще по теме:  Проблема с vga HDMI кабелем

Т.е. если у нас указан размер данных как 1 байт (PSIZE = 00), то активные все биты регистра DMA_CPARx. Но если данные указаны как слова или как двойное слово, по 16 или 32 бита соответственно, то один или два младших бита этого регистра игнорируются вообще. Т.е. получается, что адрес выравнивается по словам или двойным словам. Т.е. DMA не сможет записать данные словами начиная с нечетного адреса, но адреса все выровнены по словам, так что это пофигу.

Адрес памяти лежит в аналогичном регистре DMA_CMARx и там все то же, что и для DMA_CPARx только за размер отвечают биты MSIZE и его тоже нельзя трогать на включенном канале.

Также надо указать направление копирования. За него отвечает бит DIR регистра DMA_CCRx.

Когда он 0 то мы читаем из адреса DMA_CPARx и пишем по адресу DMA_CMARx. А когда он 1, то наоборот, соответственно. Название у бита идиотское. Не, ну понятно, что направление, но лучше бы назвали его M2P, то есть если 1, то из памяти в периферию. Или как то так. Долго никак не мог запомнить направление, пока не связал, что 0 он такой округлый и похож на такую же округлую букву P — Periph.

А 1 угловатая, прям как буква М — Мemory.

Ну и опции инкремента адреса. биты PINC и MINC во все том же DMA_CCRx. Они отвечают за то, чтобы после каждой сработки у нас автоматически увеличивался адрес которые в DMA_CPARx или с DMA_CMARx соответственно.

Адрес периферии прибит намертво и редко когда надо его менять, так что обычно PINC всегда равно нулю. Т.е. никакого инкремента. Вам же не надо, чтобы после чтения из DR того же UART1 на следующем байте было уже из следующего по списку BRR :)))

Хотя… в некоторых случаях таким образом можно сдернуть по DMA содержимое всех регистров настройки какой-нибудь периферийной штуки. Например для отладки, чтобы сделать это предельно быстро, на лету. Правда тут надо быть очень осторожным. Многие биты событий и флаги прерываний снимаются при чтении. И чтение через DMA тоже считается.

Так что побыть бесстрастным наблюдателем не выйдет.

Зачем же нужен инкремент DMA_CPARx? А для режима копирования из памяти в память. Тогда мы в DMA_CPARx пишем адрес одного буфера, в DMA_CMARx адрес другого, ставим бит MEM2MEM, даем разрешение и поехали!

А вот бит MINC ставится почти всегда. Мы указываем DMA_CMARx начало буфера и DMA, увеличивая адрес, его последовательно заполняет, или читает из него в периферию.
Впрочем, если нам надо гнать из периферии в периферию, скажем из АЦП сразу в SPI, то бит MINC тоже равен нулю будет.

Ну и есть еще один вариант, когда инкремента нет ни на адресе приемника, ни на адресе источника. Таким образом делаются прямые перегонки, например, из АЦП сразу в USART, минуя процессор. Или на SPI. Так можно в десяток строк кода превратить STM32 в какой нибудь вариант SPI АЦП 🙂

Также есть бит CIRC, который разрешает цикличный режим. Т.е. как только DMA отработает свое количество циклов заданных в регистре DMA_CNDTRx так адрес сбрасывается в исходное положение. Таким образом, можно указать в DMA_CNDTRx размер буфера и получить циклических буфер нахаляву, аппаратно.

Сколько?
За то сколько раз должно отработать DMA отвечает регистр DMA_CNDTRx. На каждую сработку от входного сигнала (или от постоянно стоящего бита MEM2MEM) DMA копирует один обьект и уменьшает число в DMA_CNDTRx и так до нуля. Дойдет до нуля, канал выключится. Бит EN тут уже ничего решать не будет. Но если стоит бит CIRC, то регистр перезагрузится исходным значением и продолжит работу.

Значение может быть до 65535, используются только младшие 16 бит, старшие два байта ДОЛЖНЫ БЫТЬ НУЛЕМ ВСЕГДА.

Записать в регистр DMA_CNDTRx можно только при выключенном DMA канале. Читать можно когда угодно, по нему можно определять сколько объектов осталось DMA передать.

И тут есть важный нюанс. Я намеренно выше говорил, что «сколько осталось объектов». DMA_CNDTRx Считает не БАЙТЫ, а сколько раз DMA сработал. А за одну сработку, он зависимости от настроек, может пересунуть 1, 2 или 4 байта.

Т.е. если вы откуда то скопипастите код в котором будет что-то вида:

1 2 3 4 5 6
. uint8_t IN_buffer[10]; . DMA1_Channel1->CNDTR = sizeof(IN_Buffer); .

. uint8_t IN_buffer[10]; . DMA1_Channel1->CNDTR = sizeof(IN_Buffer); .

Источник: easyelectronics.ru

Плата HDMI XTP CP 4i HDMI DMA

Платы входов и выходов Extron XTP CP HDMI поддерживают HDMI и отдельные сигналы аналогового стереоаудио. Они позволяют подключать локальные источники и приёмники HDMI-сигнала к системе XTP Systems. Платы XTP поддерживают HDCP, а также форматы разрешений 1080p/60 Deep Color и 1920×1200.

Аудиосигналы могут маршрутизироваться независимо, включая эмбедированное в HDMI аудио, а одна из моделей XTP CP HDMI также обеспечивает одновременное микширование многоканального аудио в стерео PCM для независимого распределения. Выпускаемые в конфигурациях по четыре входа и четыре выхода, платы XTP CP HDMI обеспечивают возможность распределения HDMI-контента с поддержкой HDCP в пределах XTP Systems.

Платы полностью совместимы с сигналами DVI при использовании с адаптерами HDMI-DVI от Extron, доступными в качестве опции. XTP CP 4i HDMI представляет собой входную плату XTP, которая способна принимать сигналы от четырёх локальных источников HDMI.

Плата также оборудована четырьмя входами для балансного/небалансного стереоаудио с функцией независимой коммутации аудио (Audio breakaway) для обеспечения гибкости переключения и распределения. Аналоговые аудиосигналы оцифровываются в формат двухканального цифрового аудио PCM для независимой маршрутизации внутри системы.

Для оптимизации интеграции стереоаудио также может быть эмбедировано в поток сигнала для распределения вместе с видео и сигналами управления. Возможна коммутация входящих сигналов к выходной плате XTP® для локального или удалённого распределения. Модель XTP CP 4i HDMI DMA включает в себя все функции платы XTP CP 4i HDMI, но отличается одной дополнительной возможностью.

Еще по теме:  Планшет переходник USB HDMI

XTP CP 4i HDMI DMA обеспечивает микширование многоканального аудио в стерео PCM для отдельной маршрутизации. XTP CP 4o HDMI — это выходная плата XTP с четырьмя локальными выходами HDMI и аналоговыми аудиовыходами. Каждый порт HDMI поддерживает HDCP с возможностью принудительного вывода HDCP на выходе независимо от типа входящего сигнала.

Эмбедированное аудио или отдельные аналоговые стереосигналы доступны для распределения. Плата также имеет возможность извлечения двухканального стереоформата аудио PCM из эмбедированного аудио для независимой локальной маршрутизации. Для настройки уровней аудиосигнала на аналоговых аудиовыходах обеспечивается возможность регулировки громкости и отключения звука. Настройка громкости на выходе устраняет необходимость в использовании предусилителей во многих Дополнительно плата обеспечивает питание +5 В постоянного тока, 250 мА, на выходах HDMI для внешних периферийных устройств. XTP CP 4o HDMI совместима с входными платами XTP.

Extron XTP Systems

Продукция Extron XTP Systems обеспечивает полностью интегрированное решение для коммутации и распределения сигнала различных цифровых и аналоговых форматов. Оборудование данной серии поддерживает локальное подключение, а также возможность расширенной передачи видео высокого разрешения, аудио, RS‑232 и Ethernet на расстояния до 100 м по экранированному кабелю CATx и на еще большее расстояние по оптоволоконному кабелю.

Каждая система поддерживает HDCP и обеспечивает сверхбыструю, высоконадёжную коммутацию цифровых сигналов при помощи технологии SpeedSwitch от Extron. Центральным устройством системы является матричный коммутатор XTP CrossPoint.

Модульные матричные коммутаторы с возможностью расширения конфигураций от 4×4 до 64×64, в зависимости от размера шасси, могут быть наполнены широким ассортиментом входных и выходных матричных плат XTP. Входные и выходные платы обеспечивают прямые подключения HDMI, DVI, VGA, стандартного видео и аудио к локальным источникам и дисплеям, а также передачу сигналов к удалённым конечным точкам при использовании передатчиков и приёмников XTP.

Матричный коммутатор также может осуществлять передачу питания удалённому устройству XTP по кабелю CATx в зависимости от модели передатчика. Онлайн-конфигуратор XTP System Builder предоставляет удобный доступ для полноценного проектирования системы.

Эта программа также предлагает перечень компонентов с возможностью распечатки списка, информацию о ценах и заявку на расчет стоимости проекта. После подтверждения и получения заказа входящее в комплект конфигурационное программное обеспечение XTP System позволит сразу же установить и настроить систему без особых усилий. Понятное программное обеспечение используется для настройки, управления и мониторинга системы в реальном времени и имеет возможность полного обзора всех устройств XTP на одном компьютере. Благодаря модульным компонентам с возможностью «горячей» замены, широкому выбору передатчиков и приёмников XTP, а также расширенному мониторингу системы в режиме 24/7 оборудование XTP Systems предназначено для обеспечения непрерывной бесперебойной работы на критически важных объектах.

Технические характеристики

  • Четыре входа или четыре выхода HDMI со стереоаудио
  • Поддержка компьютерных и видеоразрешений до 1920×1200, включая HDTV 1080p/60 Deep Color и 2K
  • Поддержка HDCP — обеспечивают отображение материала с защищённым контентом и взаимодействие с другими HDCP-совместимыми устройствами.
  • Автоматическая эквализация в кабеле — компенсация потерь во входном кабеле оптимизирует качество всех входящих сигналов, гарантируя доставку исходного качества изображения ко всем элементам системы XTP.
  • Автоматическое перетактирование на выходе — восстанавливает форму и тайминги цифровых видеосигналов на каждом выходе, устраняя высокочастотное «дрожание» сигнала для обеспечения надёжной передачи на длинные дистанции.
  • Независимая коммутация аудио и видео (audio breakaway) — обеспечивает возможность отделения аудио от соответствующего ему видеосигнала.
  • Поддерживают следующие возможности HDMI: скорость передачи данных до 6,75 Гбит/с, Deep Color до 12 бит, 3D и аудиоформаты HD без потерь
  • Возможность отключения пользователем авторизации HDCP — позволяет отдельным входам имитировать совместимость с HDCP или её отсутствие при подключении источника, который автоматически зашифровывает контент при обнаружении HDCP-совместимого оборудования. Контент, защищённый от незаконного копирования, отображаться не будет.
  • Технология SpeedSwitch обеспечивает безукоризненную коммутацию HDCP-зашифрованного материала
  • Комплексное управление EDID — программное приложение для конфигурирования системы XTP предлагает доступ к EDID Minder для настройки параметров EDID для видеовходов, захвата EDID от подключённых дисплеев или загрузки индивидуальных EDID-файлов. Правильное управление EDID гарантирует простую интеграцию источников и дисплеев в систему, тем самым обеспечивая оптимизированную работу. Для улучшенного редактирования EDID и создания индивидуальных EDID-файлов доступна версия EDID Manager 2.0, которую можно скачать бесплатно.
  • EDID Minder автоматически управляет обменом данными EDID между подключёнными устройствами — технология EDID Minder гарантирует правильное включение всех источников и корректное отображение на дисплее.
  • Key Minder постоянно проверяет совместимость с HDCP для быстрой и бесперебойной коммутации — технология Key Minder определяет и поддерживает постоянное соединение HDCP между входными и выходными устройствами для быстрой, безупречной коммутации в профессиональных при одновременном распределении сигнала от одного источника на несколько дисплеев.
  • Визуальное подтверждение HDCP — при передаче зашифрованного контента на дисплей без поддержки HDCP передаётся полноэкранный зелёный сигнал, обеспечивая визуальное подтверждение того, что данный материал защищён от копирования и не может отображаться на данном дисплее.
  • Управление блокировкой видео — пользователь может блокировать видео и тем самым контролировать презентацию материала.
  • Локальные входы и выходы для аналогового стереоаудио — четыре входа для балансного/небалансного аналогового аудио оцифровываются в формат двухканального цифрового аудио PCM для независимой маршрутизации в пределах системы.
  • Усиление и затухание аудиосигнала на входе — позволяет настроить уровень усиления или затухания, устраняя слышимые различия в громкости звука при переключении между источниками.
  • Регулировка громкости аудио на выходе — устраняет необходимость в предусилителях во многих AV‑системах.
  • Коррекция формата интерфейса HDMI в DVI — автоматическое преобразование сигналов источника HDMI для вывода на подключённый дисплей DVI.
  • Автоматическое управление глубиной цвета — коммутатор автоматически настраивает количество бит глубины цвета согласно данным EDID дисплея, предотвращая цветовые несоответствия между источником и устройством отображения.
  • Встроенная тестовая таблица цветных полос с аудио или без для калибровки и установки
  • Подача питания +5 В постоянного тока, 250 мА, на выходах HDMI для внешних периферийных устройств
  • Возможность «горячей» замены — платы входов/выходов могут быть установлены или извлечены без необходимости в отключении матричного коммутатора.
  • Совместимость со всеми матричными коммутаторами XTP II CrossPoint и XTP CrossPoint — XTP Systems представляет собой гибкое и полностью интегрированное решение для коммутации и распределения сигналов, которое обеспечивает надёжную маршрутизацию нескольких цифровых и аналоговых форматов.
  • Простая установка и пусконаладка в программе XTP System Configuration Software от Extron
  • Сертификация JITC — Сертификация JITC успешно выполненный тест на совместимость и информационную безопасность для использования в государственных проектах и других инсталляциях особой важности.
  • В комплекте фиксаторы LockIt для кабеля HDMI
Еще по теме:  Можно ли переключать HDMI на горячую

Источник: avind.ru

Режимы PIO и DMA

Режимы PIO и DMA

Часто у пользователей возникает проблема очень медленной работы компьютера, особенно при записи и при чтении дисков, либо просто необоснованные «тормоза» системы при работе или загрузке. Причин возникновения этого может быть великое множество, сегодня предлагаю рассмотреть довольно распространенную – это неверный режим работы CD/DVD-ROM’а или жестких дисков, т.е. поговорим о PIO и DMA.

Что такое PIO и DMA?

PIO и DMA – это два режима работы жестких дисков, в общем случае любого привода. PIO (Programmable Input/Output) – уже устаревший режим, для работы ему необходимо задействовать центральный процессор, что приводит к значительной потери производительности.

DMA (Direct Memory Access) – современный метод, который минует процессор и обращается напрямую к оперативной памяти, это позволяет значительно (в несколько раз) увеличить производительность и избавиться от надоедливых «тормозов». Режим DMA в различных вариантах уже давно используется в операционных системах, однако в Windows XP часто случается ситуация в которой DMA автоматически переключается в PIO и уже вывести его оттуда обычными методами не получится. Из-за чего возникает эта ситуация? В Windows XP внедрен механизм контроля ошибок, если при чтении с жесткого диска или др. привода слишком часто возникают ошибки, то система автоматически переходит в более медленный режим, где их процент меньше. Однако, Windows XP может перевести в такой режим и нормально работающее устройство исходя из известных только ей критериев.

Как сменить режим работы с PIO на DMA?

Итак, Ваша система стала существенно притормаживать – проверим режимы работы всех приводов:
1. Запускаем консоль «Управление компьютером» – правой кнопкой на «Мой компьютер» → в выпадающем меню выбираем пункт «Управление», либо через Панель управления.
2. Выбираем «Диспетчер устройств», справа выбираем IDE ATA/ATAPI контроллеры, откроется несколько строчек с контроллерами – нас интересуют Первичный и Вторичный каналы IDE Заходим поочередно в свойства этих каналов (правой кнопкой на канале, строка «Свойства»), в закладку «Дополнительные параметры» Здесь выделены две группы «Устройство 0» и «Устройство 1», в каждой есть строки «Режим передачи» – в ней должно быть выбрано «DMA, если доступно», далее строка «Текущий режим передачи», должно быть что-то типа «Режим ультра DMA: 5», если здесь стоит «Режим PIO», то это как раз наш случай и мы будем его исправлять.

Если везде стоит режим ультра DMA, то у Вас все в порядке и дальнейшие действия можно не продолжать. 3. Для начала попробуем исправить вручную – в каждой строке «Режим передачи» ставим «DMA, если доступно», жмем «ОК» и перезагружаем компьютер. После включения вновь смотрим режимы работы каналов, если везде стоит DMA, то все в порядке, если остался PIO, то продолжаем дальше.
4. Вновь найдите Первичный и Вторичный каналы IDE и удалите их (правой кнопкой на каждом канале, в списке выбираем «Удалить»). Не бойтесь, все будет нормально работать. Снова перезагрузите компьютер – Windows XP найдет контроллеры и переведет их в быстрый режим работы, т.е в DMA. Проверте результат, везде должен стоять режим DMA.
5. Если все перечисленное не помогло и у Вас опять высвечивается «Режим PIO», тогда необходимо будет переставить драйвера для материнской платы – перезагрузиться и вновь проверить результат.
6. Ну и последний пункт, если после всех мучений «Режим PIO» так и не пропал, тогда придется поковыряться в реестре. Хочу отметить – производите какие-либо операции с реестром очень осторожно и внимательно, любое неправильное действие может привести к полной неработоспособности Вашей системы. Лучше всего сделать заранее бекап реестра. Будьте осторожны.
Для начала попробуйте отключить систему контроля ошибок. Для этого в ветке реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesCdfs, создайте ключ ErrorControl и установите его значение равным 0. После этого перезагрузитесь и выполните пункт №4.
Действуем дальше: открываем следующую ветку HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass в ней можно вручную выставить режим DMA. Здесь распологаются несколько папок 0000, 0001, 0002.
0000 – отвечает за сам контролер;
0001 – отвечает за Secondary IDE Chanell;
0002 – отвечает за Primary IDE Chanell;
Открываем папку для нужного нам канала. В ней находятся несколько ключей, для начала выбираем:
MasteDeviceTimingModeAllowed
SlaveDeviceTimingModeAllowed
и проставляем значение равное 0хffffffff.
После этого выставляем значение следующих ключей:
MasterDeviceTimingMode
SlaveDeviceTimingMode
в соответствии с следующими данными, в зависимости от поддерживаемого UDMA-режима:
UDMA Mode 2 – 0x2010
UDMA Mode 4 – 0x8010
UDMA Mode 5 – 0x10010
UDMA Mode 6 – 0xffff
После этого перезагрузитесь и проверьте результат – должно все нормально работать.

Была ли эта статья Вам полезна?

Что в статье не так? Пожалуйста, помогите нам её улучшить!

Источник: pc.ru

Оцените статью
Добавить комментарий