Forum: Digitale Signalverarbeitung / DSP / Machine Learning TMS320F2808 startet nicht richtig


von Christian (Gast)


Lesenswert?

Hallo zusammen,
ich bin gerade dabei mich mit dem TMS320F2808 Controller von TI zu 
beschäftigen. Mir steht dafür ein TMS320C2000 digital Experiementer Kit 
(SPRUFR6A) mit einem einem JTAG USB Emulator XDS510LC von Spectrum 
digital und CCS 3.4 zur Verfügung.
Jetzt bin ich schon seit über einer Woche dabei mich einzuarbeiten aber 
komme einfach nicht weiter - folgendes Problem:
Wenn ich das "Musterprojekt", welches bei dem Evaluation Board dabei war 
kompiliere und auf den Controller übertrage (wird ins SARAM geschrieben) 
und danach mein eigenes Programm lade ohne die Spannungsversorgung vom 
Board zu nehmen (das bringt nur 2 LED's zum blinken), funktioniert mein 
selbstgemachtes Programm prima. Wenn ich allerdings nach einem 
Controllerreset direkt mein Programm lade, funktioniert gar nichts!! Im 
Debug tool kann ich zwar sehen wie die variablen hochgezählt werden, 
aber an den Controller LED's blinkt nichts!! Meine Vermutung ist, dass 
ich irgendwas mit einem headerfile, CMD file oder einer linker 
Einstellung falsch gemacht habe - aus diesem Grund hab ich versucht alle 
Einstellungen und files aus dem "Musterprojekt" von TI zu übernehmen 
aber es funktioniert einfach nicht!! Ich bin mittlerweile ziemlich 
verzweifelt, habe schon fast alle APPnotes über den Controller gelesen 
aber nach wie vor ohne Erfolg.
Vielleicht hat jmd von euch einen Rat woran es liegen könnte??
Wäre wirklich super!!

Viele Grüße und besten Dank fürs lesen!!

Christian

von Tim R. (Gast)


Lesenswert?

Ein Reset ist eigentlich nur dafür da, dass definiert die Hardware 
resetet "Reset CPU", und definiert der Programmcode aus dem Flash 
geladen wird. Wenn nun dein Programm im SRAM ist und du resetest, dann 
ist es einfach nur Glück wenn das Programm noch läuft. Du könntest 
höchsten den Controller neu starten "Restart". Dies müsste eigentlich 
gehen. Ich persönlich würde aber schnellstmöglich den Programmcode so 
schreiben, dass er aus dem Flash geladen werden kann.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

@Tim R.:
Es soll ja offenbar kein Code ausgeführt werden, der vor einem Reset 
geladen worden ist. Das Problem ist (wie ich es verstehe), dass das 
Programm, das in das SARAM geladen wird, nur funktioniert, wenn vorher 
ein anderes Programm gelaufen ist.

@Christian:

Vielleicht macht das Beispielprogramm irgendeine Initialisierung, die 
einen Hardwareteil einschaltet (GPIO...) oder bestimmte Pins als Ausgang 
definiert, was in deinem Programm fehlt. Dadurch ist es möglich, dass 
dein Programm nur läuft, wenn zuvor das Beispielprogramm alle nötigen 
Initialisierungen durchgeführt hat.

Das Problem ist, dass bei Verwendung des Debuggers verschiedene 
Programme ohne vorherigen Reset geladen und ausgeführt werden können, 
wodurch solche Effekte entstehen können, wie z.B., dass vom ersten 
Programm gesetzte Register noch so gesetzt sind, wenn das zweite 
Programm läuft.

Prinzipiell ist es nicht falsch, bei der Entwicklung nach Möglichkeit 
alles aus dem RAM laufen zu lassen, das ist meist einfacher und spart 
Flash-Schreibzyklen.

Vielleicht kannst du den Quellcode posten, dort sollte man den Fehler in 
der Initialisierung eigentlich schnell finden.

Grüße,

Peter

von Christian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ihr beiden,
vielen herzlichen Dank für eure Antworten!!
@Tim mir ist bewusst dass das der SRAM Speicher leer ist wenn ich einen 
Reset durchgeführt habe - das Problem ist vielmehr dass das mein eigenes 
Programm nach dem Schreiben in den Controller nicht läuft, wenn nicht 
zuvor das Musterprogramm von TI lief!

@Peter Vielen Dank auch nochmal für deinen Input!
Du schreibst dass eventuell Initialisierungen vom "Beispielprogramm" in 
mein eigenes Programm übernommen werden obwohl ich den Speicher neu 
beschrieben habe? Werden die Registerwerte beim Schreiben nicht 
zurückgesetzt??

Wenn das so ist könnte es gut sein, dass ich die GPIO Register 
vielleicht noch nicht ordentlich initialisiert habe - werd ich gleich 
mal im Datenblatt nachlesen.
Ich hab mein eigenes Programm beigefügt!
Es orientiert sich von der Initialisierung her an einem Code den ich von 
der TI Seite habe - ich habe lediglich noch eine Pausenschleife 
eingefügt und greife auf die beiden GPIO Pins zu...

Besten Dank nochmal für eure Unterstützung!!

Viele Grüße!!

Christian

von Peter D. (pdiener) Benutzerseite


Lesenswert?

>Werden die Registerwerte beim Schreiben nicht zurückgesetzt??

Nein, das werden sie nicht, denn du beschreibst mit dem Debugger beim 
Hochladen des Codes das Programmspeicherram, nicht die Register.
Ein Controllerreset setzt die Register auf die default-Werte zurück.

In deinem Beispiel werden die Portpins nirgendwo als Ausgang definiert, 
per default sind das Eingänge. Das zuvor verwendete Programm wird die 
Pins wohl als Ausgang definiert haben.

Grüße,

Peter

von Christian (Gast)


Lesenswert?

stimmt - genau so isses :-)
Ich ärger mich gerade tierisch dass ich sooo viel Zeit mit diesem ober 
dämlichen (Anfänger)fehler verbracht habe - ich hab das Problem immer in 
den Linker und CMD settings gesucht!!!

Besten Dank für deine Hilfe!!

Christian

von Christian (Gast)


Lesenswert?

PS: jetzt gehts!

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
Noch kein Account? Hier anmelden.