Forum: Mikrocontroller und Digitale Elektronik Programmierung XC167


von Jürgen M. (willi99)


Lesenswert?

Hallo!

Ich bin gerade dabei ein eigenes Board mit dem XC167 zu entwickeln und 
die passende Software dazu zu schreiben. Als Programmierumgebung 
verwende ich VX-Tools von Tasking. Damit kann ich meine Software in den 
XC167 flashen. Für die Entwicklungsphase ist das auch ok. Für später 
möchte ich dafür aber meine eigene Software verwenden. Ich habe in der 
Dokumentation auch Infos zum BSL gefunden, aber keinen Quellcode für die 
32 Bytes.

Vielleicht kann mir hier jemand weiterhelfen?

Grüße
Jürgen

von 12er Dude (Gast)


Lesenswert?

Hallo Jürgen,

schau mal hier: http://www.keil.com/support/docs/1065.htm

Sonst selber machen, das geht auch.

Tschü Dude

von Jürgen M. (willi99)


Lesenswert?

Hallo Dude,

danke für den Tipp. Ich arbeite nicht mit Keil, aber bei Tasking gibt es 
auch die Sourcen wie ich jetzt erfahren habe.

Ich hoffe ich komme damit zurecht. Ich bin nicht der geborene 
Assemblerprogrammierer.


Grüße
Jürgen

von Jürgen M. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich werde aus dem Ganzen nicht schlau!

Ich habe einen Preloader geschrieben, der 0x40 Bytes in den Speicher von 
0xE0024 bis 0xE0063 schreibt (siehe Sourcecode) und anschließend an die 
Stelle 0xE0024 springen soll.

Der Preloader läuft (ich sende nach dem Empfang der 0x40 Bytes ein 
Zeichen über die serielle Schnittstelle). Allerdings speichere ich die 
0x40 Bytes entweder an eine falsche Stelle oder der Sprung dahin 
funktioniert nicht.

Ich wollte erstmal einen Pin toggeln lassen bzw. weitere Zeichen 
ausgeben. Nichts funktioniert.

Hat jemand eine Idee was falsch laufen könnte?


Danke
Jürgen

von 12er Dude (Gast)


Lesenswert?

Hallo Jürgen,

wenn der Preloader (die 32 Byte) läuft, hast Du schon gewonnen.

Bei dem nachgeladenen Code würde ich zuerst den Watchdog disablen und 
den Stack aufsetzen.

Wenn der Preloader genau 32 Byte umfasst (NOPs einfügen) und wie bei Dir 
das nachgeladene Programm direkt dahinter liegt, wird es auch ohne 
Sprungbefehl aktiviert.

Tschü Dude

von Jürgen M. (willi99)


Lesenswert?

Hallo Dude,

ich bin jetzt ein bisschen weiter. Der Code, der nach dem Preloader 
geladen wird, sendet mir tatsächlich ein Byte zurück.

Allerdings gibt es Probleme beim Senden mehrerer Bytes. Manchmal geht's 
manchmal nicht. Vielleicht liegt das daran, dass die Register durch den 
BSL nicht korrekt gesetzt wurden. Da muss ich jetzt nochmal danach 
schauen. Allerdings bekommt man auch keine Information, welche 
Einstellungen der BSL vornimmt.

Grüße
Jürgen

von 12er Dude (Gast)


Lesenswert?

Hallo Jürgen,

der BSL konfiguriert die Schnittestelle sicherlich richtig, wenn die 
Baudrate mit dem Takgeber möglich ist. Rechne das mal für Deine 
Konfiguration (Quarz) nach, oder wähle eine andere Baudrate für die 
erste Initialisierung.
Der BSL hat eine automatische Baudratenerkennung anhand des ersten 
(Null-) Byte, das er zur Initialisierung empfängt. Als Antwort sendet er 
darauf eine Kennung der Chip Familie (s. Manual). Wenn dieses Byte 
stimmig ist, passt die UART Konfiguration.

Wie sendest Du "mehrere Bytes"? Ist sichergestellt, dass es keinen 
Buffer overflow gibt?

Tschü Dude

von Jürgen M. (willi99)


Lesenswert?

Hallo Dude,

die Schnittstelleneinstellungen waren wohl schon in Ordnung. Nachdem ich 
jetzt aber auch fast alle anderen Register auf die Werte meiner 
"normalen" Software gesetzt habe, kann ich auch mehrere Zeichen 
hintereinander senden. Was jetzt genau die Ursache war, habe ich nicht 
im Detail nachvollzogen.

Ich prüfe vor jedem Zeichen auf den Transmit-Interrupt, so dass es 
sichergestellt ist, dass der Sendepuffer schon leer ist.

Danke und Grüße
Jürgen

von 12er Dude (Gast)


Lesenswert?

Glückwunsch Jürgen,

dann hast Du es ja geschafft.

Viel Erfolg mit den nächsten Schritten!

Tschü Dude

von Jürgen M. (willi99)


Angehängte Dateien:

Lesenswert?

Hallo Dude,

ich habe mittlerweile ein ganz merkwürdiges Phänomen:
Ich kann mein Programm übertragen und ich kann Zugriffe auf das Flash 
ausführen lesen, löschen, schreiben..., aber es gibt Probleme, wenn ich 
zuviel Code (vielleicht auch zuviele Funktionsaufrufe) in meinem 
Programm habe.
Mein Programm macht dann undefinierbare Dinge zum Beispiel in Zeile 10, 
wenn ich in Zeile 15 eine Ausgabe über RS232 machen würde. Ohne die 
Zeile 15 läuft mein Programm bis zum Ende fehlerfrei.

Kann da beim Linken etwas schief gehen? Bis auf den zusätzlichen 
Funktionsaufruf (von Zeile 15) kann ich aber nicht soviele Unterschiede 
feststellen. Den Stack habe ich auch schon vergrößert, leider ohne 
Erfolg.

Hast du noch eine Idee?

Grüße
Jürgen

von willi99 (Gast)


Lesenswert?

Hallo Dude,

ich habe den Fehler mittlerweile gefunden. Mein Konverter srectobin 
funktionierte nicht richtig. Er hat die Lücken im Code nicht gefüllt. 
Ich habe das mittlerweile korrigiert und es scheint jetzt problemlos zu 
funktionieren.

Grüße
Jürgen

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.