artemkad 54 6 июля, 2012 Опубликовано 6 июля, 2012 · Жалоба Не подскажет ли кто, может ли DMA канал в xMega A3 организовать автоматическое закидывание байтов данных в кольцевой буфер без ручной переустановки указателя на начало? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 6 июля, 2012 Опубликовано 6 июля, 2012 · Жалоба Не подскажет ли кто, может ли DMA канал в xMega A3 организовать автоматическое закидывание байтов данных в кольцевой буфер без ручной переустановки указателя на начало? Настройка ADDRCTRL.DESTRELOAD в ненулевое значение. Только зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 54 6 июля, 2012 Опубликовано 6 июля, 2012 · Жалоба Спасибо, попробую. Похоже именно оно. Есть асинхронный входной USART (и даже не один). Есть желание перестать гоняться за каждым принятым байтом(успевать до принятия следующего). Но нет желания резервировать буфер на всю возможную принятую строку. ЗЫ. А вот если-бы еще и автоматом символ конца строки обнаруживал. :disco: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 6 июля, 2012 Опубликовано 6 июля, 2012 · Жалоба Спасибо, попробую. Похоже именно оно. Есть асинхронный входной USART (и даже не один). Есть желание перестать гоняться за каждым принятым байтом(успевать до принятия следующего). Но нет желания резервировать буфер на всю возможную принятую строку. Не знаю поможет ли вам перегрузка адреса: дма примет сколько-то байт перегрузит адрес и начнет преписывать буфер новыми значениями. К тому же может быть неизвестан объём принимаемых данных. и как тогда настраивать дма? PS. Мне больше понравилось использование дма для передачи по уарту, приём как-то не очень, разве что приём пакетов известной длины. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 54 6 июля, 2012 Опубликовано 6 июля, 2012 · Жалоба дма примет сколько-то байт перегрузит адрес и начнет преписывать буфер новыми значениями. По идее пока он начнет переписывать я успею от уже принятых данных буфер подчистить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 6 июля, 2012 Опубликовано 6 июля, 2012 · Жалоба По идее пока он начнет переписывать я успею от уже принятых данных буфер подчистить. А как собитаетесь узнавать сколько байт уже пришло в приёмный буфер? Channel Destination Address проверять? Это корректно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemkad 54 7 июля, 2012 Опубликовано 7 июля, 2012 · Жалоба А как собитаетесь узнавать сколько байт уже пришло в приёмный буфер? Для текстового потока могу никак - достаточно факта того, что там хоть один есть. На место изъятого из буфера байта помещаю какой нибудь невероятный символ (к примеру 0xFF) и так, пока не встречу такой-же символ, что будет означать начало еще не занятого участка. Главное, что-бы указатель записи не перегнал указатель чтения (определяется длиной буфера и максимальным временем реакции)... Channel Destination Address проверять? Это корректно? Пока не знаю. Хотя и так попробую... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться