UCSCR von ATmega32 wird nicht gesetzt

Gast #1271103
Lesenswert?

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 #1271109
Lesenswert?

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
#1271550
Lesenswert?

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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren