Hallo, mein Problem ist folgendes: Ich benutze einen ATMega128 und möchte gerne USART0 benutzen. Beim Initialisieren der Schnittstelle sollte ich auf das Register UCSR0C zugreifen, weil ich dort synchron/asynchron-Betrieb bzw. Anzahl der Stop-Bits einstellen möchte. Leider ist dieses Register "nicht vorhanden" - vermutlich ein Problem mit einem Fuse-Bit, dass ausgeführt ist, um den 128er voll kompatibel zum 103er zu machen. Nur wie kann ich beim Simulieren im AVR-Studio dieses Register UCSR0C freigeben? Danke schon mal im Voraus!
Hast du in der Source geschrieben UCSRC0 wie im Betreff oder UCSR0C wie im Nachrichtentext?
Im Sourcecode habe ich UCSR0C geschrieben. Wenn ich mir im AVR-Studio die Register von USART0 anschaue, dann wird in der Spalte "Address" folgendes angegeben: na (0x95). Für mich ergibt sich daraus, dass "na" die Bezeichnung für "nicht vorhanden" ist. Das Gleiche übrigens beim Register UBRR0H (Adress na(0x90). Kann das mit dem Fuse-Bit für die Kombatibelität mit dem 103er zu tun haben?
Unwahrscheinlich. Das AVR-Studio weiss zum Zeitpunkt des Programmierens, Kompilierens und Simulierens nicht, dass die M103C Fuse in dem Stück Silizium auf deinem Basteltisch gesetzt ist oder nicht. Das AVR-Studio erzeugt stur ein Programm für den Prozessor, den du in den Projektoptionen angegeben hast (sollte atmega128 sein). Aufgrund dieser Einstellung sucht es sich über die ersten Zeilen in deinem Programm (#include <avr/io.h>) das für den Atmega128 passende Includefile mit den entsprechenden Registernamen. auch beim Simulieren/Debuggen kann man den AVR einstellen. Dort sollte es der gleiche sein, für den das Programm erzeugt wurde. Normalerweise ist das automatisch so, aber man kann das auch von Hand umstellen. Kontrolliere das mal. Erst wenn das fertige Programm dann auf das Stück Silizium geschrieben wird, spielt es eine wichtige Rolle, ob auf dem die M103C Fuse gesetzt ist oder nicht. Wenn der Atmega128 im Atmega103 Modus läuft, dann funktionieren für den Atmega128 geschriebene Programme i.a. nicht oder falsch. Vorschlag: Pack dein problematisches Projekt in ein Archiv und zeige das her.
So, in der Zwischenzeit hab ich mir das Datenblatt mal (sehr) genau durchgelesen - zumindest was es mit der seriellen Schnittstelle auf sich hat. Der ganze Clou liegt darin, dass u.a. das Register UCSR0C im erweiterten I/O-Bereich liegt und nicht mit den Befehlen "ldi" bzw. "out" bearbeitet werden kann. Nachdem ich "ldi" in "std" geändert habe, beschreibt mir mein Sourcecode das Register UCSR0C wie gewünscht. Jedenfalls möchte ich mich bei dir für deine Antworten bedanken!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.