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 ! > Vielen Dank für eure Hilfe. Hatte leider noch keine Zeit mir die disassemblierten Codes anzuschauen, werde das aber sicher > bald tun. Ich möchte prinzipiell auch nicht den vorhandenen Bootloader modifizieren, sondern meinen > eigenen schreiben um an die Grundlagen der Mikrocontrollerprogrammierung zu gelangen. Die Einteilung > in Primary und Secondary Loop ist somit sicherlich nur ein Aspekt den man beachten muss, wenn man > den genauen Ablauf verstehen will. Dass die eigentliche boot.hex dann mit einmal gesendet wird ist mir klar. > 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. Ich habe zur Kontrolle des Ablaufs an verschiedenen > Stellen Ausgaben auf eine 8-LED-Leiste an Port P1L eingefügt. Diese zeigen mir den korrekten Ablauf, > nur das nach dem Laden des eigentlichen Programms nichts passiert. Ich habe auch noch keine Funktion > zum Laden von Hex-Files eingefügt sondern arbeite erstmal nur mit Binary-Files. Hier mal mein > bisheriger Code: > _____________________________________________________________________________________________ > Primary Loop > _____________________________________________________________________________________________ > <asm> > ;Code fuer LED > mov P1L, #04 > extr #1 > mov DP1L, FFh > ;eigentlicher Beginn > mov R0, #FA60h ;enhaellt Adresse des > ;naechsten Bytes > W0: > jnb S0RIR, W0 ;warten, bis ein Byte > ;empfangen wurde > movb [R0], S0RBUF ;Byte speichern > bclr S0RIR ;Receive-Flag zuruecksetzen > cmpi1 R0, #FAD3h ;vergleiche ob Ende > ;erreicht+incrementiere R0 > jmpr cc_NE, W0 ;Springe zu W0 wenn > ;R0!=FAD3h > nop ;"Auffuellen" der 32 Byte > </asm> > _____________________________________________________________________________________________ > Secondary Loop: > _____________________________________________________________________________________________ > <asm>; (0xFA60) > ;LEDs > mov P1L, #33 > extr #1 > mov DP1L, 0FFh > nop > > ; --- Bus-Konfiguration initialisieren ------------------------------------------ > mov SYSCON, #7800h > nop > mov SYSCON, #7800h > nop > ;Kontroll-Led > mov P1L, #AA > ; --- DPPx initialisieren ------------------------------------------------------- > mov DPP0, #0 > mov DPP1, #1 > mov DPP2, #2 > mov DPP3, #3 > > ; --- ADDRSEL1 initialisieren --------------------------------------------------- > mov ADDRSEL1, #1008h > ; --- set up WR# as an output ----------------------------------------------- > bset P3.13 ; set WR# > bset DP3.13 ; make WR# an output > > ; --- set up serial port ---------------------------------------------------- > bset DP3.10 > mov S0CON, #8011h ; enable, 8N1, asynchron > mov S0BG, #01h ; 19200Baud > mov S0TIC, #0 > mov S0RIC, #0 > mov S0EIC, #0 > > > ; --- Ende der Systeminitialisierung -------------------------------------------- > DISWDT ;disable watchdog > EINIT ;Ende der Initialisierung > ;Kontroll-LED > mov P1L, #BB > > > ; --- Code an Adresse 0 laden --- > mov R0, #0 > mov P1L, #04 ;Kontroll-LED > W0: > jnb S0RIR, W0 ;Auf Zeichen warten > mov P1L, #08 ;Kontroll-LED > movb [R0], S0RBUF ;In Speicher schreiben > bclr S0RIR > mov P1L, #02 ;Kontroll-LED > cmpi1 R0, #0Ch ;12 Byte lesen > jmpr cc_NE, W0 > mov P1L, #01 ;Kontroll-LED > ;0x0D 0xFF ; ENDLOSSCHLEIFE!!! - zum Testen ob > ;Secondary Loop vollständig durchlaufen wurde > nop > SRST ;Software-Reset > </asm> > _____________________________________________________________________________________________ > Das Hauptprogramm, hier zum Test nur ein kurzes Programm das alle LEDs an P1L leuchten lässt. > _____________________________________________________________________________________________ > <asm> > mov P1L,#06Ch > extr #1 > mov DP1L,#0FFh > endl: jmp endl > </asm> > > Wie gesagt, mit Hilfe der einzelnen LED beschaltungen habe ich mich dann langsam soweit vorangetastet > bis der Code bis zum Ende der Secondary Loop lief. Das eigentliche Hauptprogramm sollte sich nun > an Adresse 0 befinden und eigentlich nach dem Software-Reset in der Secondary Loop abgearbeitet werden. > Es passiert jedoch nichts, außer, dass offensichtlich schon ein Reset ausgeführt wird, da auch die > letze von mir ausgegebene Belegung an P1L nicht mehr aktiv ist. Dies lässt darauf schließen, dass > ein Reset durchgeführt wurde, da beim Reset alle Ports auf Eingang gesetzt werden und somit keine > der LEDs mehr leuchten kann. > > Vielen Dank nochmal für eure Hilfe!!! > > Gruß > > Thomas > > 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. Werde mir das bei nächster Gelegen- > heit mal genauer anschauen... Hoffe ich komme heute noch dazu. Vielleicht sieht aber auch jemand > von euch meinen Fehler. > Wie könnte ich z.B. überprüfen, dass mein Code auch tatsächlich an Adresse 0 im Segment 0 steht? >