mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Beispielprogramm compilen


Autor: wurf (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte wie gesagt das UART verwenden, dazu hab ich mir ein
Beispielprogramm heruntergeladen, das ich jetzt kompilieren will. Das
Programm befindet sich im Anhang. Ich habe daran nichts geändert außer
den Pfad für signal.h nach avr/signal.h geändert (sonst gibts noch mehr
Fehler)

Doch nun gibt es immer noch einige Fehler wenn ich das Programm mit
'avr-gcc -g -mmcu=at90s4433 -Wall -Wstrict-prototypes -Os
-mcall-prologues -Os -c avrledtest.c' kompilieren will.

Nämlich diese:

avrledtest.c: In function `uart_init':
avrledtest.c:81: error: `UCR' undeclared (first use in this function)
avrledtest.c:81: error: (Each undeclared identifier is reported only
once
avrledtest.c:81: error: for each function it appears in.)

Kann mir einer sagen was da zu bedeuten hat, und was ich ändern muss
damit der Fehler nicht mehr auftritt?

Danke für eure Hilfe schonmal,

Michi

Autor: Frank Weuster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Michi,
nachfolgend habe ich dir einige Teile aus meinem Programm
zusammengestellt.Buffer und Pointer bitte selbst erstellen.
Die Daten werden hier über eine RS485/RS422 empfangen/ gesendet.
Versuch dich mal einzuarbeiten, vielleicht hilft es dir weiter.


//
// 9600,n,8,1
//
void Init_SCI_0 (void)
{
int i;

    cEmPtr = cEmBuffer;
   cSePtr = cSeBuffer;
  cEmMrk = 0;
  cSeMrk = 0;

  pd6_0  = 1;        // p6_0 als Ausgang, wichtig fuer 
Sendereinschaltung !
  p6_0  = 0;

  // Sleep=no, Parity=no, 1StopBit, IntClk, 8-Bit
  // Setting UART0 transmit/receive mode register (UART mode)
  u0mr = 0x05;            // XXXX XXXX
                          // |||| |||+- uart mode
                          // |||| ||+-- uart mode
                          // |||| |+--- uart mode
                          // |||| |     000: Serial I/O disable
                          // |||| |     100: 7 bit data
                          // |||| |     101: 8 bit data
                          // |||| |     110: 9 bit data
                          // |||| +---- Internal/external clock select
bit
                          // ||||       0: Internal clock
                          // ||||       1: External clock
                          // |||+------ Stop bit length select bit
                          // |||        0: One stop bit
                          // |||        1: Two stop bit
                          // ||+------- Odd/even parity select bit
                          // ||         Valid when bit 6 = 1
                          // ||         0: Odd parity
                          // ||         1: Even parity
                          // |+-------- Parity enable bit
                          // |          0: Parity disabled
                          // |          1: Parity enabled
                          // +--------- Sleep select bit
                          //            0: Sleep mode deselected
                          //            1: Sleep mode selected


    // Setting UART0 transmit/receive control register 0 (UART mode)
    // CMOS, No CTS/RTS
    u0c0 = 0x10;            // 00XX XXXX
                            // |||| |||+- BRG count source select bit
                            // |||| ||+-- BRG count source select bit
                            // |||| ||    00: f1 is selected
                            // |||| ||    01: f8 is selected
                            // |||| ||    10: f32 is selected
                            // |||| ||    11: inhibited
                            // |||| |+--- /CTS//RTS function select
bit
                            // |||| |     (Valid when bit 4 ='0')
                            // |||| |     0: /CTS function is selected
                            // |||| |     1: /RTS function is selected
                            // |||| +---- Transmit register empty flag

                            // ||||       0: Data present in transmit
register
                            // ||||          (during transmission)
                            // ||||       1: No Data present in
transmit register
                            // ||||          (transmission completed)
                            // |||+------ /CTS//RTS disable bit
                            // |||        0: /CTS//RTS function
enabled
                            // |||        1: /CTS//RTS function
disabled
                            // ||+------- Data output select bit
                            // ||         0: TxD0 pin is CMOS output
                            // ||         1: TxD0 pin is N-channel
open-drain
                            // ||            output
                            // |+-------- Must be fixed to '0'
                            // +--------- Must be fixed to '0'


  // Setting UART0 transmit/receive control register 1 (UART mode)
  u0c1 = 0x05;
  //u0c1 = 0x01;          // ---- X1X1
                          //      |||+- TE Transmit enable bit
                          //      |||      0: Transmission disabled
                          //      |||      1: Transmission enabled
                     //       ||+-- TI Transmit buffer empty flag
                     //       ||       0: Data present in transmit 
buffer
register
                     //       ||       1: No data present in transmit 
buffer
register
                           //      |+--- RE Receive enable bit
                          //      |        0: Reception disabled
                          //      |        1: Reception enabled
                          //      +---- RI Receive complete flag
                          //               0: No data present in
receive buffer
                          //               1: Data present in receive
buffer


   // Setting UART0 transmit/receive control register 2 (UART mode)
  ucon = 0x00;               // -X0- ---X    ????
                            //  ||     +- UART0 transmit interrupt
cause select bit
                            //  ||        0: Transmit buffer empty
(TI=1)
                            //  ||        1: Transmission completed
(TXEPT=1)
                            //  |+------- Must be fixed to '0'
                            //  +-------- Separate /CTS//RTS bit
                            //            0: /CTS//RTS shared pin
                            //            1: /CTS//RTS separate pin


  // Setting UART2 bit rate generator for 1200 baud (UART mode)
  u0brg = 0x67;          // REMARKS:
U0BRG=(Xin/(16*clock_select*Baud))-1
                            // For example:
                            // Xin = 16MHz
                            // clock_select = 1 (source=f8)  <<== f8
beachten
                            // Baud = 1200 Baud rate
                      // =>  u0brg = 103d = 0x67 (actual baud = 1200)



  // void setUART0Rxint(void)
   s0ric = 0x01;       // ---- XXXX
                      //      ||||
                      //      |||+-- Interupt priority level select
bit
                      //      ||+--- Interupt priority level select
bit
                      //      |+---- Interupt priority level select
bit
                      //      |      000: Level 0 (interrupt disabled)
                      //      |      001: Level 1
                      //      |      010: Level 2
                      //      |      011: Level 3
                      //      |      100: Level 4
                      //      |      101: Level 5
                      //      |      110: Level 6
                      //      |      111: Level 7
                      //      +----- Interupt request bit
                      //             0: Interrupt not requested
                      //             1: Interrupt requested

}



// #############################################################
// Aufgerufen, durch Zeichenampfang an UART 0 (Party-Line RS485)
// #############################################################
void far INT_SCI_0_R (void)
  {
  unsigned char c;

  ir_s0ric  = 0;

  if (u0c1 & 0x08)      // check UART0 Receive Complete Flag
     {              // if valid data is present
     c = u0rbl;

    if (cEmMrk == TRUE)  // Wenn Mrk schon gesetzt ist dann raus,
      return;        // es koennte sich bei 2-Draht um eigene Daten 
handeln !

    if ( (cEmPtr < cEmBuffer) ||  (cEmPtr >= &cEmBuffer[LEN_EBUF]) )
      cEmPtr = cEmBuffer;

    switch (c)
      {

         case STX:  cEtxMrk     = FALSE;
                   cEmXor      = 0;
                   cEmPtr      = cEmBuffer;
                   *cEmPtr     = c;
                   break;

      case ETX:  *cEmPtr     = c;
                  cEtxMrk     = TRUE;
                  break;

      case EOT:  *cEmPtr     = c;
                  cEmMrk     = TRUE;
              break;

      default:   *cEmPtr     = c;
                  if (!cEtxMrk)
                      cEmXor ^= c;

        }//EndOfSwitch
    cEmPtr++;
    }

  else  // Falls Uebertragungsfehler
    c = u0rbl;

  } // EndOfInterrupt

void SendeRoutine (void)
  {
  //
  // Wenn cSeMrk == 0 ist, steht nichts zu senden an
  //
  if ( cSeMrk == FALSE )
    {
    return;  //  SenderAus();
    }

  //
  // Wenn cSeMrk == 1 ist, Daten aus Buffer senden
  //
  else if ( cSeMrk == 1 )
    {
    if (!(u0c1 & 0x02))          // Wait while data is present in 
transmit
BUFFER
      return;

    if ((u0tbl = *cSePtr++) == EOT)  // write new data to UART0 transmit
buffer
      cSeMrk = 2;
    return;
    }

  //
  // Wenn cSeMrk == 2 ist, wurde das original EOT bereits uebergeben.
  //
  else if (cSeMrk == 2 )
    {
    if (!(u0c1 & 0x02))          // Wait while data is present in 
transmit
BUFFER
      return;

    u0tbl = EOT;
    cSeMrk = 3;
    return;
    }

  //
  // Wenn cSeMrk == 3 ist, wurde das original EOT bereit gesendet !
  //
  else if (cSeMrk == 3 )
    {
    if (!(u0c1 & 0x02))         // Wait while data is present in 
transmit
BUFFER
      return;

     cSeMrk = 0;
     cEmMrk = 0;
     SenderAus();
     }
   }

Autor: Peter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das AVR-GCC Beispiel das du heruntergeladen hast, ist völlig veraltet,
und compiliert deshalb nicht mehr mit aktuellen WinAVR.

Das wurde in diesen Forum schon mehrfach erwähnt dass die gcctest
Beispiele völlig veraltet sind.

Schau besser meine UART library an:
http://www.mysunrise.ch/users/pfleury/avr-software.html

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.