Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Странности Usart0 в at91rm9200
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sergeeff
Коллеги!

Столкнулся со странным явлением. Порт Usart0 работает в асинхронном режиме без hardware контроля (только RxD/TxD). К нему подключено некое устройство. При выключении устройстваб Usart0 принимает код 0x00, причем воспринимает это именно как байт данных, а не как RxBreak (бит взведен, но прерывания не возникает). Теперь внешнее устройство вновь включается. Мы посылаем в него n-байтную посылку. И тут выясняется, что первый байт из этой посылки передатчик шлет в линию два раза. Это совершенно четко показывает анализатор RS232, включенный между устройствами. Вопрос в том, почему первый байт посылается дважды? Дальнейшие обмены данными происходят без подобного явления.
hwdev
Цитата(sergeeff @ Jun 13 2008, 21:20) *
Коллеги!

Столкнулся со странным явлением. Порт Usart0 работает в асинхронном режиме без hardware контроля (только RxD/TxD). К нему подключено некое устройство. При выключении устройстваб Usart0 принимает код 0x00, причем воспринимает это именно как байт данных, а не как RxBreak (бит взведен, но прерывания не возникает). Теперь внешнее устройство вновь включается. Мы посылаем в него n-байтную посылку. И тут выясняется, что первый байт из этой посылки передатчик шлет в линию два раза. Это совершенно четко показывает анализатор RS232, включенный между устройствами. Вопрос в том, почему первый байт посылается дважды? Дальнейшие обмены данными происходят без подобного явления.


Ну видимо, из-за того, что в сдвиговом регистре уже что-то было. USART0 вы выключили раньше, чем смогли обработать прерывание от передатчика. Так?
sergeeff
Нет, не так. Выключается другое устройство, подсоединенное к моему. И я от него по прерыванию получаю таки этот самый байт 0x00. Хотя, по логике вещей, я должен бы получить сигнал Rx Break, что и соответствовало бы действительности. Тем не менее это прерывание RxBRK не возникает, и в принципе, черт бы с ним, если бы потом мой передатчик не дублировал первый байт в посылке информации этому другому устройству.
Terrabyte
сразу сложно сказать, вопрос в том, правильно ли вы настроили usart, помнится у меня возникало подобное, из-за того, что забыл разрешить тактирование AIC.
Вы пользуетесь PDC наверно, в каком порядке вы включаете USART и PDC, какие прерывания разрешены при включении 'устройства..', у вас по timeoutу или по количеству принятых байт (RCR)?
sergeeff
Как-то не верится, что проблемы в неправильной работе USART на прием. Проблема то возникает при передаче. А передача организована без PDC и прерываний. Просто анализируется бит занятости передатчика и если он свободен в регистр TDH пишется очередной байт.
Terrabyte
всё таки нужно точно знать что происходит при включении этого устройства, посмотреть осцилом.., если бит RXBRK устанавливается, значит условие ...when all data, parity and stop bits are low выполняется, а прерывание - ? если разрешено, то должно возникать!
вы говорите:
"если бы потом мой передатчик не дублировал первый байт в посылке информации этому другому устройству"
если был принят байт до этого, нужно же этот момент подтвердить- прочитать принятое и потом сбросить RXBRK установкой RSTSTA
sergeeff
Насчет дублирования первого байта - вопрос закрыт. Это была наша ошибка в реализации специфического протокола.

Тем не менее остается пока открытым вопрос с RxBRK. Выключение второго устройства приводит к тому, что происходит прерывание в USART первого устройства, и по этому прерыванию я считываю байт данных 0х00, но бит RxBRK остается в "0" при этом, хотя в регистре IER он активизирован. Соответственно невозможно различить, это действительно байт данных 0х00 или это сигнал Break при приеме.
Terrabyte
а в Errat_e написано :

USART: RXBRK Flag Error in Asynchronous Mode
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.

может в этом дело?
а смотрели что происходит, при отключении ?, может устройство дёргает в 0 RXD..
sergeeff
Что-то не могу понять, в каком Errata это изложено?
Terrabyte
я на arm7 посмотрел, многие периферийные модули у них совпадают
pdf : 6175H–ATARM–03-Dec-07 - эта Errata здесь,

а вы смотрели тут? там BREAK OPTIONS описаны на 36-37 стр.
документ
sergeeff
Спасибо, завтра попробую все это воплотить.
sergeeff
Terrabyte!

Спасибо большое за помощь. Как только определил timeguard = 1, сразу же стало появляться прерывание по RxBRK. Остается только удивлятся тому, как пишутся errata.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.