Re: Flashspeicher löschen Kategorie: Progr. Assembler, TaskingTools, OS (von Thomas, http://www.tho-bai.de - 23.09.2004 16:32) | ||
Als Antwort auf Re: Flashspeicher löschen von Gordon Klimm - 22.09.2004 13:13 | ||
| ||
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 _____________________________________________________________________________________________ ;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 _____________________________________________________________________________________________ Secondary Loop: _____________________________________________________________________________________________ ; (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 _____________________________________________________________________________________________ Das Hauptprogramm, hier zum Test nur ein kurzes Programm das alle LEDs an P1L leuchten lässt. _____________________________________________________________________________________________ mov P1L,#06Ch extr #1 mov DP1L,#0FFh endl: jmp endl 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? Meine Seite: http://www.tho-bai.de | ||
Antwort schreiben Antworten: Re: Flashspeicher löschen (von André H. - 23.09.2004 19:02) Re: Flashspeicher löschen (von Thomas - 25.09.2004 15:25) Re: Flashspeicher löschen (von André H. - 26.09.2004 9:29) |