mc68hc12




BACK ..


Card12.DG128A von "www.elektronikladen.de/mct" mit dem Motorola MC68HC912DG128A ################################################################################ # # Einstellungen und Software fuer den Mikrokontroler MC68HC912DG128A # auf der Karte "Card12.DG128A" von "http://www.elektronikladen.de/mct". # Wenn man soein Ding das erste mal in Haenden haelt, stellen sich einige Fragen # die vom beigelegten Dokumentationsmaterial nicht beantwortet werden. # Die Fragen, die sich mir stellten und die ich nach meinem ersten Kontakt mit # dieser Karte nicht unter zur Hilfe nahme der beigelegten Dokumentation # beantworten konnte, will ich hiermit dokumentieren (und noch etwas mehr...). # Ich habe den DG128 nicht wegen der groesseren Speicherausstattung gewaehlt, # sondern weil er noch eine zusaetzliche IIC-Schnittstelle besitzt. # # Die Karte ist im Format 87mm x 54mm und wird ausschliesslich mit 5V betrieben! # Zum Programmieren darf KEINE separate 12V-Versorgung am MC anliegen, # denn diese wuerde den MC zerstoeren. Auf der Unterseite der Platine # ist (im Normalfall) fuer die in der entsprechenden Leiterbahn eine # Unterbrechung eingearbeitet. # ################################################################################ # # Einstellungen fuer TwinPEEKs RS232-Kommunikationsschnittstelle: # # 19200 Bps # 8N1 # kein Hardwarehandshake # kein Softwarehandshake # kein Terminal-Protokoll (ANSI) # ################################################################################ # # cu -s 19200 -l /dev/cuaa0 (mit "root"-Rechten) # ################################################################################ # # /etc/remote # cuaa0d|cua0d:dv=/dev/cuaa0:br#19200:pa=none: # # tip cuaa0d (mit "root"-Rechten) # ################################################################################ # # Konfigurationsfile: ~/.minirc.card12 # # pu pname9 YUNYNascii # pu pname10 YDNYNascii # pu pprog9 /usr/bin/ascii-xfr -dsv # pu pprog10 /usr/bin/ascii-xfr -drv # pu baudrate 19200 # pu bits 8 # pu parity N # pu stopbits 1 # pu minit # pu updir Card12 # pu downdir card12 # pu backspace BS # pu rtscts No # pu xonxoff No # pu fselw Yes # pu askdndir Yes # # minicom /dev/cuaa0 card12 (ohne "root"-Rechte) # oder # minicom -t ansi /dev/cuaa0 card12 (ohne "root"-Rechte) # # CTRL-A T: # "A - Terminal emulation : ANSI" # "D - Newline delay (ms) : 200" # Anschliessend MC einschalten oder den RESET-Knopf druecken! # ################################################################################ # # TwinPEEKs V1.6a for Card12.DG128A # # Help: H (listet alle Monitorbefehle auf) # # Um eine Datei (blink.s19) in den Speicher zu laden, muss im Monitor ein "l" # eingegeben werden, jetzt ist der MC empfangsbereit. # Jetzt sendet man mit dem Terminalprogramm die gewuenschte Datei an das # Monitorprogramm im MC. Damit das funktioniert, # muss das Terminalprogramm folgendermassen konfiguriert werden: # "Wait for Handshake" bei "File Transfer" # "Quittungszeichen/Sequence" ist "*" oder "#42" # ################################################################################ # # Ein Beispielprogramm wird schon fertig mitgeliefert, # leider ist das fuer den HC12D60 geschrieben worden und # der hat unter anderem seinen RAM-Bereich auf "0x0200 - 0x05FF" liegen # und der HC12DG128 hat seinen frei verwendbaren RAM-Bereich # auf "0x2000 - 0x3DFF" liegen, so das man das Programm fuer den ersten Test # umschreiben (blink.s) und neu uebersetzen (blink.s19) muss. # Program Memory (ORG): 0x8000 (erste Adr. auf der das Program gspeichert ist) # Data Memory : 0x2000 (erste RAM-Adresse) # Sack Pointer (lds): 0x4000 (letzte RAM-Adresse + 1) # Ein funktionierender Quelcode, bei dem der Stack Pointer von 0x0600 auf 0x4000# geaendert wurde koennte wie folgt aussehen. # # Inhalt der Datei "blink.s": # # CPU 68HC12 # PADDING OFF # ORG $8000 # main lds $4000 # clr $0016 # bset $002b,$80 # blink1 ldaa $0029 # eora #$80 # staa $0029 # bsr delay # bra blink1 # delay psha # pshx # ldx #$1000 # _loop1 clra # _loop0 dbne a,_loop0 # dbne x,_loop1 # pulx # pula # rts # END main # # # MEMORY MAP # des Motorola MC68HC912DG128A (Card12.DG128A): # --------------------------------------------- # Register block: 0x0000 - 0x03FF # EEPROM : 0x0800 - 0x0FFF (02 kB) # RAM : 0x2000 - 0x3FFF (08 kB) # (Monitor belegt 0x3E00 - 0x3FFF) # (freier RAM 0x2000 - 0x3DFF) # Flash ROM : 0x4000 - 0x7FFF (16 kB un-paged) # Flash ROM : 0x8000 - 0xBFFF (16 kB paged, page0...7 also 128kB) # Flash ROM : 0xC000 - 0xFFFF (16 kB un-paged) # (Bootblock des Monitorprogramms belegt 0xE000 - 0xFFFF) # (freier Flash-ROM-Bereich 0xC000 - 0xDFFF) # ################################################################################ # # Nach dem uebersetzen in das S19-Format sieht das Programm wie folgt aus: # # Inhalt der Datei "blink.s19": # # S0030000FC # S1138000CF40007900164C2B80962988805A290786 # S11380100220F63634CE1000870430FD0435F930E2 # S1058020323DEB # S90380007C # # # Im einfachsten Fall kann man diese Zeilen folgender massen in den MC bekommen. # Man tipt im Terminalfenster in dem das Monitorprogramm laeft "l" ein und # fuehgt mit der Maus (copy + past / makieren und einfuehgen) die Zeilen ein, # eine nach der anderen. Wichtig ist nur, das nach jeder Zeile ein # Zeilenumbruch mit eingegeben wird! Den kann man in X11 mit der Maus # mit uebergeben, sonst muss man einmal ENTER druecken bevor man die naechste # Zeile kopieren kann. Nach dem ENTER (Zeilenumbruch) muss unbedingt auf das # Quittungszeichen (ein "*") gewartet werden (ein paar Millisekunden) # bevor die naechste Zeile kopiert werden kann. # Aus diesem (Timing-) Grund kann man nicht immer den ganzen Inhalt # der S19-Datei, sozusagen mit einem Maus-Klick in den MC pumpen. # # # Verwendet man tip oder cu, schaltet man mit "l" den MC auf "empfang" und # sagt tip/cu mit der Zeichenfolge "~>" (oder "~~>") das eine Datei # eingespielt werden soll. Jetzt wird man aufgefordert den Dateinamen # einzugeben, an dieser Stelle gibt amn den Namen der S19-Datei an # und drückt ENTER. Die S19-Datei sollte sich im aktuellen Pfad # (meistens dem HOME-Verzeichnis) befinden. # # # Um das Programm dann zu starten genuegt die Eingabe "g 8000", das bedeutet # das Monitorprogramm soll an Adresse 0x8000 springen und das dort liegende # Programm starten. # Soll das Programm gleich nach dem einschalten automatisch gestartet werden, # muessen zwei Pins auf dem Board verbunden werden. # Das sind die Portleitungen PH6 und PH7, auf dem Board sind das # die Pins 7 und 8 des Steckverbinders ST5. Zu finden oben links auf dem Board. # Besteht diese Verbindung, so wird nach dem einschalten immer an die Adresse # 0x8000 gesprungen und das Monitorprogramm nicht weiter abgearbeitet! # ################################################################################ # # Zum Assemblerprogrammieren ist "asl" sehr gut geeignet: # Web : "http://john.ccac.rwth-aachen.de:8000/as/" # Ports: "/usr/ports/devel/asl/" # # Den Quellcode in ein Binaerformat uebersetzten: # asl blink.s (es wird die Datei "blink.p" erzeugt) # # Die Binaerausgabe in das gewuenschte S19-Format uebersetzen: # p2hex -r \$-\$ -F Moto -M 1 +5 blink.p blink.s19 # (es wird die Datei "blink.s19" erzeugt) # # # Zum C/C++-programmieren kann man "m6811-elf-gcc" verwenden, # das ist nicht das neueste aber speziell fuer FreeBSD angepasst # und stark optimiert, so das es kleineren und schnelleren Code erzeugt: # Web : "http://www.gnu-m68hc11.org/" # Hilfe: "http://www.ee.nmt.edu/~dbaird/gcc-hc1x.html" # Ports: "/usr/ports/devel/m6811-gcc" # # m6811-elf-gcc -m68hc12 -c -o blink.o blink.c # m6811-elf-gcc -m68hc12 -o blink.elf blink.o # m6811-elf-objcopy -O srec blink.elf blink.s19 # (es wird die Datei "blink.s19" erzeugt) # oder # m6811-elf-gcc -m68hc12 -nostartfiles -Wl,--oformat=srec -o blink.s19 blink.c # (es wird die Datei "blink.s19" erzeugt) # # # Ein MC68HC12-Simulator in Java programmiert und sehr nett aufgemacht: # (http://www.almy.us/68hc12.html) # # export JAVA_HOME=/usr/local/jdk1.4.1 # export CLASSPATH=${JAVA_HOME}/lib/ # export PATH=${PATH}:${JAVA_HOME}/bin/:${JAVA_HOME}/jre/bin/ # # java -jar simhc12.jar (JRE 1.1.7) # java -server -jar simhc12.jar (ab JRE 1.1.8, dann ist er schneller!) # # MEMORY MAP # im evaluation board mode (MC68HC12A4EVB): # ----------------------------------------- # Register block: 0x0000 - 0x01FF # RAM : 0x0800 - 0x0BFF ( 01 kB) # EEPROM : 0x1000 - 0x1FFF ( 02 kB) # External RAM : 0x4000 - 0x7FFF ( 16 kB) # (gespiegelt in den Bereich 0x0000-0x3FFF # wo gerade ein Loch ist) # External ROM : 0x8000 - 0xFFFF ( 16 kB) # (Monitorsimulator und Vectoren) # # MEMORY MAP # im Single Chip Mode, # dann sind keine Externen Speicher verfuehgbar # (MC68HC912B32): # --------------------------------------------- # Register block: 0x0000 - 0x01FF # RAM : 0x0800 - 0x0BFF ( 01 kByte) # EEPROM : 0x0D00 - 0x0FFF (768 Byte) # Flash ROM : 0x8000 - 0xFFFF ( 16 kByte) # ################################################################################