|
Тонкости работы USART (ну для tiny2313 точно) |
|
|
|
Jun 22 2006, 04:55
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 5-05-06
Пользователь №: 16 806

|
Собственно говоря хочется лишь уяснить некоторые детали которые в общем случае решаемы. Так что скажем интерес чисто академический. Дело вот в чем. В манах написано что после запрета на передачу передача продолжается если во время запрета в выходном буфере или сдвиговом регистре находятся непереданные данные. Решил я воспользоваться этим. Мальчишество конечно. Можно выключить и после передачи. Ну тут решил попробовать. Вдруг когда нибудь все в это упрется а так хоть опыт будет. В первом варианте все работало отлично. Не знаю может если б тестить дня 3 непрерывно что и всплыло бы. А так заработало потыркал все равно работает сбоев нет. Заказчик изменил условия. Переделал но эта часть оставалась неизменной. Запускаю. Ошибки. Причем ошибки явно наступают случайным образом. Начал разбираться все упирается в цикл где идет ожидание окончания передачи. В одних случаях флаг выставляется в других нет. Вероятность 50/50. Мне казалось что флаги выставляются в любом случае по наступлению события. Вопрос тогда а это событие наступило? Была передача или нет? Если была то почему флаг не стал. Если не было то почему не было. Ведь в буфере по любому есть непереданные данные.
Было бы интересно выслушать Ваши мнения
|
|
|
|
|
Jun 22 2006, 07:10
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(90S1200 @ Jun 22 2006, 07:55)  Запускаю. Ошибки. Причем ошибки явно наступают случайным образом. Начал разбираться все упирается в цикл где идет ожидание окончания передачи. В одних случаях флаг выставляется в других нет. Вероятность 50/50. Мне казалось что флаги выставляются в любом случае по наступлению события. Вопрос тогда а это событие наступило? Была передача или нет? Если была то почему флаг не стал. Если не было то почему не было. Ведь в буфере по любому есть непереданные данные. О каком флаге идет речь?
|
|
|
|
|
Jun 22 2006, 08:34
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 5-05-06
Пользователь №: 16 806

|
Цитата(beer_warrior @ Jun 22 2006, 10:29)  Судя по написанному, вы поллите флажок в цикле. Тут вполне возможен проскок. Чтоб гарантировано отловить флажок, используйте прерывание. Забавно это читать. Я просто не представляю как процессор может не выполнить команду. Что значит проскок? То есть флаг стоял а камень посчитал что его нет? Это что есть некоторая вероятность безошибочного выполнения проверенного кода. Вроде 5% остается на то что машина ПРАВИЛЬНО выполнит код. Цитата(Kovrov @ Jun 22 2006, 10:28)  а что такое запрет на передачу в смысле TXEN=0 ? Точно
|
|
|
|
|
Jun 22 2006, 08:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата Это что есть некоторая вероятность безошибочного выполнения проверенного кода. Вроде 5% остается на то что машина ПРАВИЛЬНО выполнит код. Вы думаете есть вероятность ошибочной работы конечного автомата?  Насколько я понимаю условия достаточно экстремальные. Так, что флаг мог выставиться, и быть сброшеным до чтения из регистра. Тем более вы говорите, об изменении поведения после изменения другой части программы  На чем пишете, чем собираете, если С учтены ли volatile? Есть ли прерывания? Код в студию пожалуйста!
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jun 22 2006, 08:59
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 5-05-06
Пользователь №: 16 806

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

Группа: Новичок
Сообщений: 17
Регистрация: 5-05-06
Пользователь №: 16 806

|
Цитата(beer_warrior @ Jun 22 2006, 13:57)  Цитата А насчет флага: что могло его сбросить? Насколько я понимаю такое событие не документировано. Если в разных вариантах кода работает по разному, наверное где-то сбрасываться. Почему я сразу и предложил прерывание - сразу за одним аппаратым событием, наступит следующее и вы _гарантированно_ отловите флаг, если такой имел место. Если нет - тогда запишем в глюки  Что значит где то? Вы конечно не видите исходника но то что измененая программа ни коим образом не касается USART точно. Если она влияет то я могу предположить лишь то что это просто магия. Непрямое влияние рабочих регистров на регистры ввода вывода. ТО что это глюк это мне ясно. Но какова его природа? Вы подсказали мне интересную мысль. Вероятно при запрете передачи регистр также флагов сбрасывается. Тогда вопрос а насколько эта ситуация типична? Допустим работает таймер. Переполнился стал флаг. Если таймер потом отключить то флаг также сброситься? Это что получается что флаги сбрасываются и при отключении устройств за которыми они закреплены?
|
|
|
|
|
Jun 22 2006, 10:46
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(90S1200 @ Jun 22 2006, 12:34)  Цитата(Kovrov @ Jun 22 2006, 10:28)  а что такое запрет на передачу в смысле TXEN=0 ?
Точно флаг UDRe или TXC? скорее всего тхс да?
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Jun 22 2006, 12:09
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 5-05-06
Пользователь №: 16 806

|
Цитата(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
|
|
|
|
|
Jun 22 2006, 12:20
|
Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589

|
Цитата(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 - значение бита после подачи питания или системного сброса.
--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
|
|
|
|
|
Jun 22 2006, 12:39
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 5-05-06
Пользователь №: 16 806

|
Цитата(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 и использование им выводов) а не о включении микроконтроллера. Или вы прочитали последний вопрос и решили дать исчерпывающий ответ?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|