ERFOLGREICH STARTEN

MIT DEM SIEMENS C167-STARTERKIT UND DEM SOFTWARE-ENTWICKLUNGSSYSTEM VON KEIL

© 1998 by Walter Waldner, HTL Klagenfurt, Mössingerstraße 25

  1. Einleitung

Mit dem Siemens C167-Starterkit erhält man alles, um die Welt der 16-bit-Mikrocontroller erforschen zu können. Das Kit enthält:

Dieser Artikel beschreibt, wie Sie ihre ersten einfachen Programme auf der Starterkit-Hardware zum Laufen bringen - und das, ohne vorher die Assemblersprache des Prozessors lernen zu müssen. Heute werden Mikrocontroller fast ausschließlich in Hochsprache programmiert. Die hardware-nahe Programmiersprache C hat sich in diesem Bereich als sehr geeignet erwiesen und auch für die Siemens C166-Familie gibt es eine Reihe von leistungsfähigen Software-Entwicklungsumgebungen für C. Auf der Starterkit-CD-ROM sind einige Demoversionen dieser Werkzeuge enthalten, die unterschiedliche Einschränkungen gegenüber den (meist recht teuren) Vollversionen aufweisen. Meine Wahl fiel auf die Toolkette der Firma KEIL - ein professionelles Entwicklungssystem mit Assembler, Compiler, Linker/Locator, Intel-Hex-Konverter und Debugger/Simulator. Die KEIL-Demoversion erlaubt es, Programme bis zu 4 KB Codegröße zu übersetzen, zu linken und in die Ziel-Hardware zu laden, was für viele Experimente zum Kennenlernen aller Komponenten des C167-Microcontrollers völlig ausreichend ist.

Aller Anfang ist schwer - das gilt auch für die erste Inbetriebnahme des Starterkits. Zunächst geht es darum, auf der umfangreichen CD-ROM die richtigen Verzeichnisse und Dateien zu finden und die Keil-Software auf dem PC zu installieren. Danach sind Compiler, Linker und Debugger zu konfigurieren. Schließlich gibt es noch verschiedene Möglichkeiten, das Programm auf dem kitCon167-Board zum Laufen zu bringen. Dieses Dokument soll Ihnen helfen, sich in dieser Vielfalt zurecht zu finden und nach Ihren ersten Experimenten werden Sie wahrscheinlich meine Meinung teilen, daß das C167-Starterkit ein ganz fantastisches Paket ist, mit dem man hervorragend arbeiten kann, das leistungsfähig und doch einfach zu programmieren ist, wenn man weiß, wie.

  1. Erforderliche Vorkenntnisse

Zunächst sollten Sie Teile der Dokumentationen lesen, die Sie mit dem Starter-Kit erhalten haben:

  1. Die Software-Entwicklungsumgebung von KEIL ("KEIL Tool-Kette") PK166

Die KEIL-Tool-Kette (Professional Developers Kit PK166) stellt ein vollständiges Entwicklungssystem für alle Mikrocontroller der C166-Familie dar. Sie enthält unter anderem einen C166-Assembler, einen für den C167-Microcontroller zugeschnittenen und optimierten C-Compiler, einen Linker / Locater und einen Simulator / Debugger. Der Anwender arbeitet dabei (unter Windows 3.x / 95 /NT) mit einer integrierten Entwicklungsumgebung (m Vision), die das Projektmanagement übernimmt und die erforderlichen Schritte vom Source-Code bis zur lauffähigen Version weitgehend automatisiert, nachdem die Oberfläche entsprechend konfiguriert wurde.

Die Source-Files können in Assembler- oder C-Code erstellt werden. Die Übersetzung in den C-167-Objectcode erfolgt durch den Assembler A166 bzw. durch den ANSI-C-Compiler C166. Der Übersetzungsvorgang wird in einer List-Datei (Extension .LST) dokumentiert. Die so erzeugten Object-Files (relocateable) können nicht direkt ausgeführt werden. Der L166-Linker/Locater verknüpft die Object-Dateien und Bibliotheksfunktionen, löst Symbole auf und erzeugt absolute Object-Dateien (mit absoluten Adressen innerhalb des 16 MB großen Adreßraum des C167-Microcontrollers). Das Protokoll des Link/Locator-Laufes kann in der Map-Datei (Extension .M66) betrachtet werden. Die Object-Datei kann anschießend mit dem dScope-Debugger (und einem Monitorprogramm, das auf dem C167 läuft) in das SRAM geladen und ausgeführt werden. Alternativ läßt sich ein Programm aber auch in das Flash-Memory laden. Dazu verwendet man das Tool FLASHT, das als Eingabeformat allerdings eine intel-Hex-Datei (ASCII-Format) erfordert. Diese Umwandlung erledigt das Programm OH166.

  1. Wohin mit dem Programm ?

Eine ganz wichtige Frage, die den Programmentwicklungsprozeß wesentlich beeinflußt, ist die Entscheidung, wohin das vom Anwender entwickelte Programm gespeichert werden soll. Das kitCON bietet ein SRAM und ein Flash-Memory an. Dementsprechend gibt es im wesentlichen zwei Möglichkeiten. Das Laden des Anwendungsprogramms auf die Ziel-Hardware erfolgt dabei stets über die serielle Leitung. Das kitCON-167 Board wird mit dem seriellen Kabel (liegt dem Starterkit bei) mit der COM-Schnittstelle des PCs verbunden. Am Evaluation-Board wird das Kabel an den Stecker neben dem Reset-Schalter angeschlossen. Ein Tip: wird das Kabel zuerst mit der seriellen Schnittstelle des PCs verbunden, paßt das andere Ende des Kabels ohnehin nur in die eine der beiden Anschlussbuchsen des kitCON.

4.1. Möglichkeit 1 - RAM:

FLASH

 

RAM

     

unbenutzt

 

Monitor

   

Anwender-
Programm und

Daten

Während der Entwicklungsphase einer Anwendung, insbesondere aber auch in der Ausbildung (Schulbetrieb), ist es sinnvoll, diese Variante zu wählen, da Programmänderungen sofort ins SRAM geschrieben werden können. Eine wesentliche Rolle spielt dabei der Monitor. Der Monitor ist Bestandteil der Toolkette und wird mit dem Keil-Simulator-Debugger dScope und dem in den C167-Microcontroller integrierten Bootstrap-Loader (über die serielle Verbindung) in das RAM des Phytec-Boards geladen. Diese Software erlaubt es, anschließend unser Anwendungsprogramm in das RAM zu laden und zu starten. Darüber hinaus kommuniziert das Monitor-Programm mit der dScope-Oberfläche und ermöglicht so ein sehr komfortables Debuggen unserer Software (Einzelschritt-Abarbeitung, Betrachten von Speicherinhalten, Anzeige von Special Function Registern und vieles mehr).

