реклама на сайте
подробности

 
 
> LPC1768 DMA DMX512, как ловить Break?
theBMV
сообщение Sep 28 2011, 05:29
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



Немного оффтопну сначала:
Юзал LPC2129, ну и пересев на LPC1768, перекинул рутину приема DMX оттуда туда. Ну а что, одинаковая периферия, подумал я. Не заработало. Оказывается в LPC1768 флаг BI поднимается вместе с флагом FE. В LPC2129 поднимался только BI.

А теперь к вопросу:
Хочу заюзать DMA для приема DMX512. Но нужно отлавливать начало, т.е. break-импульс. Как сделать? Софтварно ловить break и включать DMA на прием 512 байтов? А что, если ошибка? Или есть возможность заставить DMA хватать LSR помимо RBR и софтварно уже анализировать массив LSRов? Тогда этот метод ничуть не лучше обычного софтварного.

Может есть какие-то решения? Прошу поделиться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
theBMV
сообщение Sep 28 2011, 06:11
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



ну, сейчас проблем с приемом нет. просто хочется заюзать DMA, раз уж он есть. а ворочать вручную поток 250kbod не так уж накладно по ресурсам.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Sep 28 2011, 07:38
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(theBMV @ Sep 28 2011, 08:11) *
ну, сейчас проблем с приемом нет. просто хочется заюзать DMA, раз уж он есть. а ворочать вручную поток 250kbod не так уж накладно по ресурсам.


DMA хорошо пользовать, если известно, сколько байт принимать. В общем случае DMX пакет вовсе не обязательно 513 байт длиной: он может быть и короче. Да и сам BREAK распознавать только по уставлению флагов, которые сигнализируют 11 нулевых битов, также не совсем корректно: согласно спецификации BREAK имеет длину не менее 88us, что следовало бы распознавать, списывая все остальные отклонения на помехи. Но все зависит от заказчика и конкретного приложения.

На мой взгляд, наиболее эффективным был бы комбинированный прием: UART (если возможно), генерирует прерывание только по "ошибке", то есть FE и/или BREAK, а там (пере)программируется и (пере)запускается DMA на прием 513 байт. Если пакет окажется короче, последующий BREAK переинициализирует DMA и, если предусмотрена двойная буферизация, запустит процесс перекачки принятого буфера в рабочий, и т.д.

Сообщение отредактировал KnightIgor - Sep 28 2011, 07:45
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016