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

 
 
> Окончание передачи 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
Dog Pawlowa
сообщение Apr 5 2007, 09:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Ioann @ Apr 5 2007, 09:03) *
1. прошу прощения, UDRE, а не TXC...
2. если подскажете, буду благодарен если укажете на ошибку (сам что-то не нашёл...)


Использование прерывания несколько удобнее и понятнее (по крайней мере для меня)
Код
#pragma vector=USART0_TXC_vect
__interrupt void USART0_transmit_complete(void)
{
  usart0_status_timer = 2;
  usart0_status = Usart0WaitReceiving;
}


фрагмент процесса обслуживания порта:

switch (usart0_status)
.....
  case Usart0Transmitting:    
    if (!usart0_status_timer)
    {
      usart0_status = Usart0Unconfigured;
    }
    break;

  case Usart0WaitReceiving:
    if (usart0_status_timer == 0)
    {
      ClearRxBuffer0();
      SetReceiveDirection0();
      usart0_status = Usart0Waiting;
    }
    break;
  }


--------------------
Уходя, оставьте свет...
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
|- - mse   Цитата(Ioann @ Apr 5 2007, 10:03) 1. прош...   Apr 5 2007, 09:38
|- - Палыч   Цитата(mse @ Apr 5 2007, 09:38) Имеем в в...   Apr 5 2007, 09:49
|- - 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 Текстовая версия Сейчас: 1st August 2025 - 00:12
Рейтинг@Mail.ru


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