Ist unser Programm fertig entwickelt, kann es in das Flash-Memory programmiert werden. Das ist Möglichkeit 2 mit folgender Aufteilung.

4.2. Möglichkeit 2 - FLASH Memory:

FLASH

 

RAM

     

Anwender-

Programm

 

Variable

Konstante Daten

   

Diese Variante hat natürlich den Vorteil, daß unser Programm nun permanent gespeichert ist und automatisch startet, sobald das kitCon-Board mit Spannung versorgt wird oder der RESET-Knopf gedrückt wird. Das Programmieren des Flash-EEPROMs wird nicht direkt durch das Keil-Entwicklungssystem unterstützt. Dazu muß das DOS-Programm FLASHT.EXE verwendet werden, das sich ebenfalls auf der Starterkit-CD-ROM befindet. Da der Flash-Speicher etwa 100.000 Schreibzyklen verträgt, kann dennoch bei Bedarf jederzeit eine Neuprogrammierung erfolgen.

Schließlich gibt es noch eine Variante zur Möglichkeit 1:

4.3. Möglichkeit 3 - FLASH / RAM:

FLASH

 

SRAM

     

Monitor

 

Anwender-

Programm und Daten

In dieser Variante wird das Monitor-Programm in das Flash-Memory geladen und steht somit ohne Neuladen nach jeder Spannungsunterbrechung zur Verfügung. Da der Monitor aber ein relativ kleines Programm ist (ca 5 KB), das schnell über die serielle Schnittstelle übertragen wird, bringt dies nur geringe Geschwindigkeitsvorteile. Will man allerdings das RAM auf Grund großer Datenmengen bis zum letzten Byte nutzen, ist das Laden des Monitors in den Flash-Speicher eine sinnvolle Methode.

Zu den verschiedenen Methoden des Arbeitens und Konfigurierens des Monitors habe ich ein eigenes Dokument erstellt. Ich werde hier daher auf die verschiedenen Varianten nicht mehr näher eingehen, sondern beschreibe den direktesten und einfachsten Weg zum ersten lauffähigen C167-Programm.

  1. Installation der KEIL-Toolkette

Zur Installation legen Sie die Starter-Kit-CD-ROM ein und starten die Datei SETUP.EXE im Verzeichnis

X:\CDROM\3RDTOOLS\KEIL\C166

Während der Installation werden Sie nach einem Ziel-Verzeichnis gefragt. Für die folgenden Ausführungen wird angenommen, daß Sie die Standardvorgabe eingeben:

C:\C166EVAL

Das gesamte System benötigt etwa 6.5 MB auf Ihrer Festplatte. Bei diesem Entwicklungssystem handelt es sich um eine Demoversion, die den vollen Leistungsumfang anbietet - nur die Codegröße der Programme ist mit 4 KB beschränkt, was für das Kennenlernen des C167-Mikrocontrollers eine wenig relevante Einschränkung ist.

Nach der Installation des Demo-Pakets müssen nun noch die richtigen Dateien für den Monitor in das Verzeichnis BIN kopiert werden. Der Monitor ist jenes Programm, das in den Speicher des Evaluation-Boards geladen wird und das Laden von Anwendungsprogrammen, sowie das Debuggen dieser Programme ermöglicht, indem es über die serielle Schnittstelle mit dem PC kommuniziert (Variante 1, wie in 4.1. beschrieben). Auf der CD-ROM findet man an vielen Stellen Monitor-Programme, aber nur eines funktioniert mit dem Phytec kitCON-Board. Und diese Dateien befinden sich etwas versteckt (und ohne entsprechend Hinweise) im Verzeichnis

CDROM\STARTKIT\SK_167\MONITOR\KEIL

Kopieren Sie aus diesem Verzeichnis die beiden Dateien BOOT und MONITOR in das BIN-Verzeichnis des KEIL-Software-Pakets. Falls Sie bei der Installation die Default-Vorgabe übernommen haben, ist dies das Verzeichnis

C:\C166EVAL\BIN

Verbinden Sie nun eine serielle Schnittstelle des PCs (z.B. COM1) mit der Buchse P1 des kitCON-167-Boards. Ein Tip: schließen Sie das Kabel zuerst an den PC, dann paßt es am kitCON-Board ohnehin nur in die Buchse P1.

Die serielle Verbindung zwischen PC und dem C167-Board erfüllt mehrere Aufgaben:

Wir wollen nun anhand eines einfachen Beispiels die Schritte vom Source-Code bis zum Ausführen des Anwendungsprogramms auf der Zielhardware zeigen. Wie unter 4.1 und 4.2 beschrieben, gibt es zwei grundsätzlich verschiedene Möglichkeiten, die beide hier dargestellt werden.

  1. LED-Lauflicht - das erste C167-Projekt

6.1. Die Schaltung

Ein Mikrocontroller-Board ohne Peripherie (Sensorik, Ein-/Ausgabekomonenten) macht wenig Sinn. In einem geplanten, weiterführenden Artikel werde ich ein einfaches und preiswertes I/O-Board zum Nachbauen vorstellen, das unter anderem über Leuchtdioden mit Treiberbausteinen, Schalter und 7-Segment-Anzeigen verfügt. Damit sind viele interessante Experimente möglich. Für unser erstes Programm nehmen wir an, daß wir 8 Leuchtdioden an den Port 2 des kitCON/C167 angeschlossen haben. Wir werden ein Lauflicht-Programm schreiben.

Eine mögliche Schaltung wäre etwa:

Diese Schaltung verwendet den CMOS-Baustein 74HC540 (8fach invertierender Buffer/Line Driver, Tristate-Ausgänge) zur Ansteuerung der Leuchtdioden. Die Pins des C167 erlauben nur einen Sink-/Source-Strom von etwa 1 mA, was für Standard-LEDs viel zu wenig ist. Die Ausgänge des 74HC540 hingegen können mit maximal 35 mA belastet werden. Der Strom durch die Leuchtdioden wird durch Widerstände von jeweils 220 Ohm auf ca. 15 mA beschränkt.

6.2. Die m Vision-Oberfläche

Das Lauflicht-Programm wird mit der Sprache C unter der m Vision-Oberfläche von KEIL entwickelt. Starten Sie nun das Programm m Vision. Das Setup-Programm sollte eine Programmgruppe eingerichtet haben (unter Windows 95 im Start-Menü). Ansonsten finden Sie m Vision unter dem Dateinamen UVW166E.EXE im Verzeichnis C:\C166EVAL\BIN.

