Benutzer-Werkzeuge

Webseiten-Werkzeuge


einplatinenrechner:hardware:microcontroller_mcu:mc68hc12

MC68HC12

Card12.DG128A (MC68HC12)

Ich habe mir diesen MC von "www.elektronikladen.de/mct" mit dem Motorola MC68HC912DG128A geholt.

Einstellungen und Software für den Mikrokontroller MC68HC912DG128A auf der Karte "Card12.DG128A" von "http://www.elektronikladen.de/mct". Wenn man soein Ding das erste mal in Händen hält, 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 Hilfenahme der beigelegten Dokumentation beantworten konnte, will ich hiermit dokumentieren (und noch etwas mehr…).

Ich habe den DG128 nicht wegen der größeren Speicherausstattung gewählt, sondern weil er noch eine zusätzliche IIC-Schnittstelle besitzt.

Die Karte ist im Format 87mm x 54mm und wird ausschließlich mit 5V betrieben! Zum Programmieren darf KEINE separate 12V-Versorgung am MC anliegen, denn diese würde den MC zerstören. Auf der Unterseite der Platine ist (im Normalfall) für diese in der entsprechenden Leiterbahn eine Unterbrechung eingearbeitet, so das eigentlich nix passieren sollte.

Diese Beispiele wurden alle mit FreeBSD durchgeführt.

COM-Port

Verbindungsparameter der TwinPEEKs RS232-Kommunikationsschnittstelle (serielle Schnittstelle auf dem MC-Board):

19200 Bps
8N1
kein Hardwarehandshake
kein Softwarehandshake
kein Terminal-Protokoll (ANSI)

Verbindung mit cu aufbauen (geht nur als "root"):

# cu -s 19200 -l /dev/cuaa0
# vi /etc/remote
cuaa0d|cua0d:dv=/dev/cuaa0:br#19200:pa=none:

Verbindung mit tip aufbauen (geht nur als "root"):

# tip cuaa0d

Konfigurationsdatei bearbeiten (als "normaler" Benutzer):

# vi ~/.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

serielle Verbindung zwischen dem PC und dem MC starten (als "normaler" Benutzer):

# minicom /dev/cuaa0 card12

oder so (als "normaler" Benutzer):

# minicom -t ansi /dev/cuaa0 card12

Bedienung von minicom:

# CTRL-A T:
#     "A - Terminal emulation  : ANSI"
#     "D -  Newline delay (ms) : 200"
#     Anschließend MC einschalten oder den RESET-Knopf drücken!
# TwinPEEKs V1.6a for Card12.DG128A
#
#     Help: H   (listet alle Monitorbefehle auf)

Um eine Datei (z.B.: "blink.s19") in den Speicher des MC zu laden, muss im Monitor ein "l" eingegeben werden, jetzt ist der MC empfangsbereit.

Jetzt sendet man mit dem Terminalprogramm die gewünschte Datei an das Monitorprogramm im MC.

Damit das funktioniert, muss das Terminalprogramm folgendermaßen bedient werden:

  1. "Wait for Handshake" bei "File Transfer"
  2. "Quittungszeichen/Sequence" ist "*" oder "#42"

beiliegende Beispiele

Ein Beispielprogramm wird schon fertig mitgeliefert, leider ist das für 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 für den ersten Test umschreiben (blink.s) und neu übersetzen (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# geändert wurde könnte wie folgt aussehen.

                  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)

Daten in den MC laden

Nach dem übersetzen 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 maßen in den MC bekommen. Man tipt im Terminalfenster, in dem das Monitorprogramm läuft, "l" ein und fügt mit der Maus (copy + past / makieren und einfühgen) 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 übergeben, sonst muss man einmal ENTER drücken bevor man die nächste Zeile kopieren kann. Nach dem ENTER (Zeilenumbruch) muss unbedingt auf das Quittungszeichen (ein "*") gewartet werden (ein paar Millisekunden) bevor die nächste 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 man 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 genügt 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, müssen 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!

Programmiersprachen

Assembler

Zum Assemblerprogrammieren ist "asl" sehr gut geeignet:

Den Quellcode in ein Binärformat übersetzten:

asl blink.s                        (es wird die Datei "blink.p" erzeugt)

Die Binärausgabe in das gewünschte S19-Format übersetzen:

# p2hex -r \$-\$ -F Moto -M 1 +5 blink.p blink.s19

jetzt wird die Datei "blink.s19" erzeugt.

C/C++

Zum C/C++-programmieren kann man "m6811-elf-gcc" verwenden, das ist nicht das neueste aber speziell für FreeBSD angepasst und stark optimiert, so das es kleineren und schnelleren Code erzeugt:

# 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

oder so:

# m6811-elf-gcc -m68hc12 -nostartfiles -Wl,--oformat=srec -o blink.s19 blink.c

jetzt wird die Datei "blink.s19" erzeugt.

MC68HC12-Simulator

Simulator in Java

Ein MC68HC12-Simulator in Java programmiert und sehr nett aufgemacht:

# export JAVA_HOME=/usr/local/jdk1.4.1
# export CLASSPATH=${JAVA_HOME}/lib/
# export PATH=${PATH}:${JAVA_HOME}/bin/:${JAVA_HOME}/jre/bin/

JRE 1.1.7:

# java -jar simhc12.jar

ab JRE 1.1.8 (dann ist er schneller!):

# java -server -jar simhc12.jar
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 (MC68HC912B32)

dann sind keine Externen Speicher verfügbar

#        Register block: 0x0000 - 0x01FF
#        RAM           : 0x0800 - 0x0BFF   ( 01 kByte)
#        EEPROM        : 0x0D00 - 0x0FFF   (768  Byte)
#        Flash ROM     : 0x8000 - 0xFFFF   ( 16 kByte)
/home/http/wiki/data/pages/einplatinenrechner/hardware/microcontroller_mcu/mc68hc12.txt · Zuletzt geändert: von manfred