UCSCR von ATmega32 wird nicht gesetzt

Gast #1271103
Hallo zusammen,

vorab, habe gcc tutorial mehr als einmal gelesen und auch in anderen 
Threads wurde ich nicht fündig.

Nun zu meinem Problem:
Ich versuche den USART des ATmega32 in gang zu bringen.
Mein Code:
1
int main(void)
2
{
3
  // Initialisieren der Ports
4
  PORTA = 0b00000000;    // Port B auf Low; vertauscht, um low pulse zu vermeiden
5
  DDRA = 0xFF;        // Alles Ausgänge, Datenbus zu LCD
6
  PORTD = 0b00000000;    // Port A auf Low; vertauscht, um low pulse zu vermeiden
7
  DDRD = 0b00000001;    // PD0 (RXD) als Eingang für RS232 Datenempfang
8

9
  // Initialisieren des USART
10
  UBRRH = UBRR_VAL >> 8;        // Baudrate auf 4800 setzen
11
    UBRRL = UBRR_VAL & 0xFF;
12

13
  UCSRB = (1<<TXEN)|(1<<RXEN); 
14

15
    //UCSRC |= (1<<URSEL)|(3<<UCSZ0); 
16
  UCSRC = (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1);
17

18
  
19
  char puffer[1024] = {0};
20
  uart_gets(puffer, sizeof(puffer));
21
    
22
  // Endlosschleife
23
  while(1)
24
  {}
25
  return 0;  //wird nie erreicht
26
}

Die Baudratenbits und die Enable TX, RX Bits werden gesetzt, aber es 
werden einfach nicht die Bits URSEL, UCSZ0 und UCSZ1 gesetzt.
Die auskommentierte Zeile darüber funktioniert genausowenig.
Auch die Notation UCSRC |= (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1); 
funktioniert nicht.
Soweit ich das verstanden habe, ist das UCSRC und UBRRH Register unter 
derselben Adresse zu erreichen, deshalb das URSEL Bit.
Kann es daran liegen?
Wenn ich beim debuggen manuell die Bits in AVR Studio (I/O View) setzte,
wird das auch ignoriert, bzw im nächstem Step wieder verworfen.

uart_gets(puffer, sizeof(puffer)); ist die Funktion aus dem gcc 
Tutorial.
Ich benutzte AVR Dragon, AVR Studio, JTAG und ATmega32 mit 16 MHz(Fuse 
Bits sind entsprechend gesetzt, als UBRR Wert habe ich 0xCF).

Vielen Dank schonmal für eure Hilfe,
mfg Alex
Gast
Hi

>Wenn ich beim debuggen manuell die Bits in AVR Studio (I/O View) setzte,
>wird das auch ignoriert, bzw im nächstem Step wieder verworfen.

Simulator Hilfe:

Notes for ATmega32
The USART's UBRRH and UCSRC registers share the same I/O address. 
Writing to one of the registers will cause both registers to contain the 
new value, regardless of the value of URSEL. Reading these registers do 
not work as described in the datasheet.

MfG Spess
Gast
>Ich verwende nicht den Simulator

Das habe ich anders verstanden.

>Wenn ich beim debuggen manuell die Bits in AVR Studio (I/O View) setzte,
>wird das auch ignoriert, bzw im nächstem Step wieder verworfen.
Ich könnte mir vorstellen, dass das Register durch die Doppelbelegung 
für den Debugger gar nicht zugänglich ist.

Du musst die Ursache für dein Problem auf jeden Fall woanders suchen, 
denn selbst wenn das Schreiben tatsächlich nicht funktionieren sollte, 
macht das nichts, denn das was du da reinschreiben willst, ist eh schon 
der Default-Inhalt nach einem Reset (das Schreiben nach UCSRC ist damit 
also eh überflüssig).
Gast
Hmm danke für den Tip,
allerdings kann ich keine tabelle mit den default Werten finden, weiß 
jemand wo ich die finden kann?
In dem Datenblatt steht nur:
The USART Character Size (UCSZ2:0) bits select the number of data bits 
in the frame.
Alex schrieb:
> Hmm danke für den Tip,
> allerdings kann ich keine tabelle mit den default Werten finden, weiß
> jemand wo ich die finden kann?

Stehen bei jedem Register dabei. Gleich zu Anfang der 
Registerbeschreibung ist ein Bildchen mit den Bitnamen. Darunter sind 
zwei Zeilen, "Read/Write" und "Initial Value".

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.