Wie andere Programmierumgebung auch, verwaltet m Vision Projekte. Zu einem Projekt gehören sämtliche Source-Dateien, Bibliotheken und Compiler/Linker-Einstellungen. Aus diesen Projekt-Elementen erstellt m Vision ein lauffähiges C167-Programm, wobei die in 3 beschriebenen Stufen weitgehend automatisiert durchlaufen werden. Auch den dScope-Simulator/Debugger können wir über die m Vision-Oberfläche aufrufen.

Unser Lauflicht-Projekt wird nur aus einer einzigen Quell-Datei (einem C-Programm) bestehen.

Wählen Sie im Menü: FILE - NEW. Ein Editor-Fenster öffnet sich. Speichern Sie die noch leere Datei gleich einmal mit der Extension .C ab, um den Syntax-Check und die Farbkennung der C-Sprachelemente zu aktivieren. Für die weiteren Ausführungen nehmen wir an, daß Sie der Datei den Namen LLICHT.C gegeben haben und unter C:\166EVAL ein Verzeichnis PROJECTS angelegt haben, in das LLICHT.C gespeichert wird.

6.3. Der C-Source-Code

Hier ist nun der Source-Code für unser Lauflicht-Programm:

Sehen wir uns nun den Source-Code und die Besonderheiten des Keil-Compilers an:

Alle SFRs (special function registers), aber auch Bitgruppen oder einzelne Bits der Register können über die Namen angesprochen werden, die im User-Manual des C167 definiert sind. Dazu ist lediglich die Header-Datei reg167.h mit der #include-Anweisung zu laden. Der Keil-C-Compiler entspricht dem ANSI-Sprachumfang. Jeder Programmierer mit C-Erfahrung wird sich schnell zurechtfinden.

Die 8 Leuchtdioden sind für unser Experiment mit den Pins 0 bis 7 (Low-Byte) des 16-bit-Ports P2 verbunden. Diese Pins sind zunächst als Ausgänge zu definieren. Dazu wird in das Direction-Register DP2 der hexadezimale Wert 0x00FF geschrieben (ein 1-Wert auf der Bitposition b schaltet das Pin b des Ports als Ausgang). Das ODP2-Register wird auf 0 gesetzt. Damit werden die als Ausgang definierten Pins des Ports 2 in den push-pull-Modus geschalten (1-Werte würden den open-drain-Modus wählen). Die beiden for-Schleifen erzeugen für die Variable x der Reihe nach die Bit-Kombinationen 00000001, 00000010, 00000100, .., 10000000, 01000000 ... 00000010. Da ein 1-Wert einer leuchtenden Diode entspricht, erhalten wir so den gewünschten "Lauflicht"-Effekt. Durch die Anweisung P2 = x wird der Wert von x in das Port2-Register geschrieben und die entsprechenden Pegel erscheinen am Ausgang.

Nach jedem Schreibvorgang müssen wir eine Warteschleife einbauen, um den Laufeffekt überhaupt beobachten zu können. Wir könnten dies etwa durch eine for-Schleife der Art
(for y=0; y<=30000; y++);

erreichen. Viel attraktiver ist es allerdings, einen der zahlreichen Timer des C167 dafür zu verwenden. Für unser Beispiel setzen wir den Timer T3 ein. Durch Einschreiben eines bestimmten Wertes in das T3CON-Register (Timer 3 configuration register) können wir die Arbeitsweise von T3 festlegen. Lesen Sie dazu im User-Manual das Kapitel 9 (General Purpose Timer Units). T3CON = 0x0007 gibt an, daß das Zählregister T3 mit der durch 1024 geteilten internen Taktfrequenz der C167-CPU (20 MHz) angesteuert wird und aufwärts zählen soll (siehe Seite 9-5 im User-Manual).

Das Unterprogramm warten(unsigned int w) setzt das Zählregister T3 auf 0 und startet anschließend den Zählvorgang, indem das Run-Bit (T3R) auf 1 gesetzt wird. Die while-Schleife schafft eine Verzögerung, bis T3 den Wert des Parameters w überschritten hat. Anschließend wird der Timer gestoppt (T3R = 0). T3R ist ein Beispiel für den Zugriff auf ein einzelnes Bit eines 16-bit-Registers. Ein Blick in reg167.h zeigt, wie man solche symbolische Namen vereinbaren kann:

sbit T3R = T3CON^6;

Mit dem Datentyp sbit ist es möglich, einzelnen Bits eines SFR einen symbolischen Namen zu geben. User-Manual Seite 9-3 zeigt die Bitzuordnungen für das T3CON-Register. T3R ist das Bit 6 dieses 16-Bit-Speichers.

Damit ist unser erstes Keil-Programm hinreichend beschrieben. Wir speichern das Programm mit FILE - SAVE ab (den Namen LLICHT.C haben wir ja bereits vergeben).

6.4. Definition eines Projekts

Bevor wir das Programm nun erfolgreich übersetzen und starten können, muß zunächst ein PROJEKT definiert werden. Wie in anderen Programmier-Umgebungen wird auch im Keil-System dabei eine .PRJ-Datei erstellt, die Informationen darüber enthält, welche Quell-Dateien (Assembler und/oder C) zum Projekt gehören und welche Einstellungen für den Compiler und Linker/Locater beim Erstellen des lauffähigen Programms verwendet werden sollen.

Wählen Sie im Menü den Punkt "Project - New Project". Geben Sie dem Projekt den Namen LLICHT.PRJ und speichern Sie diese (wie auch LLICHT.C) in das Verzeichnis C:\C166EVAL\PROJECTS. In der nun erscheinenden Dialogbox klicken Sie auf "Add". In diese Liste tragen wir alle Dateien ein, die zu diesem Software-Projekt gehören. In unserem Fall ist dies nur das C-Source-Programm LLICHT.C. Achten Sie bitte darauf, daß das Feld "Include in Link/Lib" angekreuzt ist. Da unser einfaches Beispiel keine weiteren Quelldateien benötigt, drücken wir nun den Knopf "Save".

6.4.1. Compiler-Optionen

Nun müssen die Einstellungen für den C-Compiler vorgenommen werden. Wählen Sie im Menü "Options - C166 Compiler". Der Reihe nach wählen wir jetzt die 5 Tabs "Listing", "Object", "Memory", "PEC", "Misc" an.

Unter "Listing" können Sie Parameter für die Listing-Datei angeben, die vom Compiler erzeugt wird. Für unser Projekt würde diese Datei LLICHT.LST heißen. Ein Blick in diese Datei offenbart, was der Compiler aus unserem Source-Programm macht. Als Einsteiger können Sie diese Datei und auch die Einstellungen getrost ignorieren.

Wichtiger ist schon die nächste Dialogbox "Object". Klicken Sie "Include debug information" und "Enable 80C167 instructions" an. Auf diesem Formular wird allgemein die Object-Code-Generierung gesteuert. Auch können Preferenzen für die Code-Optimierung gewählt werden.

