Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Bootloader - Initialisierung Kategorie: Progr. Assembler, TaskingTools, OS (von Thomas, http://www.tho-bai.de - 19.01.2005 23:46)


Hallo,

ich hatte schon vor geraumer Zeit mal ein Posting bezüglich des Bootloaders gemacht, wobei mir Andre
und Gordon geholfen haben, die Boot.hex zu disassemblieren.
Ich habe nun noch ein paar Verständnisprobleme bei der Initialisierung. Sie sieht folgenderma�en aus:

        MOV     STKOV,#0FA00H
        MOV     STKUN,#0FC00H
        MOV     SP,#0FC00H
        MOV     CP,#0FC00H
        BFLDL   SYSCON,#37H,#15H
        BFLDH   SYSCON,#12H,#00H
        BFLDL   89H,#04H,#04H
        BFLDH   89H,#0FFH,#00H
        MOV     DPP0,#0000H
        MOV     DPP1,#0001H
        MOV     DPP2,#0002H
        MOV     DPP3,#0003H
        EINIT

Ich verstehe nun nicht genau, was die Zeilen

BFLDL   89H,#04H,#04H
BFLDH   89H,#0FFH,#00H

bewirken, da ich leider noch nicht herausgefunden habe, was sich an der Adresse 89H befindet. Im
Handbuch des 80C166 steht an dieser Stelle nur "reserviert".

Probleme habe ich auch beim Verständnis des Löschens und des Schreibens in den Speicher. Hierzu
werden diverse Befehlsequenzen ausgeführt, die ich noch nicht ganz "entschlüsseln" konnte. Diese
sehen beispielsweise folgendermaÃ?en aus:

        MOV     R3,#0AAAAH
        MOV     0AAAAH,R3
        MOV     R3,#5555H
        MOV     5554H,R3
        MOV     R3,#8080H
        MOV     0AAAAH,R3
        MOV     R3,#0AAAAH
        MOV     0AAAAH,R3
        MOV     R3,#5555H
        MOV     5554H,R3
        MOV     R3,#3030H
        MOV     [R2],R3

Dies sind dem Anschein nach Codesequenzen, die den Mikrocontroller dazu veranlassen, einen bestimmten
Bereich im Speicher zu Löschen. Im Quellcode findet man noch weitere Stellen, die meiner Meinung
nach dazu nötig sind um in den Speicher zu schreiben, da sie nach jedem Empfang eines Hex-Records
aufgerufen werden. Ich habe jedoch leider noch nicht herausgefunden, was die einzelnen Befehle
bedeuten. Es wäre schön wenn mir da jemand weiterhelfen könnte oder zumindest eine Dokumentation
zum Programmieren des Speichers des C164CI hat, da ich leider noch auf keine gestoÃ?en bin.

Vielen Dank schon mal für eure Hilfe

GruÃ?

Thomas


Hier nochmal der komplette Quellcode (nur Secondary Loop - ersten 32 Byte fehlen)
von mir bearbeitet:

#include "C:/Rigel/Reads166/V310/Include/sfr167.inc"
P1L     defr    0FF04h
DP1L    defr    0FF04h

                ;LEDs
                mov     P1L, #033h
                extr    #1
                mov     DP1L, #0FFh

                MOV     STKOV,#0FA00H
                MOV     STKUN,#0FC00H
                MOV     SP,#0FC00H
                MOV     CP,#0FC00H
                BFLDL   SYSCON,#37H,#15H
                BFLDH   SYSCON,#12H,#00H
                BFLDL   89H,#04H,#04H
                BFLDH   89H,#0FFH,#00H
                MOV     DPP0,#0000H
                MOV     DPP1,#0001H
                MOV     DPP2,#0002H
                MOV     DPP3,#0003H
                EINIT

                MOV     R2,#00H
                CALLR   erase
                MOV     R2,#4000H
                CALLR   erase
                MOV     R2,#6000H
                CALLR   erase
                MOV     R2,#8000H
                CALLR   erase
                mov P1L, #16
download:
                mov     P1L, #08h
                MOV     R1,#00H                 ;Adresszaehler
wait:                                                                                  
                JNB     S0RIR,wait
                MOVB    RH2,S0RBUF              ;Highbyte in RH2 sichern
                BCLR    S0RIR
wait2:
                JNB     S0RIR,wait2
                MOVB    RL2,S0RBUF              ;Lowbyte in RL2 sichern
                BCLR    S0RIR                   ;=>R2 enthaelt Adresse des Records
                CMP     R2,#0FFFFH
                JMPR    CC_Z,sendFF             ;Wenn Adresse == 0FFFFh
wait3:
                JNB     S0RIR,wait3
                MOV     R5,S0RBUF               ;Anzahl in R5 sichern
                BCLR    S0RIR
loop:
                JNB     S0RIR,loop
                mov     P1L, #04
                MOVB    RL0,S0RBUF              ;Daten-Byte in RL0 sichern
                BCLR    S0RIR
                MOVB    [R1+#0F900H],RL0        ;Datebyte in 0F900h+Zaehler
                ADD     R1,#1                                           ;Adresszaehler eins hochzaehlen
                CMP     R1,#0020H
                JMPR    CC_NZ,loop              ;Wenn Record noch nicht vollstaendig->loop
                MOVB    RL0,RH2                         ;Highbyte der Adresse in RL0
                CALLR   echo
                MOVB    RL0,RL2                         ;Lowbyte der Adresse in RL0
                CALLR   echo
                MOVB    RL0,RL5
                CALLR   echo
                MOV     R1,#00H
write:
                MOV     R0,[R1+#0F900H]
                CMP     R1,R5
                JMPR    CC_NC,c_echo
                CALLR   write2flash
                CMP     R4,#0FFFFH
                JMPR    CC_NZ,c_echo
                NEGB    RL0
                CALLR   echo
hang:
                mov     P1L, #0AAh
                JMPR    CC_UC,hang
c_echo:
                CALLR   echo
                MOVB    RL0,RH0
                CALLR   echo
                ADD     R2,#2
                ADD     R1,#2
                CMP     R1,#0020H
                JMPR    CC_NZ,write
                JMPR    CC_NC,download
sendFF:
                MOVB RL0,#00FFH
                CALLR   echo
                CALLR   echo
                SRST
erase:
                MOV     R3,#0AAAAH
                MOV     0AAAAH,R3
                MOV     R3,#5555H
                MOV     5554H,R3
                MOV     R3,#8080H
                MOV     0AAAAH,R3
                MOV     R3,#0AAAAH
                MOV     0AAAAH,R3
                MOV     R3,#5555H
                MOV     5554H,R3
                MOV     R3,#3030H
                MOV     [R2],R3
               
l1:
                MOV     R3,[R2]
                AND     R3,#0080H
                CMP     R3,#0080H
                JMPR    CC_NZ,l1
                JMPR    CC_UC,l2
write2flash:
                mov     P1L, #80h
                MOV     R3,#0AAAAH
                MOV     0AAAAH,R3
                MOV     R3,#5555H
                MOV     5554H,R3
                MOV     R3,#0A0A0H
                MOV     0AAAAH,R3
                MOV     [R2],R0
l3:
                MOV     R3,[R2]
                MOVB    RH3,RL0
                ANDB    RL3,#0080H
                ANDB    RH3,#0080H
                CMPB    RL3,RH3
                JMPR    CC_Z,r4_00
                MOV     R3,[R2]
                ANDB    RL3,#0020H
                CMPB    RL3,#0020H
                JMPR    CC_NZ,l3
                MOV     R3,[R2]
                MOVB    RH3,RL0
                ANDB    RL3,#0080H
                ANDB    RH3,#0080H
                CMPB    RL3,RH3
                JMPR    CC_Z,r4_00
                MOV     R4,#0FFFFH
                JMPR    CC_UC,l2
r4_00:
                MOV     R4,#00H
                JMPR CC_UC,l2
l2:
                MOV     R3,#0AAAAH
                MOV     0AAAAH,R3
                MOV     R3,#5555H
                MOV     5554H,R3
                MOV     R3,#0F0F0H
                MOV     0AAAAH,R3
                MOV     R3,[R2]
               
                RET
echo:
                MOV     P1L,#0FFh
                JNB     S0TIR,echo
                BCLR    S0TIR
                MOVB    S0TBUF,RL0
wait5:
                JNB     S0TIR,wait5
                RET
                NOP
                NOP
                NOP



Meine Seite: http://www.tho-bai.de


    Antwort schreiben


Antworten:

Re: Bootloader - Initialisierung (von André H. - 21.01.2005 21:33)
Re: Bootloader - Initialisierung (von Thomas - 20.01.2005 17:41)
    Re: Bootloader - Initialisierung (von Thomas - 23.01.2005 17:39)
        Re: Bootloader - Initialisierung (von André H. - 25.01.2005 14:30)
            Re: Bootloader - Initialisierung (von Thomas - 26.01.2005 19:10)