Hallo zusammen, ich bin schon lange passiver und eifriger Leser und habe hier schon viele gute Antworten, Beispiele und Anregungen gefunden. Weiter so ;) ! Nun stehe ich aber vor einem Problem das ich trotz intensiver Recherche und Langem rumprobieren noch nicht selbstständig gelöst bekommen habe. Für ein Projekt innerhalb meines Studiums muss ich mit einem "Freescale MC9S12XD256" arbeiten und u.a. Werte mit dem ADC einlesen und auf dem internen EEPROM (und später auch evtl. FLASH) Speicher ablegen... Aber die Geschichte mit dem EEPROM klappt momentan überhaupt nicht, ich kann zwar Werte aus dem EEPROM(innerhalb des Lokalen-Adressraums) auslesen aber Schreiben und Befehle (wie z.B. "Mass Erase") wollen nicht. ...wenn mir jemand helfen kann wäre ich echt dankbar! gruß leo
Hat der S12X überhaupt ein echtes EEPROM? Ich hab für den S12X vor ein paar Jahren mal die EEPROM emulation von Freescale in Betrieb genommen, weil mein Derivat kein EEPROM hatte.
laut Datenblatt müsste er eigentlich 4k EEPROM, 256K Flash und 14k Ram haben! http://cache.freescale.com/files/microcontrollers/doc/data_sheet/MC9S12XDP512RMV2.pdf?fpsp=1&WT_TYPE=Data Sheets&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation
Na so schwer ist das doch nicht. Das EEPROM-Modul initialisieren (ECLKDIV, max. Taktfrequenz beachten) und dann die Statemaschine aus dem Datenblatt eins zu eins nachbauen. Schon kannst du löschen und schreiben. Ganz wichtig ist natürlich, dass du immer nur vier Byte am Stück schreiben bzw. löschen (Ausnahme Mass Erase) kannst. Ansonsten steht eigentlich alles im Dateblatt. Einfach mal die paar Seiten ausdrucken und in Ruhe lesen, dann wird die Materie schnell verständlich. Gruß, Christian
Sorry! Ich sollte vlt. doch noch etwas weiter ausholen: Ich hab auf meinem µC gezwungenermaßen das Monitorprogramm "TwinPEAKs" am Laufen, mit dessen Hilfe ich (über eine RS232 Schnittstelle) meine Programme landen und starten kann. Die Programmierung erfolgt in Assembler und ich verwende für den Anfang nur den Adressraum der LocalMemoryMap(0x0000 - 0xFFFF), das mit den Pages hab ich noch nicht so ganz verstanden :/ Mithilfe von TwinPEAKs habe ich schon beliebige Werte in den EEPROM geschrieben und mit einem Selbstgeschriebenen Programm wieder ausgelesen. So weit, so gut. Nachdem ich jetzt ein Paar Werte in meinem EEPROM stehen hab, dachte ich mir ich versuch erst mal nen MassErase. Natürlich habe ich schon das Datenblatt zu Rate gezogen und dabei kam folgendes raus: INCLUDE "s12x.inc" ORG $1000 ;Ram Start MOVB #$CA,ECLKDIV ;ClockPrescaler einstellen für 16MHz Quarz MOVB #$00,ECNFG ;EEPROM-Interrupts aus MOVB #$FF,EPROT ;EEPROM-Protection aus w1: BRCLR ESTAT,#$80,w1 ;Warte auf CBEIF = 1 -> EEPROM bereit MOVB #$30,ESTAT ;ACCERR und PVIOL löschen(ACCERR=1,PVIOL=1) MOVB #$00,EDATAHI ;EDARA = 0x0000 MOVB #$00,EDATALO MOVB #$00,EADDRHI ;EADDR = 0x0000 MOVB #$00,EADDRLO MOVB #$41,ECMD ;Befehl für MassErase MOVB #$80,ESTAT ;CBEIF löschen (CBEIF=1) -> MassErase Starten JMP $F000 ;zurück zu TwinPEAKs END Das kleine Programm sollte einfach nur einen MassErase starten, tut aber nicht (Die Werte im EEPROM sind immer noch da). Irgendwo mach ich was grundlegend Falsch!!!
Ich bin mir jetzt nicht ganz sicher, da ich zuletzt hauptsächlich mit dem S12XE zu tun hatte. EADDR und EDATA braucht man nicht zu beschreiben, anstelle dessen müsste ein WRITE auf eine (beliebige) Adresse im EEPROM-Bereich genügen: MOVB #00,$0C00 Jörg
Hi, Jörg danke du hast recht, EDATA und EADDR sind fürn Ar***, ich habs endlich jetzt hinbekommen!!! INCLUDE "s12x.inc" ORG $1000 ;Ram Start ;EEPROM Initialisieren MOVB #$CA,ECLKDIV ;ClockPrescaler einstellen für 16MHz Quarz MOVB #$00,ECNFG ;EEPROM-Interrupts aus MOVB #$FF,EPROT ;EEPROM-Protection aus w1: BRCLR ESTAT,#$80,w1 ;Warte auf CBEIF = 1 -> EEPROM bereit MOVB #$30,ESTAT ;ACCERR und PVIOL löschen MOVW #$0000,$0800 ;Wort an eine Addresse des EEPROMs schreiben ;MOVB #$00,$0800 ;Move Byte geht nicht!!! MOVB #$41,ECMD ;Befehl für MassErase (oder MOVB#$20,ECMD zum Schreiben) MOVB #$80,ESTAT ;CBEIF löschen (CBEIF=1) -> Befehl ausführen JMP $F000 ;zurück zu TwinPEAKs END
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.