Unter "Memory" wird das Speichermodell ausgewählt, das beim Compilieren und Linken verwendet werden soll.

Als Speichermodell wählen wir "SMALL", was bedeutet, daß der Code unseres Programmes nicht größer als 64 KB sein darf und alle Programmverzweigungen (Unterprogramm-Aufrufe, bedingte und unbedingte Sprünge) innerhalb des 64 KB-Segmentes durchgeführt werden. Da die Demo-Version ohnehin ein 4 KB-Limit vorgibt, sind andere Speichermodelle nicht sinnvoll. Wählen Sie die Optionen, wie im obigen Screenshot dieser Dialogbox ersichtlich.

Die Dialogboxen "PEC" und "Misc" sind für unser erstes Beispielprogramm irrelevant. Sie können also jetzt den Knopf "OK" anklicken und die Einstellung der Compiler-Optionen beenden.

6.4.2. Linker-Optionen

Nun folgen die Einstellungen für den 166-Linker/Locater. Der Linker / Locater fügt die vom Compiler übersetzten Dateien und die Bibliotheksfunktionen zusammen und löst Symbole (Namen von Variablen, Konstanten, Unterprogrammen) in Adressen auf. Dazu muß er insbesondere Informationen darüber haben, in welche Speicherbereiche Code und Daten gelegt werden dürfen.

Wählen Sie im Menü den Punkt "Options - L166 Linker". Es erscheint eine Dialogbox mit den Tabs "Listing", "Linking", "Sections", "Location", "Classes", "Add'l" und "Files".

Das Formular "Listing" erlaubt die Angabe von Optionen für die vom Linker erzeugte Mapping-Datei. Die Voreinstellungen (siehe Screenshot) passen für unser Vorhaben.

Die folgende Seite ist Link-Optionen und Debug-Informationen gewidmet. Die Standardvorgaben laut Screenshot sollten unverändert übernommen werden.

Die Seite "Sections" können Sie für unser Beispiel leer lassen.

Nun folgt die Seite "Location". In der Zeile "Reserve 1" ist einzugeben:

08h-0Bh, 0ACh-0AFh

Diese Adressbereiche werden dadurch reserviert. Es handelt sich um Bereiche der Interrupt-Vektor-Tabelle. Das Monitor-Programm verwendet den NMI-Interrupt und den Receive-Interrupt der seriellen Schnittstelle. Aus diesem Grund dürfen diese Adressen nicht für den Link / Locate - Vorgang unseres Programmes verwendet werden.

Die nächste Seite "Classes" definiert die Adressbereiche für den Programm-Code (NCODE), die initialisierten und nicht-initialisierten Daten (NDATA0 und NDATA), sowie für die Konstanten (NCONST). Diese Angaben werden vom Linker verwendet, wenn dieser Symbole in absolute Adressen wandelt.

ACHTUNG: Die Eintragungen auf dieser Seite hängen davon ab, ob das Programm mit dScope/Monitor in das SRAM oder mit FLASHT in das Flash-Memory geladen werden soll.

Für die in 4.1. beschriebene Möglichkeit 1 (Programm wird vom Debugger in das SRAM geladen) müssen folgende Zeilen eingetragen werden:

NCODE (0x0000-0x9FFF)

NDATA (0x4000-0x7FFF)

NDATA0 (0x4000-0x7FFF)

NCONST (0x0000-0x3FFF)

Für nähere Informationen verweise ich auf meinen Artikel zum KEIL-Monitor [1].

Die Einstellungen für das Laden eines Anwendungsprogramms in den Flash-Speicher beschreiben wir später (siehe Kapitel 8).

Damit sind die Linker-Optionen vollständig festgelegt.

6.4.3. Weitere Einstellungen

Unter dem Menüpunkt "Options - OH166 Object-Hex Converter" können Sie einstellen, daß der Build-Vorgang neben dem absoluten Object-File auch ein Intel-Hex-File generiert. Diese Hex-Datei brauchen Sie allerdings nur dann, wenn Sie Ihr Anwendungsprogramm in das Flash-Memory des Phytec-Boards laden möchten. Klicken Sie in diesem Fall als "Output File Format" die Option "Intel Hex-86" an. Außerdem muß unter "Options - Make ..." auf der Seite mit dem Tab "After Compile" die Option "Run L166 Linker and OH166" aktiviert werden.

6.4.4. Build Project

Nun kommen wir zum spannenden Augenblick. Das Keil-System ist bereit, unser Projekt in ein lauffähiges Programm zu übersetzen. Klicken Sie dazu den Menüpunkt "Project - Build Project" an. Assembler, Compiler, Linker / Locater werden automatisch aufgerufen und die Ausgabe-Dateien werden generiert. In unserem Fall sind das die Dateien

LLICHT.OBJ Object-Datei zum C-Sourceprogramm

LLICHT.LST List-Datei (für den Compiler-Lauf)

LLICHT die absolute Object-Datei

LLICHT.M66 Linker-Map-Datei

Eventuell wird auch LLICHT.H86 (die Intel-Hex-86-Datei) generiert (gemäß Abschnitt 6.4.3).

Beachten Sie bitte: die absolute Object-Datei, die wir nun anschließend mit Hilfe des Monitors in die Zielhardware laden werden, hat keine File-Extension.

  1. Der Simulator/Debugger dScope/tScope

Ein sehr interessantes, umfangreiches (aber auch komplexes) Tool in der Keil-Software-Kette ist der Simulator / Debugger (dScope).

Starten Sie das Programm durch die Auswahl des Menüpunktes "Run dScope Debugger" (auf der Festplatte heißt das Programm DSW166.EXE und es befindet sich im Verzeichnis C:\C166EVAL\BIN). Mit dScope können Sie Ihr Anwendungsprogramm entweder am PC simulieren oder aber über ein Monitorprogramm in die Zielhardware laden und die üblichen Funktionen eines Debuggers verwenden. Dazu gehören:

Wir werden uns hier auf das Arbeiten mit dScope als Debugger für das Programm in der Zielhardware beschränken (in dieser Form heißt der Debugger tScope).

Der Menü-Punkt "Optionen" enthält weitere Einstellmöglichkeiten. Da wir in unserem Projekt auch eine Assembler-Datei haben (die Startup-Datei STARTPHY.A66), sollten Sie unter "Options - A166 Assembler" auf der Seite mit dem Tab "Object" das Kästchen "Enable 80C167 Instructions" aktivieren.

  1. Monitor und Anwendungsprogramm in die Zielhardware laden (SRAM)

