приветствую всех, мучаюсь с юартом, есть прикол если сразу после включения отправить 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);
}