Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тонкости работы USART (ну для tiny2313 точно)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
90S1200
Собственно говоря хочется лишь уяснить некоторые детали которые в общем случае решаемы.
Так что скажем интерес чисто академический.
Дело вот в чем.
В манах написано что после запрета на передачу передача продолжается если во время запрета
в выходном буфере или сдвиговом регистре находятся непереданные данные.
Решил я воспользоваться этим. Мальчишество конечно. Можно выключить и после передачи.
Ну тут решил попробовать. Вдруг когда нибудь все в это упрется а так хоть опыт будет.
В первом варианте все работало отлично. Не знаю может если б тестить дня 3 непрерывно что и всплыло бы. А так заработало потыркал все равно работает сбоев нет.
Заказчик изменил условия. Переделал но эта часть оставалась неизменной.
Запускаю. Ошибки. Причем ошибки явно наступают случайным образом. Начал разбираться
все упирается в цикл где идет ожидание окончания передачи. В одних случаях флаг выставляется
в других нет. Вероятность 50/50. Мне казалось что флаги выставляются в любом случае по наступлению
события. Вопрос тогда а это событие наступило? Была передача или нет? Если была то почему флаг не стал. Если не было то почему не было. Ведь в буфере по любому есть непереданные данные.

Было бы интересно выслушать Ваши мнения
Kovrov
а что такое запрет на передачу
в смысле TXEN=0 ?
beer_warrior
Судя по написанному, вы поллите флажок в цикле. Тут вполне возможен проскок. Чтоб гарантировано отловить флажок, используйте прерывание.
_Bill
Цитата(90S1200 @ Jun 22 2006, 07:55) *
Запускаю. Ошибки. Причем ошибки явно наступают случайным образом. Начал разбираться
все упирается в цикл где идет ожидание окончания передачи. В одних случаях флаг выставляется
в других нет. Вероятность 50/50. Мне казалось что флаги выставляются в любом случае по наступлению
события. Вопрос тогда а это событие наступило? Была передача или нет? Если была то почему флаг не стал. Если не было то почему не было. Ведь в буфере по любому есть непереданные данные.

О каком флаге идет речь?
arttab
Цитата(beer_warrior @ Jun 22 2006, 13:29) *
Судя по написанному, вы поллите флажок в цикле. Тут вполне возможен проскок. Чтоб гарантировано отловить флажок, используйте прерывание.

это как проскочить. мк не RND всетакм
90S1200
Цитата(beer_warrior @ Jun 22 2006, 10:29) *
Судя по написанному, вы поллите флажок в цикле. Тут вполне возможен проскок. Чтоб гарантировано отловить флажок, используйте прерывание.

Забавно это читать.
Я просто не представляю как процессор может не выполнить команду.
Что значит проскок?
То есть флаг стоял а камень посчитал что его нет?
Это что есть некоторая вероятность безошибочного выполнения проверенного кода.
Вроде 5% остается на то что машина ПРАВИЛЬНО выполнит код.


Цитата(Kovrov @ Jun 22 2006, 10:28) *
а что такое запрет на передачу
в смысле TXEN=0 ?

Точно
beer_warrior
Цитата
Это что есть некоторая вероятность безошибочного выполнения проверенного кода.
Вроде 5% остается на то что машина ПРАВИЛЬНО выполнит код.

Вы думаете есть вероятность ошибочной работы конечного автомата? smile.gif
Насколько я понимаю условия достаточно экстремальные.
Так, что флаг мог выставиться, и быть сброшеным до чтения из регистра. Тем более вы говорите, об изменении поведения после изменения другой части программы smile.gif
На чем пишете, чем собираете, если С учтены ли volatile? Есть ли прерывания? Код в студию пожалуйста!
90S1200
Цитата(beer_warrior @ Jun 22 2006, 12:42) *
Цитата
Это что есть некоторая вероятность безошибочного выполнения проверенного кода.
Вроде 5% остается на то что машина ПРАВИЛЬНО выполнит код.

Вы думаете есть вероятность ошибочной работы конечного автомата? smile.gif
Насколько я понимаю условия достаточно экстремальные.
Так, что флаг мог выставиться, и быть сброшеным до чтения из регистра. Тем более вы говорите, об изменении поведения после изменения другой части программы smile.gif
На чем пишете, чем собираете, если С учтены ли volatile? Есть ли прерывания? Код в студию пожалуйста!

Насчет конечных автоматов это вы конечно умно заметили.
А насчет флага: что могло его сбросить?
Насколько я понимаю такое событие не документировано.
Цитата Флаг сбрасывается аппаратно при обработке программы прерывания или програмно записью в него 1
Ни того ни другого не было
beer_warrior
Цитата
А насчет флага: что могло его сбросить?
Насколько я понимаю такое событие не документировано.


