Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Thomas, > > > Ich möchte prinzipiell auch nicht den vorhandenen Bootloader modifizieren, sondern meinen > > eigenen schreiben um an die Grundlagen der Mikrocontrollerprogrammierung zu gelangen. > > Das erklärt die Fragen. ;-) > > > Es geht mir hier auch mehr um theoretisches Verständnis der Abläufe. Dies denke ich habe ich mir auch > > mittlerweile schon angeeignet (aber Danke für den Hinweis mit dem SRAM ;-)). Ich habe meinen Bootloader > > daher in mehrere Files unterteilt um die Abläufe klarer darstellen zu können. Ich kann auch schon > > die Primary und Secondary Loop einwandfrei übertragen. Auch mein eigentliches Programm wird dann > > scheinbar ohne Fehler geladen, jedoch nicht ausgeführt. > > Das stimmt so nicht. Dein Programm wird zwar empfangen, jedoch nicht in den Flash gespeichert. > Man kann nicht einfach per <asm>mov</asm> Daten in den Flash schreiben. > Dazu müssen vorher immer bestimmte Sequenzen ausgeführt werden, ähnlich wie das Löschen > des Flash. > Das sind die Sequenzen im Boot-Loader-Listing mit den ganzen 0xAAAA und 0x5555 usw. . > Am besten schaust Du Dir das einmal im OS-Listing an. > Die Routine befindet sich an Offset 0x25e4, die Löschroutine an Offset 0x2570. > Beide werden vor dem Ausführen in den internen RAM des C164CI kopiert. > Die Löschroutine erwartet die Segmentnummer in R12. > Die Schreibroutine erwartet ebenfalls die Segmentnummer in R12, sowie die Adresse > in R13 und das Datenword in R14. > Die Schreibroutine prüft nach jedem geschriebenen Word, ob dieses korrekt geschrieben > wurde. Wenn nicht, gibt's einen "BURN ERR". > > > <hr> > > Das Hauptprogramm, hier zum Test nur ein kurzes Programm das alle LEDs an P1L leuchten lässt. > > <hr> > > <asm> > > mov P1L,#06Ch > > extr #1 > > mov DP1L,#0FFh > > endl: jmp endl > > </asm> > > Beachte, daß Du nicht einfach ab Adresse 0 das Programm schreiben darfst ! > Am Anfang des Speichers eines µControllers befinden sich die Interruptvektoren. > Der Interrupt-Vektor an Addr. 0 ist der Reset-Vektor. > Von diesem springt man zum eigentlichen Programm. > Beim OS der CC2 wäre das ein <asm>JMPS 0x2226</asm>. > Wichtig ist nur, daß das Programm in Segment 0 erst hinter den Interruptvektoren anfängt, > und Du dorthin vom Rest-Vektor springen mußt. > Prinzipiell darf das Programm in Seg0 erst ab Offset 0x200 beginnen. > Alles dafür ist für Interruptvektoren reserviert. > > Mehr dazu erfährst Du aus dem Manual zum C164 ab Kapitel 5 "Interrupt and Trap Functions" > und über das Listing des OS. > Das Listing des OS ist wirklch eine sehr hilfreiche Lektüre ;-), auch wenn > es vom Stand des letzten original OS ist. ein kommentiertes Listing zu OSOPT V3.x > ist aber in Arbeit ... (Ich weiß allerdings nicht wann ich mit dem Kommentieren fertig werden.) > > > > PS: Habe auch grad bei einem kurzen Blick auf den disassemblierten Code gesehn, dass dort andere > > Einstellungen für beispielsweise das SYSCON SFR gemacht wurden. > > Diese Einstellungen betreffen u.a. die Speicherkonfiguration des C164CI. > Ich würde diese 1:1 übernehmen. ;-) > > > > Wie könnte ich z.B. überprüfen, dass mein Code auch tatsächlich an Adresse 0 im Segment 0 steht? > > Indem man nach jedem geschriebenen Wert die Speicherzelle wieder ausließt und via RS232 > als Echo zurücksendet. > So, wie ich es in der boot.hex erkennen kann, wird dies dort ebenfalls gemacht. > (Zumindest bekomme ich beimLaden ein Echo ;-) ) > > MfG André H.