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

 
 
> Останов UART в Atmega, как остановить передачу в любом месте ?
impatt
сообщение Jul 17 2006, 07:42
Сообщение #1


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Байт начал передаваться, но ещё не передался. Как сбросить процесс передачи так, чтобы можно было быть уверенным, что записанный в UDR байт немедленно после такого сброса начал передаваться ?
Возможные варианты на предполагаемое действие типа "запретить и немедленно разрешить UART":
1. Продолжит передаваться недопереданный байт. Хотя это и было бы странно.
2. Передача прервётся и UART забудет о том, что только что передавал байт (это было бы то, что надо).
Если кто может прокомментировать - плиз.
Заранее благодарю.

Сообщение отредактировал impatt - Jul 17 2006, 07:44
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Jul 17 2006, 08:00
Сообщение #2


Профессионал
*****

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



Если байт попал в шифтер ничего уже сделать нельзя, автомат запущен, и сдвиг отработает.
Единственное, что можно попробовать, это обнулить UBRR, но это достаточно лихой номер и не факт, что сработает.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
impatt
сообщение Jul 17 2006, 08:24
Сообщение #3


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Цитата(beer_warrior @ Jul 17 2006, 11:00) *
Если байт попал в шифтер ничего уже сделать нельзя, автомат запущен, и сдвиг отработает.
Единственное, что можно попробовать, это обнулить UBRR, но это достаточно лихой номер и не факт, что сработает.


Ясно. Жаль. Задумка была нацелена на экономное решение приёма пакетов по протоколу MODBUS-RTU. Оно работает в симплексном режиме, и признаком ошибки является расстояние между байтами в пакете более 1.5 символа (ну, скажем 2, для круглости) и признаком конца пакета (и уже не ошибки) время простоя приёмника более 3.5 символов (для круглости 4). Думал, было бы, раз режим симплексный, отсчитывать интервалы самим UART-ом, пусть бы передатчик молотил и временные интервалы отмерял, но вот если кто-то будет отправлять байты на приём с паузами, то такой символьный таймер хрен остановишь, как выяснилось, и непонятно, что он там сможет намерять.
То есть, немного подробнее: когда приходит символ на приёмник, нужно запустить таймер. Некий абстрактный таймер с разрешением примерно 1 символ. Сгодился бы передатчик того-же UART, который бы пулял в космос, и генерил бы прерывания, которые я бы асинхронно считал.
Приём байт тоже асинхронный, так что корячится просто использование таймера, которых что-то мало осталось на чипе.
А касательно перенастройки ножки - сам включеный UART её переопределяет и он на ней самй главный.
В общем, опять AVR-ка показала свою негибкость.

Сообщение отредактировал impatt - Jul 17 2006, 08:29
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 21:21
Рейтинг@Mail.ru


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