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

 
 
 
Reply to this topicStart new topic
> UART в AT91SAM7S, Синхронизация
Bovolk
сообщение Nov 8 2008, 12:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 6-09-06
Из: Украина/Киев
Пользователь №: 20 145



На входе протокол "DMX-512". Суть его такова, что есть сигнал "Break"=0 и длительностью не менее 88 мкс (22 символа) за которым идет сигнал "MaB"=1 и длительностью не менее 2-х символов. В общем, проблема в этом "Break". Ловлю его по Прерыванию "RXBRK" но вся беда в том, что UART после этого не дожидается высокого уровня MaB, а сразу переходит на прием, ведь "Break" еще продолжается. Из положения вышел так: После ловли "RXBRK" отключаю UART и включаю RX-pin на внешнее прерывание ожидая прихода "MaB". По приходу "MaB" снова перехожу на прием. Все идеально работает-- проблема решена, но камень на душе остался. UART должен ждать стопа после прихода "RXBRK" или "Frame Error", или же если на линии продолжаестя низкий уровень начинать новый прием???
Go to the top of the page
 
+Quote Post
Bovolk
сообщение Nov 9 2008, 21:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 6-09-06
Из: Украина/Киев
Пользователь №: 20 145



2 All! Неужели никто не знает, должен UART ждать стопа после рассинхронизации (Frame Error) или нет???
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2008, 07:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



За эти два дня можно было и эксперимент поставить.

Цитата из DS:
Цитата
The receiver detects a break condition when all data, parity and stop bits are low. This corresponds
to detecting a framing error with data at 0x00, but FRAME remains low.
When the low stop bit is detected, the receiver asserts the RXBRK bit in US_CSR. This bit may
be cleared by writing the Control Register (US_CR) with the bit RSTSTA at 1.
An end of receive break is detected by a high level for at least 2/16 of a bit period in asynchronous
operating mode or one sample at high level in synchronous operating mode. The end of
break detection also asserts the RXBRK bit.

Т.е. framing error'а Вы не получите, данные во время break приниматься не будут.
Go to the top of the page
 
+Quote Post
Bovolk
сообщение Nov 10 2008, 20:23
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 6-09-06
Из: Украина/Киев
Пользователь №: 20 145



Спасибо! Если я правильно перевел, то RXBRK должен прийти в начале и конце Break? Вот это у меня как раз и не заработало, что и повлекло за собой извращения с прерываниями от пина.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 10 2008, 20:28
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Bovolk @ Nov 10 2008, 23:23) *
Если я правильно перевел, то RXBRK должен прийти в начале и конце Break? Вот это у меня как раз и не заработало, что и повлекло за собой извращения с прерываниями от пина.

Да, приходит символ 0x00, затем RXBRK в начале и в конце break'а. Между RXBRK не происходит ничего.
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Jul 9 2009, 11:38
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



По поводу DMX еще одно дополнение. Отчасти проблема с формированием RXBRK была рассмотрена здесь:
Странности Usart0 в at91rm9200.

Но ситуация еще интереснее. Читаем Errata:
When timeguard is 0, RXBRK is not set when the break character is located just after the Stop
bit. FRAME (Frame Error) is set instead.
Problem Fix/Workaround
Timeguard should be > 0.


Смею утверждать, что это относится к внешнему устройству, которое должно вставлять свой таймгард перед break. Явно в этом абзаце это не прописано. Надо было написать так:
Если внешнее устройство шлет break сразу после стоп-бита предыдущего слова, RXBRK не выставляется.

Такая ситуация возникла, я об нее споткнулся, докопался до errata, включил timeguard. 1, 2, 3, 4... не помогает. Все равно детектирует FRAME. Думаю, ну каким боком модуль передатчика влияет на приемник? Снял DMX тестер, хороший тестер, Artistic Licence, но он шлет break сразу после завершения предыдущего кадра. Поставил свое устройство с небольшой задержкой перед посылкой break нового кадра и все стало нормально.

То есть, надо проверять, есть ли RXBRK или есть ли FRAME и при этом данные в регистре приемника равны нулю...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:52
Рейтинг@Mail.ru


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