Re: Daten speichern im Segment 3 Kategorie: Progr. Assembler, TaskingTools, OS (von Tom - 6.07.2003 9:15) | |
Als Antwort auf Re: Daten speichern im Segment 3 von André H. - 4.07.2003 10:43
| |
Hallo André, zuerst mu� ich jetzt mal rausfinden, was die > > 0x25e4: MOV R4,#0xaaaa > > 0x25e8: MOV 0xaaaa,R4 writes to prom address 0x5555 because A0 is not used > > 0x25ec: MOV R4,#0x5555 > > 0x25f0: MOV 0x5554,R4 > > 0x25f4: MOV R4,#0xa0a0 > > 0x25f8: MOV 0xaaaa,R4 eigentlich so genau machen und dann mal die Speicheraufteilung im allgemeinen welche Sachen im welchen Segment sind, un wo noch ein bisschen Platz für die paar Bytes ist. dann denke sollte es schon möglich sein diese auch zu nutzen, aber wie gesagt zuerst denke ich, mu� ich mir ein paar grundsätzliche Informationen über Flash Speicher besorgen, um die Routinen erst mal richtig zu verstehen. Ich werde dich auf dem Laufenden halten, hab aber z.Zt. wenig Zeit um mich mit dem Thema intensiv zu beschäftigen. mfg Tom > Hallo Tom, > > Diese Diskussion gab es schon öfters. :-) > Jedoch beschäfftige ich mich jetzt seit wenigen Wochen auch mit Flash-Bausteinen, > da ich Versuche mache mein CC2Net-RAM-Device auch mit Flash-Bausteinen zu bestücken. > > Das Problem bei der CC2 auf den Flash schreibend oder löschend zuzugreifen ist, > da� der ausführende Code nicht im Flash stehen darf. > Ich habe mir jetzt die Mühe gemacht, die Schritte des OS nachzuvollziehen bzw. habe ich > meinen Kopf "debuggen" lassen. *grins* > > Beim löschen von Seg.3 passiert folgendes: > Angefangen bei den Hosmode-Routinen ab 0x2276 wird das entsprechende > Kommando ausgewertet. Bei CMD6 ("ERAS HEX") wird zu Addr. 0x2310 in der Sprungtabelle > gesprungen. Von dort aus wird der Code ab 0x2536 aufgerufen. > Hier wird "ERAS HEX" auf dem internen LCD ausgegeben, dann die Kopierroutine an 0x255C > aufgerufen, welche die Lösch-Routinen in den internen RAM des C164CI ab Addr.0xF8B4 kopiert. > Anschlie�end wird die Segmentnummer, hier 3, in R12 gespeichert. > Danach wird die Routine an 0x2552 aufgerufen, welche die Interrupts zuerst deaktiviert, > dann die Lösch-Routine im internen RAM an Addr.0xF8B4 aufruft und anschlie�end die > die Interrupts wieder aktiviert. Danach geht's wieder in den Hostmode. > > Beim schreiben in den Flash verhält es sich ähnlich, nur da� die Interrupts > nicht deaktiviert werden. Aber der schreibende Code mu� auch hier aus > dem internen RAM des Controllers ausgeführt werden. > > Ach ja, die Daten(0xaaaa, 0x5555, 0xa0a0, 0x8080 etc.), die am Anfang > der Schreib-und Löschroutinen zum Flash gesendet werden, sind Kommandos, > die den Flash-Baustein entsprechend veranlassen, z.B. bestimmte Segmente > zu löschen oder diesen in den Schreibmodus zu versetzen. > > Theoretisch sollte es möglich sein, diese Routinen zu nutzen. > Jedoch kann man Seg3 dann nicht für Daten verwenden, da man immer > ASM-Code benötigt, um dies durchzuführen. > Hier wäre eher die Verwendung von Seg7 (obere 64kB des Konstantenspeichers) > oder Seg2 (nicht benutzte Beriebssystemreserve) besser. > Allerdings müsste man hier einiges experimentieren und viel Zeit investieren, > bis man es wirklich schafft. > > Einfacher wäre es für ein "paar" Konfigurationsdaten ein externes winziges(Bauform) > und günstiges EEProm zu benutzen. Diese kosten schlie�lich nicht die Welt. :-) > > MfG André H. > > > > Hallo zusammen, > > > > da ich jetzt angefangen habe mich mir der Assembler Programierung > > zu beschäftigen taucht bei mir die Frage auf, ob man nicht auch > > Daten im Segment 3 speichern könnte ( das man wegen ein paar > > Bytes nicht immer gleich noch mal ein Modul braucht). > > Im disassembled os.hex von Eric Hospel hab ich folgende Stelle gefunden > > > > 0x25e4: MOV R4,#0xaaaa > > 0x25e8: MOV 0xaaaa,R4 writes to prom address 0x5555 because A0 is not used > > 0x25ec: MOV R4,#0x5555 > > 0x25f0: MOV 0x5554,R4 > > 0x25f4: MOV R4,#0xa0a0 > > 0x25f8: MOV 0xaaaa,R4 > > 0x25fc: EXTS R12,#1 > > 0x25fe: MOV [R13],R14 Program word > > 0x2600: EXTS R12,#1 > > 0x2602: MOV R4,[R13] Readback the value > > 0x2604: XOR R4,R14 > > 0x2606: AND R4,#0x80 if ready? > > 0x260a: JMPR cc_Z,0x2626 then jump > > 0x260c: EXTS R12,#1 > > 0x260e: MOV R4,[R13] Readback the value > > 0x2610: AND R4,#0x20 if time limit not Exceeded? > > 0x2614: JMPR cc_Z,0x2600 then jump > > 0x2616: EXTS R12,#1 > > 0x2618: MOV R4,[R13] Readback the value > > 0x261a: XOR R4,R14 > > 0x261c: AND R4,#0x80 > > 0x2620: JMPR cc_Z,0x2626 > > 0x2622: MOV R14,#0x0 return 0 when error > > 0x2624: JMPR cc_NC,0x262a > > 0x2626: MOV R14,#0xffff return 0xffff when OK > > 0x262a: MOV R4,#0xaaaa Activate read mode > > 0x262e: MOV 0xaaaa,R4 > > 0x2632: MOV R4,#0x5555 > > 0x2636: MOV 0x5554,R4 > > 0x263a: MOV R4,#0xf0f0 > > 0x263e: MOV 0xaaaa,R4 > > 0x2642: EXTS R12,#1 > > 0x2644: MOV R4,[R13] > > 0x2646: MOV R4,R14 > > 0x2648: RETS > > > > die meiner Meinung für das Schreiben der Daten im Segment 3 zuständig ist. > > Meine Frage nun ist, kann man mit diesem Programmteil Daten schreiben (Brennen) > > oder nicht ? > > > > mfg Tom > > > > > > | |
Antwort schreiben Antworten: Re: Daten speichern im Segment 3 (von Rolf - 8.07.2003 13:27) |