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

Кольцевой буфер и DMA

Не подскажет ли кто, может ли DMA канал в xMega A3 организовать автоматическое закидывание байтов данных в кольцевой буфер без ручной переустановки указателя на начало?

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


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

Не подскажет ли кто, может ли DMA канал в xMega A3 организовать автоматическое закидывание байтов данных в кольцевой буфер без ручной переустановки указателя на начало?

Настройка ADDRCTRL.DESTRELOAD в ненулевое значение.

Только зачем?

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


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

Спасибо, попробую. Похоже именно оно.

Есть асинхронный входной USART (и даже не один). Есть желание перестать гоняться за каждым принятым байтом(успевать до принятия следующего). Но нет желания резервировать буфер на всю возможную принятую строку.

 

ЗЫ. А вот если-бы еще и автоматом символ конца строки обнаруживал. :disco:

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


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

Спасибо, попробую. Похоже именно оно.

Есть асинхронный входной USART (и даже не один). Есть желание перестать гоняться за каждым принятым байтом(успевать до принятия следующего). Но нет желания резервировать буфер на всю возможную принятую строку.

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

К тому же может быть неизвестан объём принимаемых данных. и как тогда настраивать дма?

 

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

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


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

дма примет сколько-то байт перегрузит адрес и начнет преписывать буфер новыми значениями.

По идее пока он начнет переписывать я успею от уже принятых данных буфер подчистить.

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


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

По идее пока он начнет переписывать я успею от уже принятых данных буфер подчистить.

А как собитаетесь узнавать сколько байт уже пришло в приёмный буфер?

Channel Destination Address проверять? Это корректно?

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


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

А как собитаетесь узнавать сколько байт уже пришло в приёмный буфер?

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

Channel Destination Address проверять? Это корректно?

Пока не знаю. Хотя и так попробую...

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


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

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

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

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

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

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

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

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

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

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