Vergewissern Sie sich, daß Sie das Phytec kitCON-Board mit dem seriellen Kabel, das dem Starterkit beiliegt, verbunden wurde. Hinter der Steckerbuchse befinden sich auf dem Board eine Reihe von Jumper. Die Pins 1+2 des Jumpers JP2 müssen für die folgenden Aktionen (mit dem roten Stecker) kurzgeschlossen werden. Drücken Sie anschließend die Reset-Taste des kitCON-Boards. Damit wird der Bootstrap-Modus aktiviert. Der Bootstrap-Modus erlaubt über eine fest in den C167 programmierte Codesequenz das Laden von 32 Byte Programmcode. Dieser 32 Byte Code kann dann weitere Programmteile laden.

Der tScope -Debugger benutzt den Bootstrap-Mechanismus, um das Monitorprogramm in das SRAM des Phytec-Boards zu laden. Zunächst wird über die C167-Bootsequenz das Programm BOOT geladen und gestartet. Diese Software lädt anschließend das wesentlich größere Programm MONITOR. Wie in Kapitel 5 beschrieben wurde, müssen sich die beiden absoluten Object-Dateien BOOT und MONITOR im Verzeichnis C166EVAL\BIN befinden. Das Monitorprogramm kommuniziert über die serielle Schnittstelle mit der tScope-Oberfläche. Kommandos können so an das Monitorprogramm gesandt und ausgeführt werden (z.B. das Laden eines Anwendungsprogrammes). Außerdem erlaubt der Monitor einen Blick in das "Innenleben" des C167-Microcontrollers . Wird die Anwendungssoftware im Einzelschritt-Betrieb abgearbeitet oder erreicht die Ausführung einen vorher definierten Breakpoint, werden die Inhalte der SFRs an tScope übertragen, wo sie angezeigt werden können. Ebenso können vom Monitor die Werte von Speicherbereichen abgerufen oder auch verändert werden. Sie können auf diese Art genau mitverfolgen, wie Ihr Programm die Speicherzellen und Registern verändert.

7.1.1. Monitor laden

Wir laden nun den Monitor mit Hilfe des Bootstrap-Loaders in das SRAM des kitCON.

Erste Methode: Klicken Sie die Auswahlliste links oben an und wählen Sie MON166.DLL

Zweite Methode: Öffnen Sie das Command-Window ("View - Command Windows") und geben Sie ein:

load mon166.dll

MON166.DLL ist die Schnittstelle zwischen dem Monitor-Programm (Target-Monitor), das auf dem Phytec-Board läuft und dem tScope-Debugger, der interaktiven PC-Oberfläche.

Es sollte ein Fenster mit einer Balkenanzeige erscheinen, die den Fortschritt des Ladevorgangs anzeigt.

Sollten Sie die Fehlermeldung "NO TARGET SYSTEM FOUND" erhalten, ist entweder die serielle Schnittstelle nicht richtig ausgewählt (COM1, COM2), oder aber die Baudrate falsch eingestellt. Sie sollten 9600 Baud verwenden, da der Monitor für diese Baudrate konfiguriert wurde. Im Artikel [1] wird beschrieben, wie höhere Geschwindigkeiten eingestellt werden können (dazu muß der MONITOR neu generiert werden).

ACHTUNG:

Wir wollen an dieser Stelle nochmals darauf hinweisen, daß die Dateien BOOT und MONITOR aus dem Verzeichnis

CDROM\STARTKIT\SK_167\MONITOR\KEIL

der Starter-Kit-CD in das Verzeichnis

C166EVAL\BIN

der Keil-Installation kopiert werden müssen. Nach der Installation der Keil-Toolkette befinden sich dort Dateien BOOT und MONITOR, die nicht für das kitCON-Board gedacht sind. Auch in diesem Fall erhalten Sie die obige Fehlermeldung.

Im Command-Window sollte jetzt die Meldung erscheinen, wie sie im Bildschirmfoto am Beginn dieses Abschnitts zu sehen ist..

7.1.2. Anwendungsprogramm laden

Nun können wir unser Lauflicht-Programm in das SRAM laden. Auch hier gibt es zwei Methoden.

Erste Methode: Klicken Sie auf das linke Symbol ("geöffneter Ordner").

Im darauf erscheinenden Dateiauswahlfenster selektieren Sie die absolute Object-Datei LLICHT (ohne Extension).

Zweite Methode: Geben Sie im Command-Window den Befehl

load LLICHT

ein.

7.1.3. Anwendungsprogramm starten

Klicken Sie nun das Command-Window an und geben Sie dort den Befehl

g

ein. Dieses Kommando (g = go) startet unser Anwendungsprogramm. Alternativ kann im Debug-Fenster der Menü-Punkt "GO" gewählt werden.

Die Leuchtdioden sollten im programmierten Muster aufleuchten.

Um das Programm anzuhalten, brauchen wir nur die ESC-Taste drücken (das Command-Fenster muß dazu allerdings das aktuelle Fenster sein - eventuell vorher anklicken). Auch der Menüpunkt "STOP" im Debug-Fenster hält ein Programm an.

Wenn das Programm angehalten wurde, kann der Inhalt von C167-Registern betrachtet werden. Unter dem Menü-Punkt "View" finden Sie zahlreiche Fenster, die zum Debuggen Ihres Programmes geöffnet werden können. Normalerweise ist zumindest das REGS-Fenster offen. Es zeigt die wichtigsten CPU-Register (siehe Bildschirmfoto).

Die verschiedenen SFRs zur integrierten Peripherie des C167-Microcontrollers können Sie sich über den Menü-Punkt "Peripherals" anzeigen lassen. Wählen Sie zunächst "Peripherals - Config.". In der Dialogbox stellen Sie die Optionen so ein, wie das der Screenshot zeigt. Nun können Sie beliebige Unterpunkte des Menüs "Peripherials" wählen und damit Fenster mit dem Inhalt interner Register der C167-CPU abrufen.

Unser Lauflicht-Programm arbeitet u.a. mit dem Port 2 und dem Timer 3. Sie können also beispielsweise die zugehörigen Fenster abrufen. Im Parallel Port 2 - Window sollte genau das Bit angekreuzt sein, das HIGH-Pegel führt. Die damit verbundene Leuchtdiode sollte leuchten.

7.1.3. Automatisches Laden des Monitors
und der Object-Datei

Die Keil-Oberfläche erlaubt es, den Monitor und das Object-File nach dem Aufruf von dScope automatisch in das RAM des kitCON-Boards zu laden. Dazu müssen wir lediglich eine kleine INI-Datei erstellen.

Beenden Sie dScope. Das Anwendungsprogramm muß vorher durch ESC unterbrochen werden. Sie befinden sich wieder in der µVision -Oberfläche. Wählen Sie "File - New" und geben Sie in das Editor-Fenster ein:

load mon166.dll

load llicht

Speichern Sie diese Datei unter dem Namen LLICHT.INI ab.