Если в разных вариантах кода работает по разному, наверное где-то сбрасываться. Почему я сразу и предложил прерывание - сразу за одним аппаратым событием, наступит следующее и вы _гарантированно_ отловите флаг, если такой имел место.
Если нет - тогда запишем в глюки smile.gif
90S1200
Цитата(beer_warrior @ Jun 22 2006, 13:57) *
Цитата
А насчет флага: что могло его сбросить?
Насколько я понимаю такое событие не документировано.


Если в разных вариантах кода работает по разному, наверное где-то сбрасываться. Почему я сразу и предложил прерывание - сразу за одним аппаратым событием, наступит следующее и вы _гарантированно_ отловите флаг, если такой имел место.
Если нет - тогда запишем в глюки smile.gif

Что значит где то?
Вы конечно не видите исходника но то что измененая программа ни коим образом не касается USART
точно. Если она влияет то я могу предположить лишь то что это просто магия.
Непрямое влияние рабочих регистров на регистры ввода вывода.
ТО что это глюк это мне ясно. Но какова его природа?
Вы подсказали мне интересную мысль.
Вероятно при запрете передачи регистр также флагов сбрасывается.
Тогда вопрос а насколько эта ситуация типична?
Допустим работает таймер. Переполнился стал флаг. Если таймер потом отключить то флаг также сброситься?
Это что получается что флаги сбрасываются и при отключении устройств за которыми они закреплены?
DS
Флаг при выключении, конечно сбрасывается. Иначе при включении состояние флага будет неопределенным.
Kovrov
Цитата(90S1200 @ Jun 22 2006, 12:34) *
Цитата(Kovrov @ Jun 22 2006, 10:28) *

а что такое запрет на передачу
в смысле TXEN=0 ?

Точно

флаг UDRe или TXC?
скорее всего тхс да?
90S1200
Цитата(DS_ @ Jun 22 2006, 14:46) *
Флаг при выключении, конечно сбрасывается. Иначе при включении состояние флага будет неопределенным.

А на основании чего вы сделали заключение что он сбрасывается?
Это ваши рассуждения или это данные даташитов или еще лучше эксперимент.
Лично мне ваш вывод не кажется само собой разумеющимся.


Цитата(Kovrov @ Jun 22 2006, 14:46) *
Цитата(90S1200 @ Jun 22 2006, 12:34) *


Цитата(Kovrov @ Jun 22 2006, 10:28) *

а что такое запрет на передачу
в смысле TXEN=0 ?

Точно

флаг UDRe или TXC?
скорее всего тхс да?

Ага txc
otrog
Цитата(90S1200 @ Jun 22 2006, 16:09) *
Цитата(DS_ @ Jun 22 2006, 14:46) *

Флаг при выключении, конечно сбрасывается. Иначе при включении состояние флага будет неопределенным.

А на основании чего вы сделали заключение что он сбрасывается?
Это ваши рассуждения или это данные даташитов или еще лучше эксперимент.
Лично мне ваш вывод не кажется само собой разумеющимся.


Ага txc


DataSheet ATtiny2313/V стр.128:
Код
USART Control and Status Register A – UCSRA
                      TXC
Read/Write            R/W
Initial Value         0


Initial Value - значение бита после подачи питания или системного сброса.
90S1200
Цитата(otrog @ Jun 22 2006, 16:20) *
Цитата(90S1200 @ Jun 22 2006, 16:09) *

Цитата(DS_ @ Jun 22 2006, 14:46) *

Флаг при выключении, конечно сбрасывается. Иначе при включении состояние флага будет неопределенным.

А на основании чего вы сделали заключение что он сбрасывается?
Это ваши рассуждения или это данные даташитов или еще лучше эксперимент.
Лично мне ваш вывод не кажется само собой разумеющимся.


Ага txc


DataSheet ATtiny2313/V стр.128:
Код
USART Control and Status Register A – UCSRA
                      TXC
Read/Write            R/W
Initial Value         0


Initial Value - значение бита после подачи питания или системного сброса.

Вы вообще понимаете что речь идет о включении внутреннего устройства кристалла(запуск USART и
использование им выводов) а не о включении микроконтроллера.
Или вы прочитали последний вопрос и решили дать исчерпывающий ответ?
GetSmart
Может вырежете кусок своего кода, общающегося с уартом? А то какое-то гадание на кофейной гуще.
Kovrov
спинным мозгом чуйвствую что это из за разных моментов вырубания TXEN.
возможно надо изучать более вдумчиво логический механизм передатчика, что бы понять онное..
можно для теста попытаться посмотреть.... полностью ли выходит из уарта передаваемый байт и сопоставить это с выставлением - невыставлением флага TXC.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.