logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega88 AVR-GCC UART Problem z odbiorem w przerwaniu

darek1632 12 Kwi 2010 22:18 2362 2
REKLAMA
  • #1 7953945
    darek1632
    Poziom 15  
    Witam,
    Mam taki problem. Odbieram znaki w przerwaniu i nie wiem dlaczego jeśli wysyłam jakiś znak to pojawia się on w buforze odbiorczym a tego nie chce. Próbowałem funkcji uart_flush i nic nie pomaga.
    Proszę o pomoc.

    
    #include <avr/io.h>
    
    #include "uart.h"
    
    // Funkcje
    
    void uart_init ( unsigned int ubrr)
    {
    
    /*Set baud rate */
    UBRR0H = (unsigned char)(ubrr>>8);
    UBRR0L = (unsigned char)ubrr;
    /*Enable receiver and transmitter */
    UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXC0);
    /* Set frame format: 8data, 2stop bit */
    UCSR0C = (1<<USBS0)|(3<<UCSZ00);
    }
    
    void uart_putc ( unsigned char data )
    {
    /* Wait for empty transmit buffer */
    //UCSR0B &= ~(1<<RXEN0);  
    while ( !( UCSR0A & (1<<UDRE0)) );
    /* Put data into buffer, sends the data */
    UDR0 = data;
    //UCSR0B |= 1<<RXEN0;
    }
    
    void uart_flush( void )
    {
    unsigned char dummy;
    
    while ( UCSR0A & (1<<RXC0) ) dummy = UDR0;
    }
    
    void main( void )
    {
    if(...)
    uart_putc('*');
    }
    
    SIGNAL (USART_RX_vect)
    {
        c = UDR0;
      
        if ( (c != 0x0d) && (c != ' ') )
    	
             buff[m++] = c;
    		
         else 
    	    {
             buff[m] = '\0';		
    	      flaga = 1;
                      } 
    
    } 
    
  • REKLAMA
  • Pomocny post
    #2 7954155
    OlekM
    Poziom 17  
    Jakoś najbardziej wygląda to na problem sprzętowy. Sugerowałbym sprawdzić czy nóżki 2 i 3 nie są ze sobą zwarte, lub czy zwarcie nie występuje za konwerterem napięć (jeśli jest stosowany).

    Jeśli nóżka RXD nie jest wykorzystywana, warto podciągnąć ją do stałego potencjału - bo może pływać "w rytm" pinu TXD.

    Generalnie, żadna ATMEGA nie robiła mi podobnych problemów "sama z siebie" :-)

    Jeśli połączenie toru nadawczego i odbiorczego jest pożądane, to proponuję przed nadaniem znaku wyłączyć część odbiorczą UART'u i włączyć ją dopiero po wysłaniu wszystkich znaków (należałoby wyczyścić przed transmisją flagę TXC0, i wracać do odbioru dopiero po jej ustawieniu).
  • #3 7960941
    darek1632
    Poziom 15  
    Dzieki za odpowiedz. Problem rozwiązałem i nie leżał ATmedze tylko w kontrolerze XPORT który był tak ustawiny że odpowiedał nadanym znakiem.
REKLAMA