16 Bit Mikrocontroller HC12 (II)


MIKROPROZESSOR
16-Bit-
Mikrocontroller HC12
Teil 2. Programmierung und Tools
Von Dipl.-Ing. Oliver Thamm
Nachdem sich im ersten Teil unseres HC12-Beitrags alles um die
Hardware drehte, geben wir diesmal einen Überblick über die
Programmierung und die dazu erforderlichen Tools.
Der HC12 ist ein typischer CISC- rige HC11-Anwender. Sie finden all neu übersetzen, ohne daß es zu Fehlermel-
Mikrocontroller und verfügt damit die vertrauten HC11-Befehle beim dungen kommt. Zumindest bei (mathemati-
über vergleichsweise viele Befehle HC12 wieder, müssen sich also gar schen) Algorithmen kann man so durch Über-
mit vergleichsweise komplexer Wir- nicht erst umstellen. Vorhandene nahme vorhandener Quellen viel Zeit sparen.
kungsweise. Tendenziell lässt sich HC11-Programme kann man mit Weniger erfolgversprechend hingegen ist der
solch ein Controller leichter in einem geeigneten HC12-Assembler Transfer von Programmteilen, die bestimmte
Assembler programmieren als Ver-
treter der RISC-Fraktion. Letztere
verleiten (notwendigerweise) zu
Spaghettikode, also langen und
dementsprechend unübersichtlichen
Kodesequenzen. Das muß kein
Nachteil sein, solange man die
Kodegenerierung einem Compiler
überläßt. Da wir aber mit Assem-
blersprache einsteigen wollen,
kommt uns der HC12 gerade recht.
Fast 200 verschiedene Befehle
machen die Assemblersprache des
HC12 aus - das klingt für den Ein-
steigen nach einer entmutigenden
Menge. Dennoch handelt es sich kei-
neswegs um ein aussichtsloses
Unterfangen, denn die Befehle sind
einerseits in logischen Gruppen
zusammengefaßt, andererseits kom-
men nicht alle Befehle gleicher-
maßen häufig zum Einsatz. Geht
man das Problem schrittweise an,
kann man sich das Befehlsgewusel
nach und nach ganz gut erschließen.
Vom HC11 zum HC12
Besonders einfach haben es bishe- Bild 1. NoICE - ein typischer Vertreter der grafischen BDM-Debugger.
12/2000 Elektor 49
MIKROPROZESSOR
ein Programm in Maschinensprache.
Neue HC12 Befehle Bei Motorola-Prozessoren hat sich
dafür das S-Record-Format etabliert.
MOVB #$0D,$1234
Bei einem solchen S-Record-File han-
Um eine Konstante in eine bestimmte Speicherzelle zu schreiben, mußte man beim HC11
delt es sich um eine Textdatei, die
immer das LDAA-STAA-Spiel spielen. Danach war aber der Wert im Akku weg! Abhilfe
sowohl alle Kodebytes des erzeugten
schaffte eine Umrahmung mit PSHA und PULA. Zum Glück bringt der HC12 den lange
Maschinenprogramms repräsentiert,
ersehnten Move-Befehl mit, der diese Prozedur verkürzt.
als auch die Information, an welche
Adressen die Bestandteile des Pro-
DBNE B,Loop
gramms geladen werden sollen.
Überall Schleifen! Mit dem gezeigten  Decrement and Branch if not equal Befehl ist diese
wichtige Grundstruktur, die man in jedem Assemblerprogramms dutzendweise antrifft, Für den HC12 gibt es bereits eine
ganz einfach zu implementieren!
erkleckliche Anzahl von Assemblern
unterschiedlicher Hersteller. Wer im
LDAA 1,X+
Besitz eines C-Compilers für den
Was wird hier in den Akku geladen? Der Wert, auf den das Indexregister X verweist. Ein
HC12 ist (zum Beispiel dem preis-
alter Hut? Mitnichten, denn nebenbei wird hier X inkrementiert (also um 1 erhöht). Da
günstigen ICC12 von ImageCraft),
kann man auf den alten HC11-Befehl INX fast verzichten. Vor allem, wenn man um 2, 3,
hat diesbezüglich ausgesorgt, denn
4... inkrementieren will!
ein Assembler ist in den Crosscom-
pilern stets enthalten. Man hat also
LBRA Label
die Wahl zwischen Assembler, C
Mit BRA sprang man schon beim HC11 - aber immer zu kurz. LBRA macht Schluß mit dem
8-Bit Sprungbereich. Der Befehl benötigt allerdings auch ein Byte mehr. oder einer Kombination aus beidem.
Einsteigen sollte man auf jeden Fall
EXG D,X
zunächst mit Assemblersprache,
Kennen Sie XGDX? Das hier ist dasselbe. Und der Vorteil? EXG funktioniert mit jeder Regi-
denn nur so sieht man unmittelbar,
sterkombination, sogar 8 und 16 Bit kann man mischen!
wie die Interaktion zwischen Hard-
ware- und Softwarekomponenten
PSHD
des Mikrocontrollers vonstatten
PSHB, PSHA kann man jetzt auch schneller haben. PSHD erledigt die ganzen 16 Bit am
geht. Die so gewonnenen Einblicke
Stück.
kann man gut gebrauchen, wenn
SEX man sich später den Hochsprachen
wurde aufgenommen, damit sich das CPU12 Reference Manual besser verkauft. Den Befehl
widmet. Wer sich auf die Suche nach
 Sign EXtend kann man aber auch in C-Compilern gut gebrauchen.
