Цитата(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