Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кольцевой буфер и DMA
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ArtemKAD
Не подскажет ли кто, может ли DMA канал в xMega A3 организовать автоматическое закидывание байтов данных в кольцевой буфер без ручной переустановки указателя на начало?
_Артём_
Цитата(ArtemKAD @ Jul 6 2012, 17:54) *
Не подскажет ли кто, может ли DMA канал в xMega A3 организовать автоматическое закидывание байтов данных в кольцевой буфер без ручной переустановки указателя на начало?

Настройка ADDRCTRL.DESTRELOAD в ненулевое значение.
Только зачем?
ArtemKAD
Спасибо, попробую. Похоже именно оно.
Есть асинхронный входной USART (и даже не один). Есть желание перестать гоняться за каждым принятым байтом(успевать до принятия следующего). Но нет желания резервировать буфер на всю возможную принятую строку.

ЗЫ. А вот если-бы еще и автоматом символ конца строки обнаруживал. disco.gif
_Артём_
Цитата(ArtemKAD @ Jul 6 2012, 20:11) *
Спасибо, попробую. Похоже именно оно.
Есть асинхронный входной USART (и даже не один). Есть желание перестать гоняться за каждым принятым байтом(успевать до принятия следующего). Но нет желания резервировать буфер на всю возможную принятую строку.

Не знаю поможет ли вам перегрузка адреса: дма примет сколько-то байт перегрузит адрес и начнет преписывать буфер новыми значениями.
К тому же может быть неизвестан объём принимаемых данных. и как тогда настраивать дма?

PS. Мне больше понравилось использование дма для передачи по уарту, приём как-то не очень, разве что приём пакетов известной длины.
ArtemKAD
Цитата
дма примет сколько-то байт перегрузит адрес и начнет преписывать буфер новыми значениями.

По идее пока он начнет переписывать я успею от уже принятых данных буфер подчистить.
_Артём_
Цитата(ArtemKAD @ Jul 6 2012, 21:43) *
По идее пока он начнет переписывать я успею от уже принятых данных буфер подчистить.

А как собитаетесь узнавать сколько байт уже пришло в приёмный буфер?
Channel Destination Address проверять? Это корректно?
ArtemKAD
Цитата
А как собитаетесь узнавать сколько байт уже пришло в приёмный буфер?

Для текстового потока могу никак - достаточно факта того, что там хоть один есть. На место изъятого из буфера байта помещаю какой нибудь невероятный символ (к примеру 0xFF) и так, пока не встречу такой-же символ, что будет означать начало еще не занятого участка. Главное, что-бы указатель записи не перегнал указатель чтения (определяется длиной буфера и максимальным временем реакции)...
Цитата
Channel Destination Address проверять? Это корректно?

Пока не знаю. Хотя и так попробую...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.