www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik usart wird überschrieben


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann man eigentlich die Registeraddresse von der seriellen 
Schnittstelle überschreiben? Also so, dass die Baseaddr von USART nicht 
mehr der eigenltichen BaseAddr übereinstimmt.

Hab einfach mal alle Daten vom internen RAM in den externen RAM gemappt 
- jedoch blieb der Fehler. Als Flash benutze ich auch ein extern 
angeschlossenes.

Dieser Fehler tritt nur dann auf, wenn ich ein zusätzliches C-file mit 
Headerfile (ein paar defines und eine struct) mit einbinde - jedoch 
keinerlei funktion aufrufe (da der Fehler bereits davor passiert).

Auf die USART hab ich einen ptr installiert ( befindet sich im internen 
RAM) - dieser wird nicht überschrieben, besitzt stets die Adresse von 
der seriellen Schnittstelle.

Bernd

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gehts nur mir so?

Wovon sprichst du überhaupt?

Welcher Fehler?
Welcher Prozessor?

Die Adressen an denen Hardware im µC zu finden ist, ist
doch normalerweise fix verdrahtet. Da kannste nichts
überschreiben.
Ergo musst du irgendeinen Fehler im Programm haben.
Aber ohne obige Informationen + Programmcode wird dir
niemand helfen können.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe übertragungsfehler bei der seriellen schnittstelle -> data 
abort.

Ich hab einen Ptr auf die Base Addr der seriellen Schnittstelle gesetzt 
und vergleiche diesen Ptr während das Programm läuft, ob dieser noch der 
Base Addr entspricht... -> leider ist dies nicht der Fall. Ich 
programmiere mit Keil und während des Debuggens kann man auf die  Werte 
der Variablen und Ptr zugreifen und da sehe ich, dass dieser Ptr aber 
den richtigen Wert besitzt.

Das ganze Programm funktioniert solange gut, bis ich eine weitere 
C-Datei hinzufüge (ohne dass Code aus dieser C-Datei ausgeführt wird). 
D.h. es wird kein neuer Code ausgeführt und trotzdem treten diese Fehler 
auf. Der Code für die serielle Schnittstelle funktioniert auf jeden Fall 
(da ich diesen Code schon bei anderen Programmen verwendet habe und 
funktionierte).

Im Prinzip rufe ich als erstes im Programm die Konfiguration der 
seriellen Schnittstelle auf und anschließend gebe ich mittels printf() 
etwas über diese aus. Und hier passiert schon der Fehler, wenn weitere 
Dateien eingebunden werden.
Erst anschließend wird die init-Funktion (oder würde) der neuen C-File 
aufgerufen.

Arbeiten tue ich mit dem Controller AT91RM9200 von Atmel.

Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht ist auch ein Fehler innerhalb meines Linkerfiles...
LOAD_FLASH 0x10000000 0x3FFFFF            ; start address and length 
{

  EXTERN_FLASH 0x10000000 0x3FFFFF   
  {
    RM9200.o (RESET, +First)
    *.o(+RO)

  }

  SDRAM 0x20000000 0x3FFFFFF       
  {                   
    timer.o (+RW,+ZI)
  }

  BUFFER_SDRAM 0x21000000 EMPTY 0x2000000  
  {
  
  }

  INTERN_RAM 0x200000 0xFFFFF
  {
    *(+RW,+ZI)
  }
}

Mein Board hat einen externen SDRAM angeschlossen
0x20 000 000 bis 0x23 FFF FFF

sowie einen externen Flashspeicher
0x10 000 000 bis 0x10 3FF FFF

der interne RAM befindet sich
0x00 200 000 bis 0x00 2FF FFF

Im Buffer_SDRAM möchte ich gerne Daten aus der Peripherie speichern - 
z.B. Daten von der seriellen Schnittstelle oder der USB Schnittstelle.

Bernd

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde vorschlagen, du übst erstmal mit einem kleinen AVR oder PIC 
Controller.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
d.h. ich gehe richtig in der annahme dass mein linkerfile so noch nicht 
funktionieren kann?

Bernd

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.