Например TDA7294

Форум РадиоКот • Просмотр темы - Юарт сам отправляет после приема
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 01:24:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Юарт сам отправляет после приема
СообщениеДобавлено: Вс май 05, 2024 21:13:16 
Родился

Зарегистрирован: Пт май 03, 2024 14:29:46
Сообщений: 3
Рейтинг сообщения: 0
приветствую всех, мучаюсь с юартом, есть прикол если сразу после включения отправить 4 символа на контроллер, то обратно приходит 4 пустых символа(хотя я не пытался ничего отправить), потом если с контроллера отправить символы то они нормально приходят, полсе этого если принять на контроллере и не пытыться отправить обратно то приходит то что было отправлено с контроллера. Другими словами при приеме на контроллере обратно само отправляется то что было в чем-то типа промежуточного буфера. атмега328p в симуляторе. Что Это Такое?

Код:
ISR(USART_RX_vect){ 
   UCSR0B &= ~(1<<UDRIE0);
   if (rx_index < 4){
     rxBuff[rx_index] = UDR0;
     rx_index++;}
   if(rx_index >= 4){
      UCSR0B |= (1 << UDRIE0) | (1 << TXCIE0); 
      rx_index = 0;
      process_data = 1;
   }
}

ISR(USART_UDRE_vect)
{
   if(tx_index < 4){    
      UDR0 = txBuff[tx_index];
      tx_index++;
   }
   else{
      tx_index = 0;
      UCSR0B &= ~(1 << UDRIE0); 
   }
}


void init_usart(void)
{
   UBRR0H = (uint8_t)(UBRR >> 8);
   UBRR0L = (uint8_t)UBRR;
   //Enable rx/tx 
   UCSR0B = (1<<TXCIE0) | (1<<RXCIE0) |(1 << RXEN0) | (1 << TXEN0);
   //Set frame format 8N1
   UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);
   sei();
}

void tx_uart_string(char* str){
   for (int i = 0; i < 4; i ++){           
      txBuff[i] = str[i];
   }
   tx_index = 0;
   UDR0 = txBuff[tx_index++];   
   UCSR0B|=(1<<UDRIE0);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Юарт сам отправляет после приема
СообщениеДобавлено: Вт май 07, 2024 11:22:40 
Родился

Зарегистрирован: Пт май 03, 2024 14:29:46
Сообщений: 3
Рейтинг сообщения: 0
Заработало вот так нормально, опять же не сильно понятно почему

Код:
volatile char txBuff[5];
volatile char rxBuff[5];
volatile int tx_index = 0;
volatile int rx_index = 0;

ISR(USART_RX_vect){
   UCSR0B &= ~(1 << UDRIE0);
   UCSR0B &= ~(1 << TXEN0);// вот прям тут запретил передачу
   if (rx_index < 4){
     rxBuff[rx_index] = UDR0;
     rx_index++;}
   if(rx_index >= 4){
      rx_index = 0;
      process_data = 1;
   }
}

ISR (USART_TX_vect)  // именно так с пустым работает нормально, без него передает несколько раз строку, строку для передачи
{

}

ISR(USART_UDRE_vect)
{
   if(tx_index < 4){    
      UDR0 = txBuff[tx_index];   
      tx_index++;
   }
   else{
      tx_index = 0;
      UCSR0B &= ~(1 << UDRIE0);
   }
}


void init_usart(void)
{
   //Set baud
   UBRR0H = (uint8_t)(UBRR >> 8);
   UBRR0L = (uint8_t)UBRR;
   //Enable rx/tx 
   UCSR0B = (1<<TXCIE0) | (1<<RXCIE0) |(1 << RXEN0) | (1 << TXEN0);
   //Set frame format 8N1
   UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);
   sei();
}

void tx_uart_string(char* str){
   UCSR0B|= (1 << TXEN0);// а тут прямо перед передачей разрешаем передачу
   for (int i = 0; i < 4; i ++){           
      txBuff[i] = str[i];
   }
   tx_index = 0;
   UDR0 = txBuff[tx_index++];   
   UCSR0B|= (1 << UDRIE0);
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Юарт сам отправляет после приема
СообщениеДобавлено: Вт май 07, 2024 12:02:52 
Друг Кота

Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 4
а где проверка, что передавать уже можно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Юарт сам отправляет после приема
СообщениеДобавлено: Чт май 16, 2024 09:30:39 
Родился

Зарегистрирован: Пт май 03, 2024 14:29:46
Сообщений: 3
Рейтинг сообщения: 0
а где проверка, что передавать уже можно?


Вы про вот такие проверки перед записью в udr?
Код:
while (!(UCSR0A & (1<<UDRE0)));
      UDR0 = txBuff[tx_index];   

или еще какие-то бывают?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y