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

[ATmega128][C]problem przy kompilacji - USART

owenpe 06 Sty 2010 21:55 1482 6
  • #1 7496535
    owenpe
    Poziom 17  
    Witam,
    Chciałem skomunikować ATmege128 z komputerem PC. Korzystając z manuala do tego kontrolera uzyskałem funkcję inicjalizującą:

    void USART_Init( unsigned int baud )
    {
    /* Set baud rate */
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    /* Enable receiver and transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 2stop bit */
    UCSRC = (1<<USBS)|(3<<UCSZ0);
    }

    wysyłąjącą dane:

    void USART_Transmit( unsigned char data )
    {
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)) )
    ;
    /* Put data into buffer, sends the data */
    UDR = data;
    }

    i odbierającą:

    unsigned char USART_Receive( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) )
    ;
    /* Get and return received data from buffer */
    return UDR;
    }

    Przystąpiłem do kompilacji i się wykrzaczył kompilator (korzystam z avr studio 4).
    Zgłąsza mi błąd nieznanej funkcji (undeclared, first use in this function) w stosunku do rejestrów UCSRA, UCSRB, UCSRC oraz do UDR.

    No i teraz moje pytanie: co jest nie tak? Trzeba mu jakiś plik nagłówkowy dołączyć czy coś takiego??
  • #2 7496587
    revolt
    Poziom 34  
    Wypadało by ;)
  • #4 7496699
    owenpe
    Poziom 17  
    No ja wiem, że by wypadało:) Tylko nie wiem jaką;p W programie korzystam z takich bibliotek:

    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>
    #include <util/crc16.h>
    #include <util/delay.h>
    #include <string.h>

    Jest jakiś plik nagłówkowy do obsługi USARTa?
  • Pomocny post
    #5 7496783
    tmf
    VIP Zasłużony dla elektroda
    Jest to zdefiniowane w io.h, tyle, ze ma inne nazwy rejestrow - zobacz plik iom128.h.
    Nazwy podane w DS nie zawsze pokrywaja sie z tymi z AVR-libc.

    ATMega128 ma 2 USARTy, wiec np. UCSRA dla USART0nazywa sie UCSR0A, a dla USART1 UCSR1A.
  • #6 7496797
    michalko12
    Specjalista - Mikrokontrolery
    owenpe napisał:
    No ja wiem, że by wypadało:) Tylko nie wiem jaką;p W programie korzystam z takich bibliotek:

    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>
    #include <util/crc16.h>
    #include <util/delay.h>
    #include <string.h>

    Jest jakiś plik nagłówkowy do obsługi USARTa?


    A w "Project->Configuration option" masz ustawiony właściwy procesor?
  • #7 7500921
    owenpe
    Poziom 17  
    tmf napisał:
    ATMega128 ma 2 USARTy, wiec np. UCSRA dla USART0nazywa sie UCSR0A, a dla USART1 UCSR1A.


    No tak:/ zapomniałem, że ten kontroler ma 2 USARTy;p Szukałem błędu wszędzie indziej, ale to mi do głowy nie przyszło;p Powstawiałem w odpowiednie miejsca 0 i wszystko śmiga:D

    tmf: dzięki za pomoc:!:
REKLAMA