Nun geben Sie unter "Options - dScope Debugger" den Namen LLICHT.INI ein.

Wenn Sie jetzt "Run - dScope Debugger" anklicken, wird das Monitor- und das Object-Programm von dScope automatisch geladen. Befindet sich der Monitor noch im SRAM-Speicher, wird er nicht erneut geladen.

  1. Programm-Entwicklung für das
    FLASH-Memory

Wie heute in der Praxis üblich, werden wir unsere Beispielprogramme in der höheren Programmiersprache C kodieren. Wenn C-Programme für PC-Systeme mit DOS / Windows erstellt werden, steht für deren Ausführung ein leistungsfähiges Betriebssystem zur Verfügung, das den Prozessor und die Peripherie bereits in einen vordefinierten Zustand gebracht hat.

Unser Microcontroller hingegen ist eine stand-alone-Hardware. Für die geeignete Konfiguration der zahlreichen Komponenten unseres C167-Systems müssen wir daher selbst sorgen. Erst wenn gewisse SFRs (special function register) des C167 entsprechend gesetzt wurden, kann das Hauptprogramm main unseres C-Sourcemoduls erfolgreich ablaufen. Unbedingte Voraussetzung dafür ist die korrekte Konfiguration des externen Buscontrollers, dessen Hauptaufgabe das Timing und die Adressierung (Chip-Auswahl) am externen Bus ist, an den die Flash- und SRAM-Speicherbausteine angeschlossen sind (STARTUP-Konfiguration).

Die Startup-Konfiguration unseres Phytec-kitCon wird von einem Assembler-Modul vorgenommen, das wir mit dem leistungsfähigen Programm DAvE erstellen können. Es würde den Rahmen sprengen, hier auf alle Funktionen von DAvE einzugehen. Im wesentlichen ist DAvE eine Software, die es erlaubt, alle Komponenten des C167-Mikrocontrollers (oder anderer Siemens-m Cs) zu konfigurieren und danach sowohl die erforderliche Assembler-Startup-Datei, aber auch C-Rahmenprogramme zu generieren. Wir werden uns hier zunächst auf die Erzeugung der Assembler-Startup-Datei beschränken.

8.1. Installation von DAvE

DAVE liegt dem Starterkit in Form einer eigenen CD-ROM bei. Legen Sie diese CD ein und starten Sie das Programm SETUP.EXE im Verzeichnis SETUP.

8.2. Generieren der STARTUP-Datei

Starten Sie nach der erfolgreichen Installation das Programm DAVE.EXE. Wählen Sie den Menüpunkt "Project - New" aus. Sie werden nun nach dem Microcontroller-Typ gefragt. Wählen Sie aus der Liste "C167CR" aus. Anschließend müssen Sie Ihrem Projekt einen Namen geben. Wir wollen eine Startup-Datei erstellen, damit Anwendungsprogramme ins Flash programmiert und exekutiert werden können. Geben Sie als Name PK167F ein (PK für Phytec kitCON, F für Flash).

Auf der nun erscheinenden Formular-Seite wählen Sie unter "Type" den Chip "C167CR-L", der sich auf dem Phytec-kitCON-167-Board befindet. Unter "Compiler Settings" klicken Sie "Keil C166 V3.0" an. Im Eingabefeld "Memory Model" wird "SMALL" eingestellt.

Danach drücken Sie auf den Knopf "Forward >>".

Wir kommen so auf die nächste Seite. Hier ist die Taktfrequenz einzustellen. Unser Board arbeitet mit einer externen Frequenz von 5 MHz, die durch die C167-interne PLL vervierfacht wird. Die CPU arbeitet somit intern mit 20 MHz. Ihre Einstellungen sollten so vorgenommen werden, wie dies aus dem Screenshot ersichtlich ist.

Weiter geht es wieder mit dem Button "Forward >>". Nun folgt die Einstellung der Startup-Konfiguration, die Sie gemäß dieses Bildschirmfotos eingeben sollten:

Aktiviert sein müssen folgende Optionen:

Damit ist die erste Serie von Einstellungen abgeschlossen. Drücken Sie den Knopf "Save & Close".

Nun kommen wir zur Konfiguration der C167-Komponenten. Wir sehen ein Bild über das "Innenleben" des C167-Mikrocontrollers. Bewegen Sie die Maus über die verschiedenen Symbole und drücken Sie die rechte Maustaste. Sie sehen, daß man durch Klick zur Konfiguration einer Komponente fortschreiten oder aber die entsprechene Seiten aus dem User-Manual anzeigen lassen kann (dazu muß der Acrobat Reader auf Ihrem System installiert sein, der sich ebenfalls auf der DAvE-CD-ROM befindet).

Für unser Lauflicht-Programm müssen wir nur eine Komponente konfigurieren - den "External Bus Controller".

Der "External Bus Controller" spielt in unserem System eine zentrale Rolle. Er ist dafür verantwortlich, daß der externe Speicher des kitCon korrekt aktiviert wird. Für ein tieferes Verständnis dieser Einheit lesen Sie bitte das kitCON-Handbuch und das Kapitel 8 des User-Manuals.

Das Phytec kitCon-Board, das Sie mit dem Starterkit erhalten haben, verfügt über ein SRAM mit 64 KB (organisiert als 32 K x 16 bit) und ein FLASH memory mit 256 KB (organisiert als 128 K x 16 bit). Das Flash-Memory wird durch CS0 (chip select 0), das RAM durch CS1 aktiviert. Der externe Bus-Controller ist äußerst flexibel und kann so konfiguriert werden, daß die externen Speicher mit dem korrekten Timing angesteuert werden. Insbesondere kann spezifiziert werden, in welchem Adressbereich des insgesamt 16 MB großen Adreßraum welcher Speicher (oder auch memory-mapped-Peripherie) liegen soll.

Im folgenden werden wir uns auf das SRAM und das FLASH memory des kitCONs beschränken. Wenn Sie weitere Speicher- oder andere Peripherie-Bausteine anschließen wollen, ist analog vorzugehen.

Im wesentlichen müssen wir nun mit Hilfe von DAvE die SFRs SYSCON, BUSCON0, BUSCON1 und ADDRSEL1 konfigurieren. Die BUSCON-Register legen das Timing und die Signalformen für die Ansteuerung der Speicherbausteine fest (BUSCON0 für das FLASH memory, BUSCON1 für das SRAM).

Das Register ADDRSEL1 spezifiziert den Adressbereich für das SRAM. Der externe Buscontroller selektiert mit CS1 das SRAM, wenn die CPU eine Adresse anspricht, die in dem durch den Wert von ADDRSEL1 festgelegten Bereich liegt. Liegt die Adresse nicht in diesem Bereich, wird CS0 und damit das Flash memory aktiviert. Der externe Buscontroller wird natürlich nur dann tätig, wenn die angesprochene Adresse tatsächlich zu externem Speicher gehört und nicht etwa eine internes Register, internes RAM oder XRAM selektiert. Die Speicher-Organisation des C167 ist im Kapitel 3 des User-Manuals nachzulesen.