einem geeigneten Assembler begibt,
wird bald auf den Namen Alfred
Arnold stoßen. Der Autor des Uni-
versalassemblers AS hat den HC12
Steuerregister des Controllers ansprechen. system übertragen. Schließlich soll schon seit 1996 mit im Programm.
Ganz klar wird ein HC11-Programm, das die es vorkommen, daß die selbstge- Zwei Vorteile zeichnen AS beson-
serielle Schnittstelle (SCI) anspricht, auf dem schriebene Software nicht gleich auf ders aus: Er ist hinsichtlich des Pro-
HC12 nicht mehr funktionieren, wenn sich die Anhieb funktioniert. Demzufolge ist zessortyps universell einsetzbar,
Adresse und die Bedeutung der SCI-Steuer- es ratsam, einige Ideen und Hilfs- also auch für den HC11 und eine
register verändert hat. mittel zum Debuggen vorzuhalten. ganze Reihe anderer Mikrocontroller
Der HC12 ist aber keineswegs nur als Am Anfang steht immer der Quell- geeignet. Und er ist frei erhältlich -
schnellerer, kompatibler HC11-Nachfolger text. Um sich Programme auszuden- ein Kriterium, das besonders bei Pri-
zu verstehen. Die neue Controllerfamilie ken, sollte man sich einen guten Pro- vatanwendern Überzeugungskraft
bringt eine Menge zusätzlicher Verbesse- grammiereditor zulegen. Das Krite- besitzt.
rungen, beispielsweise neue Befehle und rium  qualitativ hochwertig ist Das Schreiben von Assemblerpro-
Adressierungsarten. In der nebenstehenden dabei weniger am Preis festzuma- grammen ist sicherlich nicht ganz
Übersicht werden einige wichtige Neue- chen. Man sollte eher darauf achten, einfach, Erfahrung muß man erst in
rungen erläutert. daß man persönlich mit der Soft- der Praxis sammeln. Wer noch gar
ware auch gut zurechtkommt. Gute nichts davon versteht, sollte sich in
Erfahrungen hat der Autor mit PFE den Büchern zum HC11 von Sturm
(Programmers File Editor) gemacht, [1] und Wallrabe [2] informieren. Was
Programmiertools
ein frei erhältliches Tool von Alan man dort über den HC11 lernt, kann
Um den HC12 programmieren zu können, Phillips. man sogleich wieder beim HC12 zur
benötigt man, wie bei jedem anderen Mikro- Anwendung bringen.
prozessor auch, eine Reihe von Hilfsmitteln. Die Bedienung des Assemblers ist
Übersetzer
Das beginnt mit einem PC, auf dem man mit recht trivial - zumindest im Vergleich
einem (Programmier-) Editor Quellprogramme Im nächsten Schritt übergibt man zum Entwerfen der Quelltexte. Der
schreibt und mittels Crossassembler oder - den Quelltext an einen Assembler. Kasten zeigt eine Beispielsequenz in
compiler in Maschinensprache übersetzt. Dieser versucht, im Programm syn- Form einer DOS-Batchdatei, die den
Danach muß man das fertige Programm (Neu- taktische Fehler aufzuspüren. Ist Assembler aufruft, die gewünschte
deutsch: das Executable) auch noch zum Ziel- alles (soweit) fehlerfrei, erhält man Assemblerdatei übergibt und
50 Elektor 12/2000
MIKROPROZESSOR
schließlich (bei AS in einem separa-
ten Schritt) das ladbare S-Record-File Tipps und Tricks beim Programmieren
erzeugt. Die gezeigte Batchdatei
Wenn das Programm endlich fertig ist, aber trotzdem nicht funktioniert, dann ist guter Rat
kann man per Hotkey gleich aus dem
oft teuer. Es gibt aber ein paar besonders häufige Fehler beziehungsweise Probleme. Die
Editor PFE heraus aufrufen, das
fünf wichtigsten Fallen bei der HC12-Programmierung:
sorgt für ein wenig Komfort beim
Programmieren.
COP
Viele Programmierer standen schon kurz vor dem Verzweifeln, wenn der Code im Moni-
Transferierer torprogramm oder mit dem Debugger prima funktionierte, aber schließlich  stand-alone
keinerlei Reaktion mehr von sich gab. Häufige Ursache: Der Watchdog-Timer (COP) ist
Bald kommt der spannende Moment,
nach Reset aktiv! Auch wenn man dieses Feature nicht benutzt, muß man sich darum küm-
in dem wir das fertige Programm mern. Zumindest muß man ihn gleich nach Reset abschalten!
zum ersten Mal starten. Zunächst
Program Counter
aber muß es in den Speicher des
Nach einem Reset holt sich die CPU ein Wort von den Adressen $FFFE und $FFFF. Dieses
Zielsystems geladen werden. Dazu
Wort enthält den Resetvektor und bestimmt, wo die CPU mit der Ausführung von Maschi-
gibt es mehrere Möglichkeiten.
nenbefehlen beginnt. Wenn im eigenen Programm gar nichts laufen will, dann sollte man
Beginnen wir mit der klassischen
sich an die hilfreiche Existenz des Resetvektors schnellstens erinnern!
Monitor-Variante. In diesem Fall
befindet sich auf dem Controllerbo-
Stack Pointer
ard ein Monitorprogramm. Dieses
Der Stack Pointer wird von der CPU bei jedem Unterprogrammaufruf benutzt. In diesem
Stück Firmware belegt einem klei-
RAM-Bereich merkt sich der Controller Daten vorübergehender Lebensdauer. Kommt es
nen Bereich des Zielsystem-Spei-
zu undefinierbaren Abstürzen (insbesondere nach einiger Zeit erfolgreicher Programmier-
chers, etwa im EEPROM der MCU.
bemühungen), dann sollte man den Stack-Bereich einmal kritisch unter die Lupe nehmen.
Schließt man das Zielsystem seriell
Prüfen sollte man: Wird der Stackpointer auf den korrekten RAM-Bereich initialisiert? Gibt
an den PC an, kann man die Start-
es Überschneidungen mit anderen Nutzungen des RAM? Ist der Stackbereich ausreichend
meldung des Monitorprogramms
dimensioniert?
beobachten. Man benötigt hierzu auf
der PC-Seite ein Terminalprogramm,
Interrupts
um ankommende Zeichen auf dem
Interrupts können ein laufendes Programm asynchron, also an einer nahezu beliebigen
Bildschirm darzustellen sowie Tasta-
Stelle unterbrechen. Unschön ist es nur, wenn die Interruptroutine nie wieder zum Haupt-
tureingaben des Benutzers über die programm zurückkehrt. Liegt diese Vermutung nahe, sollte man auf jeden Fall zwei Dinge
serielle Schnittstelle zum Zielsystem sofort prüfen: Endet die Interruptroutine korrekt mit dem Befehl ISR? Und werden lokale
Interruptflags in der Routine korrekt gelöscht? Ohne Freigabe der lokalen Interruptflags
zu senden.
dreht man sich nur im Kreise - der Interrupt ist nach Beendigung der ISR immer noch
Das Terminalprogramm sollte zudem
anhängig und so geht es halt wieder von vorne los...
eine Upload-Funktion haben, um
eine Datei von der Festplatte des
Monitor vs. Interruptvektoren
PCs zum Zielsystem zu übertragen.
Wird auf dem Zielsystem ein Monitorprogramm verwendet, dann  blockiert dieses mei-
Diese Funktion benötigt man zum
stens die am Ende des Adreßraumes liegenden Interruptvektoren. Um diese dennoch
Laden des HC12-Programms in Form
durch das Anwenderprogramm nutzen zu können, ist es üblich, daß der Monitor die (selbst
einer S-Record-Datei. In der Praxis
nicht besetzten) Vektoren in einen RAM-Bereich leitet. Dort kann der Anwender so
läuft das wie folgt ab: Zunächst star-
genannte Pseudo-Interruptvektoren eintragen, die aus einem 3-Byte Sprungbefehl der Art
tet das Monitorprogramm und man
JMP Addr bestehen. HC11-Kennern wird das Verfahren vertraut vorkommen, dort kam es
sieht im Terminalfenster die
beim Special Bootstrap Mode zum Einsatz.
Begrüßungsmeldung. Nun kann man
über die Tastatur den Ladebefehl
Aufruf der Assembler AS
eintippen, beispielsweise
L. Daraufhin meldet das
@echo off
Monitorprogramm die Bereitschaft,
rem
jetzt eine S-Record-Datei entgegen-
rem -L erzeugt xxx.lst
zunehmen. Man startet daraufhin im
rem -E erzeugt xxx.log (Fehlerliste)
Terminalprogramm die Upload-Funk-
rem
tion, wählt die gewünschte Datei
c:\as\bin\as.exe %1.a -L -E -g noice
aus und der PC sendet diese zum
rem
Zielsystem. Bei Erreichen des Datei-
rem -F Moto legt S-Record Output fest
endes meldet sich der Monitor mit
rem +5 entfernt S5-Records
dem Systemprompt zurück - die Pro-
gramm befindet sich nun im Spei- rem -r dehnt das Image Fenster aus
cher des HC12-Systems. rem
Wichtig bei der Auswahl eines
c:\as\bin\p2hex %1.p %1.s19 -F Moto +5 -r $0000-$ffff
geeigneten Terminalprogramms ist
if exist %1.p del %1.p
lediglich, daß auch Timingbedingun-
gen des Zielsystems berücksichtigt
12/2000 Elektor 51
MIKROPROZESSOR
Beispielprogramm serielle Schnittstelle
;====================================================================;
; File: SCI12.A
; Func: Serial-I/O via the Serial Communication Interface (SCI0)
;====================================================================;
; CPU 68HC12
; include  reghc12.inc
SC0BD equ SC0BDH
SC0CR equ SC0CR1
; Func: Initialize SCI (9600 Baud, 8N1, Polling Mode)
; Args: -
; Retn: -
; Dest: D
;
initSCI ldd #26 ; 19200 Bd
std SC0BD
ldd #$000c ; 8N1, TE + RE
std SC0CR ; A:B -> SC0CR1:SC0CR2
rts
; Func: Test if any character available (received)
; Args: -
; Retn: A = 0 (Z = 1) -> no char
; A <> 0 (Z = 0) -> char available
; Dest: -
;
testSCI ldaa SC0SR1 ; read status
anda #$20 ; receive data reg full?
rts ; returns 0, if no data
; Func: Get character from SCI (wait for)
; Args: -
; Retn: A = char
; Dest: -
;
getSCI brclr SC0SR1,$20,getSCI ; receive data reg full?
ldaa SC0DRL ; read out data
rts
; Func: Send a character via SCI
; Args: A = char
; Retn: -
; Dest: -
;
putSCI brclr SC0SR1,$80,putSCI ; transmit data reg empty?
staa SC0DRL ; send data
rts
52 Elektor 12/2000
MIKROPROZESSOR
werden können. Die Übertragungs- ein BDM-Pod geschaltet werden weiteres Fenster den Inhalt des Programm-
geschwindigkeit (Baudrate) einzu- muß. Dieses BDM-Pod übersetzt den speichers in disassemblierter Form an. Man
stellen ist sicherlich kein Problem. Datenstrom hinsichtlich Inhalt, Sig- kann in diesem Fenster Unterbrechungs-
Zusätzlich sollte es aber möglich nalpegel und Timing von BDM etwa punkte eintragen und den Programmverlauf
sein, eine Wartefunktion aktivieren auf RS232 und umgekehrt. im Einzelschrittbetrieb verfolgen (Bild 1).
zu können. Erfolgt der Programm- Über BDM arbeitende Debugginglö- Soviel Komfort hat natürlich seinen Preis. Für
transfer nämlich in Speicherbereiche sungen gibt es in zwei Ausprägun- grafische Debugging-Tools der Profiliga (zum
mit einer signifikanten Program- gen. Da wäre zunächst der komman- Beispiel Cosmics ZAP) muß man einige tau-
mierzeit, so muß das Terminalpro- dozeilenorientierte Ansatz. Dabei send Mark einplanen. Natürlich ist dies
gramm nach jeder übertragenen verwendet man ein Terminalpro- durchaus gerechtfertigt, wenn man auf eine
Zeile auf eine Quittung vom Monitor gramm, um das Pod nebst ange- möglichst große Zahl leistungsfähiger Pro-
warten. Somit wird sichergestellt, schlossenem Zielsystem zu steuern. grammfeatures zurückgreifen möchte. Sind
daß die erforderliche Programmier- Das ganze ist der oben beschriebe- die Ansprüche etwas moderater, kann man
zeit (so zum Beispiel 10 ms je nen Monitorlösung sehr ähnlich, mit aber auch für wesentlich kleinere Beträge
EEPROM-Zelle) nicht durch Eintref- einem entscheidenden Unterschied: interessante Debugginglösungen für den
fen der nächsten S-Record-Zeile vor- Die Monitorfirmware läuft auf dem HC12 ausmachen. Gute Erfahrungen hat der
zeitig unterbrochen wird. Diese Pod ab und nicht auf dem Zielsy- Autor unter anderem mit StingRay (Autor: Sid
Anforderung erfüllt das gute alte stem, belegt also auch keine Res- Price) und mit John Hartman s NoICE Debug-
TERMINAL.EXE aus Windows 3.1. sourcen des Zielsystems! Da man ger gemacht.
Wer es etwas moderner mag, kann sich hinsichtlich der Kodegröße nicht
sich Uwe Altenburgs kostenloses an Beschränkungen des Zielsystems
Fazit
Terminalprogramm OC-Console von halten muß, kann man sehr lei-
der Elektronikladen-Website stungsfähige BDM-basierte Monitor- Mit dem HC12 in die Programmierung einzu-
(http://www.elektronikladen.de) programme realisieren. steigen lohnt sich in zweierlei Hinsicht. Die
laden. Ein typischer Vertreter dieser Art 16-Bit-Familie von Motorola bietet eine solide
BDM-Tools ist das B32EVB von Leistung, ohne den Programmierer vor allzu
Motorola. Es handelt sich hierbei um hohe Hürden hinsichtlich der Komplexität des
Hintertür
eine handflächengroße Platine mit Controllers zu stellen. Außerdem bekommt
So funktioniert also der Programm- einem RS232-Anschluß (Sub-D9) und man alle erdenklichen Softwaretools auch im
transfer, wenn sich bereits ein Moni- einem BDM12-Ausgang in Form des Bereich der Freeware, Shareware bezie-
torprogramm auf dem Zielsystem standardisierten 6-poligen Pfosten- hungsweise Low-Price-Ware. Lediglich die
befindet. Findige Programmierer verbinders. Witzigerweise kommt Kosten für eine Controllerplatine muß man
werden nun sicherlich fragen, wie auf dem Board selbst ein HC12 zum einkalkulieren. Für den  ersthaften Anwen-
man den Monitor selbst in den HC12 Einsatz (ein HC912B32) - relevant für der sollte ein BDM-Debugger zur Ausstattung
lädt. Diese Frage soll nicht unbeant- die Funktion als BDM-Pod ist diese gehören.
wortet bleiben. Tatsache jedoch nicht. Zwar gibt es Links zu der im Beitrag genannten HC12-Soft-
Motorola hat sich für den HC12 eine in letzter Zeit häufig Lieferengpässe ware und eine Vielzahl weiterer Informatio-
besondere Hintertür einfallen lassen. bei diesem recht preiswerten nen und Ressourcen zum HC12 findet man
Über diese Hintertür kann man sich Motorola-Tool, man kann jedoch auch auf der Website des Autors
Zugang zu allen Speicheradressen auf den ZWERG12 (Elektronikladen) http://hc12web.de
verschaffen. Man kann gewisser- ausweichen. (000077-2)rg
maßen in den Controller hinein-
schauen. Aber damit nicht genug: Es
Fensterwelt
ist sogar möglich, aktiv Speicherzel-
len zu verändern, die CPU anzuhal- Die zweite Kategorie BDM-Tools sind
ten, die Prozessorregister zu modifi- Debugger mit einer grafischen
zieren und Controllerprogramme im Benutzeroberfläche. Sie kommen
Einzelschrittbetrieb abzuarbeiten. meist als Windows-basierte Soft-
Die Betriebsart des HC12 zur Nut- ware daher und nutzen ein seriell
zung dieser Hintertür heißt Backgro- oder parallel angeschlossenes Pod
Literatur:
und Debug Mode, kurz BDM. Die zur Kommunikation mit der Zielhard-
Schnittstelle dazu - das BDM-Inter- ware. Der grafische Ansatz erlaubt
[1] Matthias Sturm: Elektronik-Aufgaben III:
face - besteht aus einer einzigen Sig- es natürlich viel besser, eine Vielzahl
Mikrorechentechnik,
nalleitung. Sie trägt die Bezeichnung von Informationen gleichzeitig anzu-
Fachbuchverlag Leipzig 1994
BKGD und arbeitet bidirektional. Das zeigen und zugleich die Einzelheiten
Signalspiel auf dem BDM-Interface der BDM-Steuerung vor dem Benut-
[2] Arnulf Wallrabe: Mikrocontroller-Praxis, Ein-
ist recht komplex (siehe 1. Teil des zer zu verbergen. Man kann sich in
stieg mit dem MC68HC11;
Artikels und die Veröffentlichung in der Regel Speicherbereiche als Hex-
Hanser, München 1997
[3]) und vor allen Dingen schnell. dump anzeigen lassen, in einem
Das ist auch der Grund dafür, daß separaten Fensterbereich wird der
[3] Thamm, Sibigtroth: Nabelschnur - Single-
zwischen Entwicklungs-PC und aktuelle Status der Prozessorregister
wire Background Debug Mode Interface des
BDM-Interface des Zielsystems stets dargestellt. Darüber hinaus zeigt ein
68HC12, ELRAD 11/1996 S. 40ff.
12/2000 Elektor 53


Wyszukiwarka

Podobne podstrony:
Recognizing 16 bit CPUs and checking for 32 bit ones
32 bit forms of 16 bit instructions
doc0937 16 Bit Arithmetics on tinyAVR and megaAVR devices
16 Komputerowo zintegrowane wytwarzanie II
Servo II Acra [WE] BQ34 16 1
ćw 16 sprawozdanie II
Tom II rozdziały 16 20
16 Sprawozdanie Z Ii
Servo II Acra [WE] BQ34 16 1m
Alchemia II Rozdział 8
Do W cyrkulacja oceaniczna II rok
Test II III etap VIII OWoUE
Recht 5 BVerfG II

więcej podobnych podstron