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

 
 
> Окончание передачи UART
Ioann
сообщение Apr 5 2007, 07:23
Сообщение #1


Участник
*

Группа: Validating
Сообщений: 32
Регистрация: 7-06-05
Пользователь №: 5 790



Может, кому-то будет полезно...

Делал RS485 на ATMega128. Нужно было отлавливать момент окончания передачи символа - есть соответствующий бит TXC. Так вот, оказалось, что этот бит устанавливается почему-то ДО окончания передачи последнего символа (одновременно с TXE), хотя по datasheet должен по окончании. Когда по этому биту делал переключение драйвера на приём, последний символ не передавался. Пришлось делать программную задержку в виде пустого цикла.

Интересно, это был глюк только у меня или везде так. И также интересно, как у других ATMeg. Если кто-то сталкивался - поделитесь.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ioann
сообщение Apr 5 2007, 09:03
Сообщение #2


Участник
*

Группа: Validating
Сообщений: 32
Регистрация: 7-06-05
Пользователь №: 5 790



1. прошу прощения, UDRE, а не TXC...

2. если подскажете, буду благодарен если укажете на ошибку (сам что-то не нашёл...), хоть из ситуации и вышел, но считаю что "криво", хочется всё-таки чтобы было красивее... вот выдержка из исходника:


// ждать окончания передачи...
while((UCSR0A & (1<<TXC0)) == 0); - вот это и не даёт нужного эффекта






// очистить регистр признака приёма символов
while (UCSR0A & (1<<RXC0)) symbol = UDR0;

// временная задержка - подобрано - это взамен ожидания окончания передачи.
for(i=0;i<3500;i++);

// разрешить прерывания по приёму символов
UCSR0B = UCSR0B | (1<<RXCIE0);

// запретить передачу в драйвере RS-485
PORTE = PORTE & ~(1<<TxEN); - TxEN - это ножка порта E, что управляяет
драйвером 485
Go to the top of the page
 
+Quote Post
mse
сообщение Apr 5 2007, 09:38
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(Ioann @ Apr 5 2007, 10:03) *
1. прошу прощения, UDRE, а не TXC...

2. если подскажете, буду благодарен если укажете на ошибку (сам что-то не нашёл...)

Ошыбку искать впадлу, скажу в обчем:
УДРЕ устанавливается, когда регистр УДР на запись освобождается. При переносе из УДР в сдвиговый регистр УАРТа, например.
ТХС устанавливается, когда из сдвигового регистра ушол хвост стоп-бита.

485 драйверить надо так:
Засылаем строку в УАРТ. По УДРЕ набиваем УДР до блевоты. И контролируем загрузку последнего символа. ТХС игнорируем, т.е. запрещщяем. Загрузили последний символъ. Прерывания по УДРЕ запрещаем, сбрасываем ТХС, разрешаем прерывания по ТХС. Имеем в виду, что сейчас у нас один символ в сдвиговом регистре, второй - в УДР. Значить на втором ТХС калитку закрываем на приём.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 5 2007, 09:49
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(mse @ Apr 5 2007, 09:38) *
Имеем в виду, что сейчас у нас один символ в сдвиговом регистре, второй - в УДР. Значить на втором ТХС калитку закрываем на приём.

Цитата из DS на m128: USART Control and Status Register A Bit 6 – TXCn: USART Transmit Complete

This flag bit is set when the entire frame in the Transmit Shift Register has been shifted
out and there are no new data currently present in the transmit buffer (UDRn).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ioann   Окончание передачи UART   Apr 5 2007, 07:23
- - bgc   у меня на 64 меге все ок. По биту освобождения буф...   Apr 5 2007, 08:01
- - Dog Pawlowa   Цитата(Ioann @ Apr 5 2007, 07:23) Может, ...   Apr 5 2007, 08:09
- - VladimirYU   Пример передачи символа из DS не привязан к конкр...   Apr 5 2007, 08:18
- - Палыч   TXE - это что за бит? Наверное, нужно читать - UD...   Apr 5 2007, 08:37
- - tag   Цитата(Ioann @ Apr 5 2007, 07:23) Может, ...   Apr 5 2007, 08:54
|- - Dog Pawlowa   Цитата(Ioann @ Apr 5 2007, 09:03) 1. прош...   Apr 5 2007, 09:38
|- - XsanyaX   Цитата(mse @ Apr 5 2007, 09:38) Ошыбку ис...   Apr 5 2007, 10:02
|- - mse   Цитата(XsanyaX @ Apr 5 2007, 11:02) Палыч...   Apr 5 2007, 11:18
- - Палыч   Выдержка из исходника - обработчик прерывания по U...   Apr 5 2007, 09:24
- - Kuzmi4   2 bgc - в принципе если вам будет интересно , то я...   Apr 5 2007, 10:03
- - SasaVitebsk   Делал на м640 и на 8515. Использовал все признаки ...   Apr 5 2007, 12:11
- - Ioann   Понял, что надо мне проверить, сбрасываю ли TXC пр...   Apr 5 2007, 12:36
- - defunct   ЦитатаДелал RS485 на ATMega128. Нужно было отлавли...   Apr 5 2007, 19:37


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 20:51
Рейтинг@Mail.ru


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