Wenn wir ein Programm in das Flash-Memory des Phytec-kitCON-167-Boards speichern möchten, haben wir für die Adresszuordnungen und damit insbesondere für die Konfiguration des Registers ADDRSEL1 nicht viel Wahlmöglichkeiten. Der Code-Teil eines Programms muß beim C167 stets in einen Bereich gelegt werden, der bei der physikalischen Adresse 000000 beginnt, da dort die Interrupt-Vektortabelle gespeichert ist. Selbst wenn Sie keine Interrupt-Service-Routinen programmiert haben, muß zumindest der RESET-Vektor (auf die Adresse 0) geschrieben werden.

Aus diesen Überlegungen folgt, daß wir das Flash-Memory auf die Adresse 0 legen müssen. Das SRAM legen wir in den Bereich unmittelbar nach dem Flash.

Speicherbereich Speichertyp

000000-03FFFF 256 KB Flash-Memory

040000-04FFFF 64 KB SRAM

Bemerkung: Wenn wir mit dem Monitor (und dScope) arbeiten und unser Programm in das SRAM speichern, ist eine andere Adreßzuordnung erforderlich. In diesem Fall wird das Register ADDRSEL1 von den Programmen BOOT und MONITOR so gesetzt, daß das SRAM auf der Adresse 0 liegt (siehe Artikel [1]).

Nun aber zur Konfiguration der BUSCON- und ADDRSEL-Register. Bewegen Sie die Maus auf das Symbol "Ext. Bus Contr." rechts unten, klicken Sie auf die rechte Maustaste und wählen Sie "Configure".

Stellen Sie der Reihe nach die Optionen auf den Formularseiten gemäß den folgenden Bildschirmfotos ein.

Einstellungen für BUSCON2, BUSCON3 und BUSCON4 sind nicht erforderlich, da wir nur zwei externe Speicherkomponenten auf unserem kitCON-Board haben.

Einige Erläuterungen zu diesen Parametern:

Die wesentlichen Informationen für diese Einstellungen finden Sie im kitCON-167-Handbuch. Beide Speicherkomponenten (SRAM und FLASH) sind 16 Bit breit und werden über einen "demultiplexed bus" (getrennter Daten- und Adreßbus) angesteuert. Die Parameter für das Bus-Timing sind im kitCON-Handbuch nachzulesen:

(Das ALE-Signal wird nur bei Multiplex-Bussen benötigt)

Drücken Sie "Save & Close", wenn Sie die vier Seiten "Control", "XBUS", "BUSCON0" und "BUSCON1" ausgefüllt haben.

Wir haben nun die Mindesteinstellungen für das Startup-File vorgenommen. DAvE kann daraus nun eine Assembler-Datei mit dem erforderlichen Startup-Code erzeugen. Dazu wählen wir im Menü den Punkt "Project - Generate Code". DAvE speichert eine Assembler-Datei mit dem Namen START.ASM in das Verzeichnis Ihrer Festplatte, das Sie vorher bei der Vergabe des Projekt-Namens gewählt haben. DAvE kann nun beendet werden. Es sei an dieser Stelle nochmals darauf hingewiesen, daß DAvE ein sehr umfangreiches Entwicklungstool ist, mit dem Sie sich eingehend beschäftigen sollten, wenn Sie später komplexere Projekte mit Ihrem C167-Mikrocontroller planen.

Kopieren Sie die von DAvE generierte Datei START.ASM in das LIB-Verzeichnis des KEIL-Systems. Wenn Sie bei der Installation das Default-Verzeichnis gewählt haben, ist dies C:\C166EVAL\LIB. Benennen Sie die Datei in STFLASH.A66 um.

DAvE generiert nicht nur die Assembler-Datei START.ASM, sondern auch C-Dateien, die als "Rahmenprogramme" für die Software-Entwicklung verwendet werden können. Für unser einfaches Projekt bringen diese "Templates" keine großen Vorteile. Zum einen haben wir die C-Source-Datei LLICHT.C ja bereits erstellt und außerdem war es nur erforderlich, den externen Bus-Controller zu konfigurieren. Es sei aber noch einmal darauf hingewiesen, daß DAvE die Entwicklung umfangreicherer Projekte wesentlich erleichtert. Insbesondere wenn die verschiedenen internen C167-Komponenten Interrupts erzeugen sollen, sind die C-Rahmenprogramme, die von DAvE automatisch erstellt werden eine wesentliche Hilfe.

8.3. Einstellungen in der KEIL-Umgebung für das Speichern des Programms im FLASH

Damit unser Programm im Flash-Speicher laufen kann, müssen wir in der m Vision-Umgebung einige wenige Änderungen gegenüber den im Abschnitt 6 beschriebenen Einstellungen vornehmen.

Zunächst besteht unser Projekt jetzt nicht nur aus der C-Quelldatei LLICHT.C, sondern auch aus der Assembler-Datei STFLASH.A66, die wir mit DAvE generiert haben. Fügen Sie die Datei STFLASH.A66 Ihrem LLICHT-Projekt hinzu ("Project - Edit Project"). Achten Sie darauf, daß die Option "Include in Link/Lib" aktiviert ist.

Die Einstellungen für die CLASSES-Adressen sind wie folgt einzugeben ("Options - L166 Linker"):

NCODE (0x0000-0xBFFF)

NDATA (0x040000-0x043FFF)

NDATA0 (0x040000-0x043FFF)

NCONST (0x8000-0xBFFF)

Der Programmcode (Class NCODE) und Konstante (Class NCONST) werden in das FLASH gespeichert, für Variable (Class NDATA und NDATA0) wird Speicher im SRAM reserviert. Konstante und Variable werden über die DPP-Register (siehe C167-Handbuch) adressiert. Daher werden für sie jeweils 16 KB große Bereiche angegeben.

Für die Flash-Programmierung muß unser Programm im intel-Hex-Format vorliegen. Diese Datei wird vom KEIL-Tool OH166 erzeugt. Damit dieser zusätzliche Schritt (siehe Abschnitt 3) durchgeführt wird, müssen wir unter "Options - Make" die Option "Run L166 Linker and OH166" anklicken. Die von OH166 erzeugte intel-Hex-Datei wird den Namen des Projekts mit der Dateiendung H86 tragen. In unserem Fall ist das LLICHT.H86.

Anschließend wählen wir im Menü "Options - OH166 Object-Hex-Converter" aus und stellen das Format intel-HEX-86 ein.

