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) |