Die Einstellungen sind damit abgeschlossen. Klicken Sie den Menüpunkt "Project -Build Project" an und unsere Ausgabedatei LLICHT.H86 wird gemäß unseren Angaben erstellt.

8.4. Das Flash-Programmiertool FLASHT

Zum Programmieren des Flash-Speichers benötigen wir ein entsprechendes Programm, das sich auf der Starterkit-CD-ROM im Verzeichnis CDROM\STARTKIT\SK_167\FLASH

befindet. Kopieren Sie dieses Verzeichnis auf Ihre Festplatte. Das Flash-Tool heißt FLASHT.EXE und wird über die Batch-Dateien FLASHT_1.BAT (für COM1) bzw.

FLASHT_2.BAT (für COM2) aufgerufen. Der rote Stecker muß gesetzt werden (verbindet die Pins 1+2 von Jumper JP2)

FLASHT lädt über den Bootstrap-Mechanismus ein Monitor-Programm in den RAM-Speicher des Boards, das auch den Programmier-Algorithmus für das Flash enthält.

Das Flash-Tool von Phytec ist ein DOS-Programm, das aber auch in einem Fenster unter Windows 95 gestartet werden kann. Es bietet zahlreiche Optionen an:

Wählen Sie zunächst die Option 7 (Erase, Load and Software Reset). Das Flash-Memory wird gelöscht. Danach drücken wir die Taste F2 und geben den Namen der Intel-Hex-Datei ein, die in den Flash-Speicher geladen werden soll. In unserem Beispiel geben wir ein:

C:\166EVAL\PROJECTS\LLICHT.H86 ein.

Nach dem Laden des Programms führt das Flash-Monitor-Programm einen Software-Reset durch. Das Anwendungsprogramm sollte nun laufen. Da es sich nun resident im Flash befindet, kann es auch nach einer Unterbrechung der Spannungsversorgung jederzeit durch Drücken der Reset-Taste gestartet werden. Dazu ist aber der rote Stecker von den Pins 1+2 des Jumpers JP2 zu entfernen. Andernfalls würde durch ein Reset der Bootstrap-Loader und nicht unser Anwendungsprogramm gestartet werden.

  1. STARTUP-Datei für RAM-Konfiguration
  2. Es wird Ihnen wahrscheinlich aufgefallen sein, daß wir für das Arbeiten mit dem Debugger und das Laden unseres Anwendungsprogramms in das RAM keine DAvE-Startup-Datei generiert haben. Das ist auch nicht unbedingt erforderlich, da der KEIL-Linker beim Fehlen einer Startup-Datei im Projekt automatisch eine Default-Startroutine zum Programm linkt. Im Debug-Fenster von dScope sehen Sie nach dem Laden der Object-Datei auf der Adresse 0 (RESET-Vektor) den Aufruf

    000000: JMPS C_STARTUP

    Hier wird also gleich zu Beginn der Programmausführung diese Startup-Routine angesprungen. Die Source-Datei zum Default-Startup findet man in

    C:\C166EVAL\LIB\START167.A66

    Dieser Source-Code wird allerdings nicht wirklich gelesen, wenn das lauffähige Programm erzeugt wird. Vielmehr ist der Objectcode bereits in der Library enthalten, die vom Linker Ihrem Programm hinzugefügt wird.

    Wie bereits erwähnt, müssen Sie sich für das Arbeiten mit dem Monitor nicht unbedingt um eine Startup-Datei kümmern, was für den Anfänger eine zusätzliche Erleichterung darstellt. Fortgeschrittenen Benutzern wird allerdings (auch von KEIL) empfohlen, eine von DAvE generierte STARTUP-Datei hinzuzufügen, wie wir das auch in Abschnitt 8 beschrieben haben. Ein Blick in die Default-Datei START167.A66 zeigt nämlich, daß die C_STARTUP-Routine unter anderem für die Zugriffe über den externen Bus 2 Waitstates definiert, obwohl RAM und FLASH des Phytec-Boards auch mit 0 Waitstates funktionieren. Eine DAvE-generierte Startup-Datei nach Abschnitt 8 bringt also geringe Geschwindigkeitsvorteile.

    Eine DAvE-Startup-Datei erzeugen Sie, wie bereits in Kapitel 8 beschrieben. Die einzige Änderung betrifft die Optionen für ADDRSEL1 (auf der Seite BUSCON1). Geben Sie auf der entsprechenden Seite ein:

    Window Size: 1 MB

    der Monitor erfordert das, auch wenn Sie nur 64 KB physikalisches RAM haben

    Required Start Address: 0x000

    das RAM muß in den Adressbereich ab Adresse 0 gemappt werden

    Die generierte STARTUP-Datei fügen Sie wie oben beschrieben Ihrem Projekt hinzu. Hintergrundinformationen finden Sie wieder in [1].

  3. Schlußbemerkungen

"Aller Anfang ist schwer", schrieb ich zu Beginn dieses Artikels. Ich hoffe aber, daß diese Beschreibung Sie zum ersten erfolgreichen C167-Programm führen konnte. Die Darstellungen wurden bewußt ausführlich und an vielen Stellen mit Hintergrundinformationen und Tips zum weiteren Selbststudium versehen. "Übung macht den Meister" stelle ich an das Ende des Dokuments - denn es gibt vieles zu erforschen - von den Möglichkeiten der KEIL-Umgebung über DAvE bis hin zum Innenleben des C167.

Viel Erfolg dabei !

Ergänzende und weiterführende Literatur und
Web-Sites zum Thema des Artikels

  1. Generieren des Target-Monitors für das Phytec-kitCON-167-Board und die Keil-Toolkette (Siemens C167-Starterkit), Walter Waldner, 1998
    verfügbar über die Homepage des Autors:
    www.htblmo-klu.ac.at/lernen
  2. Für das Programm DAvE (Digital Application Engineer) hat Siemens einen eigenen Web-Site eingerichtet. Hier werden Updates und Parameterdateien für neue Microcontroller angeboten www.smi.siemens.com/DAvE.html
  3. Umfassende Informationen über die Siemens-Microcontroller finden Sie auf der Web-Seite
    www.siemens.de/semiconductor/
    products/ics/34/mc_home.htm
  4. Das Internet-Angebot der Firma KEIL finden Sie unter den Adressen
    http://www.keil.com
    http://www.keil.com/~market
  5. Interaktive Online-Tutorials, insbesondere zu DAvE und CAN finden Sie unter der Adresse
    www.mfuniversity.com/siemens/
    homepage.htm

Dr. Walter Waldner

HTBL Klagenfurt, Mössingerstraße 25

EMail: walter.waldner@telekabel.at

WWW: www.htblmo-klu.ac.at/lernen

 

Document: Version 1.1, Oktober 1998