IndexHomepage^

provisorisch!

SCOTTY08 - Handbuch

  1. Lieferumfang und Auslieferungszustand
  2. Inbetriebnahme
  3. Stromversorgung
  4. RESET und Exceptions
  5. Baugruppen
    1. Adressbelegung
    2. Adressdekoder
    3. RAM
    4. ROM
    5. FLASH
    6. RTC
    7. MFP
    8. Parallel I/O
  6. Schnittstellen
    1. Expansion Port
    2. TLX+ Port
    3. Serieller IF Port
    4. Stromversorgungs-Stecker
  7. GAL-Gleichungen
  8. Bei Problemen
  9. Versionen

Autoren: Walter Scherer, Stefan Vollmar

Copyright © MCT Paul & Scherer Mikrocomputertechnik GmbH. Alle Rechte vorbehalten.

Dieses Handbuch, wie auch das beschriebene Produkt, wurde sorgfältig erstellt und geprüft. Trotzdem können Fehler und Irrtümer nicht ausgeschlossen werden. MCT übernimmt keinerlei Verantwortung für die uneingeschränkte Richtigkeit und Anwendbarkeit des Handbuchs oder des beschriebenen Produkts und für die aus eventuell vorhandenen Fehlern resultierenden Schäden.

Änderungen ohne vorherige Ankündigung vorbehalten.

^

1 Lieferumfang und Auslieferungszustand

Der SCOTTY08 Einplatinenrechner wird in folgender Minimalkonfiguration ausgeliefert:

Folgende Teile sind im Lieferumfang des Developer Kit enthalten:

Optionen wie grössere RAMs, Firmware im EPROM und andere sind möglicherweise bereits bestückt, wenn sie zusammen mit dem Board bestellt wurden und auf der Bestellung nichts anderes vermerkt war. In diesen Fällen sind die Optionen auf Funktion getestet und sofort betriebsbereit.

^

2 Inbetriebnahme

Diagramm

Für die erste Inbetriebnahme sind folgende Komponenten nötig:

Die Inbetriebnahme findet in folgenden Einzelschritten statt:

Das IF232-Modul wird entsprechend dem Bild über das 10pol. Flachbandkabel verbunden. Der Rechner wird dabei entweder über die VG-Buchsenleiste oder über den 4pol. Floppystecker an die ausgeschaltete Stromversorgung angeschlossen. Pin 32c der Buchsenleiste wird mit dem negativen Pol verbunden, der Pin 31c an den positiven Pol. Es ist darauf zu achten, dass VG-Buchsenleiste und VG-Steckerleiste spiegelverkehrte Numerierung besitzen, d.h. an der Steckerleiste auf SCOTTY08 ist Pin 1c der Minuspol und Pin 2c der Pluspol. Achten Sie auch auf die korrekte Polarität der Versorgungsspannung. Eine zuverlässige Stromversorgung gewährleistet zum Beispiel das Schaltnetzteil POWER1, es bietet ausserdem genügend Leistungs­reserve, sowie Powergood-Signal und Powerdown-Möglichkeit für Batteriebetrieb.

Der Anschluss des Terminals, bzw. des PCs mit Terminalemulation über das Nullmodemkabel an das IF-Modul.

Inbetriebname und Einstellung des Terminals oder PCs auf 19200Baud bei 8Bit, no Parity und 1 Stopbit. SCOTTY08 liefert auf dem 9pol. Steckverbinder feste Aktivpegel für die Handshakepins. Der Pegel der Handshakepins zu SCOTTY08 hin (DCD, DSR, RI, CTS) ist für den Betrieb des Monitorprogramms irrelevant. Bei Verwendung eines PCs ist darauf zu achten, dass das Terminalprogramm für die verwendete serielle Schnittstelle eingestellt wurde (siehe auch Dokumentation zu TM).

Netzteil für SCOTTY08 einschalten.

Ist alles richtig aufgebaut und die Hardware in Ordnung erscheint nun die Copyrightmeldung nach weniger als einer Sekunde auf dem Monitor. Jedes Return <CR> sollte mit einem erneuten Prompt beantwortet werden. "? <CR>" liefert das Hilfemenü des Monitors.

^

3 Stromversorgung

SCOTTY08 kann über den 96pol. Expansion-Stecker oder den 4pol. Floppy-Power-Stecker an die Stromversorgung angeschlossen werden.

Die Stromaufnahme an VCC beträgt typ. 180mA  in der Standardversion.

Die Notstromversorgung der RTC und des RAMs ist mit einer Lithiumzelle mit 3V realisiert. Die Lebensdauer der Zelle beträgt 4 Jahre bei maximaler Betriebstemperatur (70 Grad Celsius) und 10 Jahre bei einer Temperatur von 20 Grad Celsius. Zu diesen Zeiten kann die Betriebsdauer des Rechners mit einer externen Stromversorgung addiert werden. Wenn der Rechner z.B. 8h pro Tag läuft und 16 Stunden ausgeschaltet ist, beträgt die minimale Lebensdauer: 4 Jahre + 8/24 * 4 Jahre = 5.33 Jahre. Die angegebenen Lebenserwartungen sind minimale Werte, typisch ist mit 12 Jahren Lebensdauer zu rechnen. Die Lithiumzelle ist eingelötet. Das Auswechseln sollte nur von qualifiziertem Personal durchgeführt werden. Die alten Zellen sind sachgemäss zu entsorgen.

^

4 RESET und Exceptions

Der RESET wird onboard mit einem Resetcontroller Typ RN5VD47A/C generiert. Die minimale Versorgungsspannung für die Auslösung des Resets beträgt 4.582 - 4.817V. Ausserdem wird der RESET auf eine Zeit von minimal 100ms ausgedehnt, um den Prozessor sicher zu initialisieren.

Das erste Langwort des ROMs an der Adresse 0x80000 enthält den Wert des Supervisor Stack Pointers, eine RAM-Adresse, die sinnvollerweise am Ende des RAMs liegt z.B.: 0x00008000 für ein 32KB RAM. An der Adresse 0x80004(zweites Langwort) steht die Adresse des ersten Befehls der nach einem Reset ausgeführt wird (sinnvollerweise eine ROM-Adresse). Ein BUSERROR wird direkt von der Adressdekodierung generiert. Bei Zugriffen auf Bereiche, die als nicht belegt bekannt sind, wird sofort ein BUSERROR generiert. Die Behandlung erfolgt dann in der von der M68000 Familie bekannten Art. HALT Zustände, wie sie bei doppelten Exceptions entstehen, werden von der Hardware auf SCOTTY08 mit einem sofortigen RESET aufgelöst. Es kann also nie passieren, dass der Prozessor nach einem Fehler im Tiefschlaf versinkt. Es ist allerdings notwendig, diese Tatsache im Auge zu behalten - wenn ein Programm mit einem RESET endet (und z.B. das Monitorprompt auftaucht) war das möglicherweise ein unbeabsichtigter Programmier- oder Hardwarefehler. Interrupt Exceptions können nur vom MFP Baustein (Interrupt Level 2) ausgelöst werden.

^

5 Baugruppen

5.1 Adressbelegung

SCOTTY08 kennt nur einen 1MB grossen einheitlichen Adressraum. Eine Unterscheidung nach User und Supervisor wird nirgends gemacht. Dieser Adressraum ist folgendermassen belegt:

Von ... Bis Grösse Funktion
0x00000 ... 0x1FFFF 128KB RAM bei 128KB Version
0x00000 ... 0x7FFFF 512KB RAM bei 512KB Version
     
0x80000 ... 0x8FFFF 64KB ROM bei  64KB Version
0x80000 ... 0x9FFFF 128KB ROM bei 128KB Version
0x80000 ... 0xBFFFF 256KB ROM bei 256KB Version
0x80000 ... 0xF7FFF 496KB ROM bei 496KB Version
     
0xFC000 ... 0xFC000 1Byte OPa (TTL Output A)
0xFC100 ... 0xFC100 1Byte IP (TTL Input)
0xFC200 ... 0xFC200 1Byte OPb (TTL Output B)
     
0xFC300 ... 0xFC31F 32Byte TLX+ CS0
0xFC400 ... 0xFC41F 32Byte TLX+ CS1
0xFC500 ... 0xFC51F 32Byte TLX+ CS2
     
0xFC700 ... 0xFC71F 32Byte RTC
     
0xFD600 ... 0xFD63F 48Byte MFP
     
0xFFFF0 ... 0xFFFFF 16Byte IACK Vektor-ID vom MFP

Nicht aufgeführte Adressbereiche führen beim Zugriff zu einer Buserror Exception. Ausnahme sind einige Spiegelungen oberhalb der Peripheriebaugruppen. A0 wird bei der Adressierung der Peripherie nicht berücksichtigt. Ein normaler Schreib-/Lesezugriff auf den Speicherbereich von 0xFF000 bis 0xFFFFF wird nicht terminiert, der Prozessor bleibt im Zugriff hängen, da ein IACK-Zugriff erwartet wird.

^

5.2 Adressdekoder

Die Adressdekodierung auf SCOTTY08 wird im wesentlichen von einem GAL erledigt. Das standardmässig mitgelieferte GAL ist für 512KB RAM und 512KB ROM ausgelegt. Kleinere Speicherbausteine können ohne Probleme verwendet werden, sie spiegeln sich im Adressraum. Die Peripheriebaugruppen werden in 256 Byte Blocks dekodiert. Innerhalb dieser Blocks spiegeln sich die einzelnen Register mehrfach.

^

5.3 RAM

Vorgesehen ist der Einsatz von 128 und 512KB RAM Typen. Die im RAM gespeicherten Daten werden bei installierter Lithiumzelle auch bei Ausfall der externen Stromversorgung gehalten. Im Interesse einer möglichst langen Lebensdauer der Lithiumzelle muss ein Low-Power RAM verwendet werden. Der Adressdekoder muss der Grösse des RAMs angepasst sein. Dazu ist der Einsatz eines geeignet programmierten GALs nötig. Die Adressdekodierung ist in <Adressdekoder> beschrieben. Jumper J1 dient zur Einstellung des RAM-Typs:

RAM-Typ 128KB 512KB
Brücke 1-2 2-3
^

5.4 ROM

Der EPROM/ROM Sockel kann mit EPROMs und pinkompatiblen ROMs oder FLASHs (z.B. AM29F010) mit einer Grösse von 64KB (27512) bis 512KB (274000) bestückt werden. Bei Verwendung eines 512KB ROMs sind 16KB von 0xFC000 bis 0xFFFFF für die Peripherie ausgespart.

Die Jumper J2 und J3 dienen zur Einstellung des EPROM-Typs:

EPROM-Typ 27512 271000 272000 274000 29F010
Grösse in KB 64 128 256 512 128
Brücke J2 1-2 NC 2-3 2-3 NC
Brücke J3 NC NC NC 2-3 1-2

Der Adressdekoder muss der Grösse des ROMs angepasst sein. Dazu ist der Einsatz eines geeignet programmierten GALs nötig. Die Adressdekodierung ist in <Adressdekoder> beschrieben.

^

5.5 FLASH

Flash-Memory lässt sich ohne Zusatzhardware direkt in der Schaltung programmieren und wieder löschen. Daraus ergeben sich erhebliche Vorteile für Entwicklung und Fertigung von Produkten auf Basis des SCOTTY08. Insbesondere die leichte Reprogrammierung auch im Feld spart Aufwand und ermöglicht Produkteigenschaften, wie sie mit EPROMs nicht denkbar sind. Durch den Einsatz von Flash-Memories von AMD, sowie dazu kompatiblen Typen, kann auf Programmierspannungsgeneratoren und ähnlich problematische Hardware verzichtet werden.

Das FLASH-Entwicklungspaket ermöglicht ein komfortables Arbeiten mit Flash-Memories.

^

5.6 RTC

Die RTC vom Typ RTC72421 ist über 16 Register mit einer Breite von 4Bit ansprechbar. Diese Register liegen in einem Port von jeweils 8Bit Breite, wobei die obersten 4Bit beim Lesen undefinierte Werte liefern und beim Schreiben irrelevant sind.

Die RTC enthält einige exotische und für normale Anwendungen unnötige Funktionen. Tips für die Programmierung der RTC folgen weiter unter.

Zusammen mit der Addon08 kann der Interrupt (STD.P.) Ausgang der RTC zum periodischen Einschalten von SCOTTY08 verwendet werden. Dazu muss lediglich die RTC auf periodische Interrupts programmiert werden und der dafür  vorgesehene Jumper auf der Addon08 entfernt werden. Durch Schreiben von 0  auf das IRQ Bit in der RTC schaltet der Rechner sich selbst aus. Nach Ablauf der (mit T1/T0) programmierten Periode wird der Strom wieder eingeschaltet.

Adresse Register D3 D2 D1 D0 Funktion
0xFC701 S1 S08 S04 S02 S01 Sekunde Einer
0xFC703 S10   S40 S20 S10 Sekunde Zehner
0xFC705 Mi1 m08 m04 m02 m01 Minute Einer
0xFC707 Mi10   m40 m20 m10 Minute Zehner
0xFC709 H1 H08 H04 H02 H01 Stunde Einer
0xFC70B H10   PAM H20 H10 Stunde Zehner
0xFC70D D1 D08 D04 D02 D01 Tag Einer
0xFC70F D10     D20 D10 Tag Zehner
0xFC711 Mo1 M08 M04 M02 M01 Monat Einer
0xFC713 Mo10       M10 Monat Zehner
0xFC715 Y1 Y08 Y04 Y02 Y01 Jahr Einer
0xFC717 Y10 Y80 Y40 Y20 Y10 Jahr Zehner
0xFC719 W   W4 W2 W1 Wochentag
0xFC71B CtlD ADJ IRQ BSY HLD Control Reg. D
0xFC71D CtlE T1 T0 I/S MSK Control Reg. E
0xFC71F CtlF TST E/U STP RST Control Reg. F

Die Bits in den Controlregistern haben im einzelnen folgende Bedeutung:

PAM

PM (0) oder AM (1).

ADJ

30 Sekunden Adjust. Die Minuten werden inkrementiert, wenn die Sekunden > 30 sind. Die Sekunden werden auf 00 gesetzt. Nach Setzen von ADJ muss minimal 100 Mikrosekunden gewartet werden. Das Bit wird automatisch wieder gelöscht.

IRQ

Dieses Read-Only Bit reflektiert den Zustand des Interrupt-Ausgangs der RTC (1 = Interrupt, 0 = kein Interrupt). Beim Schreiben einer 0 wird ein anstehender Interrupt wieder zurückgenommen.

BSY

Zeigt nach dem setzen von HLD an ob ein Übertrag zu erwarten ist (1 = Übertrag, 0 = kein Übertrag).

HLD

Siehe vorhergehendes Bit. Der Mechanismus mit HLD und BSY zum Schutz vor einem Übertrag beim Schreiben oder Lesen ist wenig sinnvoll.

T1/T0

Diese Bits dienen der Programmierung der Periodendauer des Interruptausgangs der RTC. Die Periodendauer beträgt:

T1 T0 Zeitintervall
o 0 1/64 Sekunde
o 1 1 Sekunde
1 0 1 Minute
1 1 1 Stunde

I/S:

Dieses Bit muss auf 1 programmiert werden.

MSK:

Dieses Bit sperrt den Interrupt Ausgang der RTC. Es muss auf 0 programmiert werden.

TST:

Dieses Bit muss auf 0 programmiert werden.

E/U:

Europäische 24 Stunden- (1) oder US AM/PM-Zeit (0).

STP:

STP = 1 stoppt die Uhr.

RST:

RST = 1 löscht die internen Zähler unterhalb des 1Hz Teilers. Solange RST = 1 wird die Uhr angehalten.

Die Bereiche der einzelnen Zeiteinheiten:

Einheit von bis Kommentar
Sekunden 00 59  
Minuten 00 59  
Stunden 00 23 bis 11 im AM/PM Mode
Monate 1 12  
Jahre 00 99  
Wochentag 0 6 Sonntag ist 0

Programmierung der RTC

Mit folgender Programmsequenz lässt sich die Uhr stellen:

Mit folgender Programmsequenz lässt sich die Uhr stellen:

RTC->ctlf = 7; /* stop, reset, 24 hour mode */
RTC->sec = sec;
RTC->secd = sec10;
RTC->min = min;
RTC->mind = min10;
RTC->hour = hour
RTC->hourd = hour10;
RTC->day = day;
RTC->dayd = day10;
RTC->mon = mon;

RTC->mond = mon10;
RTC->year = year;
RTC->yeard = year10;
RTC->week = week;

RTC->ctle = 0; /* 64Hz, enable std.p output */
RTC->ctld = 0;
RTC->ctlf = 4; /* 24 hour mode, start clock */

Zum Lesen ist nichts weiter nötig als die Zeitregister in einen Buffer zu kopieren. Wenn sich die Register während des Lesens ändern wird eine falsche Zeit ausgegeben. Um dies zu erkennen wird die RTC zweimal gelesen und die Ergebnisse verglichen. Falls sie ungleich sind wird der Lesevorgang wiederholt.

RTC63421

Die RTC63421 ist eine gegenüber der RTC72421 verbesserte Ausführung. Die beiden RTCs sind pinkompatibel und mit Ausnahme der Controlregister und der zusätzlichen Alarmtimer Funktion softwarekompatibel. Die RTC63421 hat als wesentliche Verbesserung einen frei programmierbaren Alarmtimer, der verwendet werden kann, um nach beliebigen Zeitintervallen die Power-On Funktion der Power1/2 Netzteile zu triggern. Damit ist es möglich, dass sich SCOTTY08 in programmierbaren Intervallen ein und wieder aus schaltet.

Die RTC63421 ist optional verfügbar. Details der Programmierung werden im bei der Option mitgelieferten Datenblatt beschrieben.

^

5.7 MFP

Der MFP (Multi-Function-Peripheral) enthält die meisten Peripheriefunktionen von SCOTTY08:

4 Stück 8Bit-Timer, zwei davon mit externem Eingang.

Serielle Schnittstelle.

8 einzeln programmierbare Ein-/Ausgabekanäle mit Interruptfähigkeit.

Detaillierte Angaben zur Programmierung des MFP sind dem Datenblatt zu entnehmen. Im folgenden werden nur die SCOTTY08 spezifischen Einzelheiten beschrieben.

Registerbelegung:

Adresse Register Beschreibung
0xFD601 GPIP Port-Daten
0xFD603 AER Interrupt Polarität
0xFD605 DDR Datenrichtung
0xFD607 IERA Interrupt-Enable A
0xFD609 IERB Interrupt-Enable B
0xFD60B IPRA Interrupt-Pending A
0xFD60D IPRB Interrupt-Pending B
0xFD60F ISRA Interrupt-In-Service A
0xFD611 ISRB Interrupt-In-Service B
0xFD613 IMRA Interrupt-Mask A
0xFD615 IMRB Interrupt-Mask B
0xFD617 VR Interrupt-Vektor
0xFD619 TACR Timer A Controlregister
0xFD61B TBCR Timer B Controlregister
0xFD61D TCDCR Timer C + D Controlregister
0xFD61F TADR Timer A Datenregister
0xFD621 TBDR Timer B Datenregister
0xFD623 TCDR Timer C Datenregister
0xFD625 TDDR Timer D Datenregister
0xFD627 SCR Synchron Character Register
0xFD629 UCR USART Control Register
0xFD62B RSR Empfänger Status Register
0xFD62D TSR Sender Status Register
0xFD62F UDR USART Daten Register

Der MFP belegt Interruptlevel 2. Es werden nur vektorisierte Interrupts erzeugt.

Tabelle der Interrupts (von höchster zu niedrigster Priorität):

Kanalnr. Beschreibung Register/Bitnummer
15 MFP7-Pin / Power_Good A/7
14 MFP6-Pin / TLX+ - Interrupt A/6
13 Timer A A/5
12 Empfangspuffer voll A/4
11 Empfangsfehler A/3
10 Sendepuffer voll A/2
9 Sendefehler A/1
8 Timer B A/0
7 MFP5-Pin B/7
6 MFP4-Pin / DCD Signal B/6
5 Timer C B/5
4 Timer D (Baudratengenerator) B/4
3 MFP3-Pin B/3
2 MFP2-Pin B/2
1 MFP1-Pin B/1
0 MFP0-Pin B/0

Als Baudratengenerator wird für Senden und Empfangen Timer D verwendet. Mit dem 2.4576MHz-Quarz ergeben sich folgende Baudraten und Registerwerte:

Baudrate TDDR TCDCR
(untere 3 Bits)
19200 1 1
9600 2 1
4800 4 1
2400 8 1
1200 16 1
600 32 1
300 64 1
150 128 3
75 64 3
50 96 3

Hinweis:
Der notwendige Wert im Timerregister ergibt sich aus:

19200/Baudrate bei TCDCR = 1

4800/Baudrate bei TCDCR = 3

Es ist also nicht nötig eine Tabelle anzulegen - statt dessen kann eine einfache Berechnung erfolgen.

Wenn Sie eine beliebige Baudrate zulassen wollen, sollte neben der Berechnung des Teilungsfaktors eine Fehlerberechnung erfolgen. Abweichungen von bis zu 2,0% von der Sollfrequenz sind tolerierbar.

^

5.8 Parallel I/O

Es sind 16 Ausgabeleitungen mit Latches (74xx273) und 8 Eingänge mit einem Bustreiber (74xx244) implementiert. Die Reseteingänge der Treiber sind mit dem Prozessor-Reset verbunden, damit ist gewährleistet, dass nach einem Reset alle Ausgänge auf logisch Null liegen. Je nach Bestückung können Ströme bis ±24mA geliefert werden.

Typ Low I[mA] bei U[V] High I[mA] bei U[V]
74LS273 8,0 0,5 0,4 2,4
74ALS273 24,0 0,5 2,6 2,4
74HCT273 4,0 0,4 4,0 3,7
74ACT273 24,0 0,4 24,0 3,7

Die Spannungsangaben bei ‘Low’ und ‘High’ verstehen sich als maximale bzw. minimale Werte bei angegebener Belastung und VCC ±10%. Bei den Ausgangstreibern (74xx273) kann AC- und HC-Logik wegen der TTL-Pegel am CPU-Bus nicht eingesetzt werden. Die typischen Ausgangsspannungen liegen insbesondere bei ACT- und HCT-Typen wesentlich näher an den Versorgungsspannungspegeln. Die Ausgangstreiber werden nur über die Adresse selektiert, deshalb sind Lesezugriff auf die Ausgänge zu vermeiden. Für den Eingangstreiber eignen sich besonders die HC- (2.5V) und HCT-Typen (1.5V Schaltspannung) mit Eingangsströmen von weniger als 1 Mikroampere. Die Eingangsstreiber werden nur über die Adresse selektiert, deshalb sind Schreibzugriff auf die Eingänge zu vermeiden.

^

6 Schnittstellen

6.1 Expansion Port

Der Expansion Port ist auf eine 64pol. VG-Leiste geführt. Alle Peripheriesignale und der TLX+ (ein I/O-Bus mit INTEL Busprotokoll) sind vorhanden. Die Reihe ‘b’ ist mit den entsprechenden Pins der Reihe ‘c’ verbunden. Damit ist es möglich, statt der VG-Leiste eine zweireihige Pfostenleiste als Steckverbinder zu verwenden.

Anschlussbelegung:

Pin-Nummer A C
1 GND GND
2 VEE VCC
3 RE* WE*
4 A1 CE0*
5 RESET* A2
6 D1 D0
7 D3 D2
8 D5 D4
9 D7 D6
10 A3 -
11 CE1* A4
12 CE3* CE2*
13 GND TLXINT*
14 VCC OPa3
15 - OPa4
16 OPa0 OPa5
17 OPa1 OPa6
18 OPa2 OPa7
19 OPb0 IP0
20 OPb1 IP1
21 OPb2 IP2
22 OPb3 IP3
23 OPb4 IP4
24 OPb5 IP5
25 OPb6 IP6
26 OPb7 IP7
27 MFP0 MFP7
28 MFP1 TAI
29 MFP2 TBO
30 MFP3 STDP
31 MFP4 SO
32 MFP5 SI

Die Pins auf Reihe B sind mit den danebenliegenden Pins auf Reihe C verbunden.
* = aktiv Low
- = nicht belegt

Pin 1... 13 siehe TLX+

OPa0 - OPa7
TTL-Ausgänge vom OPa Latch. Die Ausgänge werden bei einem Reset auf Low gesetzt.
OPb0 - OPb7
TTL-Ausgänge vom OPb Latch. Die Ausgänge werden bei einem Reset auf Low gesetzt.
IP0 - IP7
TTL-Eingänge. Beim Lesen wird der aktuelle Wert ohne Zwischenspeicher ausgewertet.
MFP0 - MFP5, MFP7
MFP I/O Port für Ein- und Ausgabe, sie sind alle als Interruptquellen mit eigenem Vektor programmierbar. MFP4 dient als DCD Eingang beim Betrieb der seriellen Schnittstelle in Verbindung mit einem Modem. MFP5 ist mit dem DTR Ausgang der seriellen Schnittstelle verbunden. MFP6 wird fest als Interrupteingang für den TLX+ Port verwendet.
SI
Serieller Eingang.
SO
Serieller Ausgang.
TAI
Timereingang von MFP-Timer A.
TBO
Timerausgang von MFP-Timer B.

Die Leitungen a13... 26 sind für den Anschluss einer alphanumerischen LCD geeignet, hierzu werden die Anschlüsse der LCD mit den entsprechenden Pins der VG-Leiste verbunden, also 1 mit a13, 2 mit a14 usw.. An die Pins c14 bis c26 kann eine Tastaturmatrix mit maximal 5 * 8 Tasten angeschlossen werden.

^

6.2 TLX+ Port

TLX+ ist eine Erweiterung von TLX, einem Bus mit INTEL-Protokoll. Dieser Bus wurde von Toshiba für Grafik-LCDs aus der Taufe gehoben. In Verbindung mit den MCT-Erweiterungen zum TLX+ dient er zum einfachen Anschluss anwendungsspezifischer Peripheriebaugruppen (Bausteine mit INTEL-like Businterface wie z.B. 8255 sind besonders einfach anzusteuern) und natürlich der TLX+ Module von MCT.

Bei der Auswahl der Peripheriebausteine ist auf die minimale Zugriffszeit zu achten. Bei 8 MHz stehen maximal 200ns zur Verfügung. Da die Greise

unter den Peripheriebausteinen oft zu langsam sind, ist ein Blick ins Datenbuch nötig. In Zweifelsfällen können Sie einen unserer Techniker konsultieren.

Anschlussbelegung von TLX+:

Pin-Nr. Name Name Pin-Nr.
1 GND GND 2
3 VCC VEE 4
5 WE* RE* 6
7 CE0* A1 8
9 A2 RESET* 10
11 D0 D1 12
13 D2 D3 14
15 D4 D5 16
17 D6 D7 18
19 --- A3 20
21 A4 CE1* 22
23 CE2* CE3* 24
25 TLXINT* GND 26

Die Pins 1... 20 gehören zum standardmässigen TLX-Interface, die Pins 21... 26 befinden sich nur auf dem erweiterten TLX+ Interface.

Funktion der Pins im einzelnen:

VCC:

+5V ±10% Stromversorgung für die Peripherieschaltung.

GND:

Referenz.

VEE:

Kontrastspannung bei LCDs - nicht verwendet.

RE*:

Read-Enable, Strobe für einen Lesezugriff (aktiv Low). Adress- und Chip-Enable Leitungen sind stabil wenn RE* aktiv ist. Die Daten müssen beim Übergang in den inaktiven Zustand gültig sein. Die Pulsbreite beträgt min. 270ns.

WE:

Write-Enable, Strobe für einen Schreibzugriff (aktiv Low). Daten-, Adress- und Chip-Enable Leitungen sind stabil wenn WE* aktiv ist. Die Pulsbreite beträgt min. 140ns.

D0 ... D7:

Die Datenleitungen sind direkt mit dem Prozessorbus verbunden.

A1 ... A4:

Die Adressleitungen sind direkt mit den entsprechenden Adressen am Prozessorbus verbunden (A3/A4 nur TLX+).

CE0* ... CE3*:

Chip-Enable Signale, über die sich verschiedene Baugruppen selektieren lassen. Adressen siehe <Adressbelegung>. Die Chip-Enable Signale sind aktiv Low. CE1... CE3 nur bei TLX+, CE3 wird von SCOTTY08 nicht unterstützt. Die Chip Selects sind stabil wenn RE* oder WE* aktiv sind. Es ist wichtig, die RE* und WE* Strobes in der Adressdekodierung zu berücksichtigen, da sonst Glitches und Buskonflikte entstehen können.

RESET*:

Reset dient zum Zurücksetzen der Peripherie und ist direkt mit dem Prozessor-Reset verbunden.

TLXINT*:

Interrupteingang. Hiermit lässt sich ein Interrupt erzeugen (aktiv Low). An diesen Eingang lässt sich ein Interrupt  Ausgang mit Totempole-Struktur oder mehrere Open-Collector-Ausgänge zusammen mit einem Pullupwiderstand anschliessen. Als Interrupteingang wird MFP6 verwendet. Die Register im MFP sind entsprechend zu programmieren.

Der TLX+ Anschluss lässt sich über eine 64pol. Schneidklemm-VG-Buchsenleiste mit Flachbandkabel auf die Erweiterungshardware bringen. Alternativ dazu kann auch eine 26pol. Stiftleiste für Pfostenstecker direkt eingelötet werden. Für den Anschluss von Grafik-LCDs sind nur die Leitungen 1 .. 18 erforderlich. Die Pinnummern der Grafik-LCD stimmen mit denen von TLX+ überein.

^

6.3 Serieller IF Port

Der serielle Port auf SCOTTY08 ist auf einen separaten 10pol. Pfostenstecker gelegt. Diese Signale haben alle TTL-Pegel und müssen für die meisten Anwendungen über Leitungstreiber entsprechend der gewünschten Interface-Norm geführt werden. Solche Leitungstreiber für V.24, RS485, Stromschleife, usw. sind von MCT zu beziehen.

Steckerbelegung des seriellen Ports:

Richtung Pin Nr. Name Name Pin Nr. Richtung
  1 VCC (DSR*) 2 In
In 3 (RI*) RxD 4 In
Out 5 TxD DTR* 6 Out
Out 7 (RTS*) (CTS*) 8 In
In 9 DCD* GND 10  

Geklammerte Signale sind nicht benutzt oder auf festem Aktiv-Pegel. Mit ‘*’ sind Low-aktive Signale markiert.

VCC:

+5V Stromversorgung.

DSR*:

Data Set Ready: Der Partner von SCOTTY08 ist bereit. Dieses Signal kann genutzt werden, um SCOTTY08 vom Hostrechner aus zu resetten, dazu muss der Jumper J6 gesteckt sein. Da dieses Signal  Low-aktiv ist, kann dieses Feature nur in Verbindung mit entsprechender Software auf dem Hostrechner genutzt werden. Für PC-Kompatible steht mit dem Terminalprogramm TM (bei MCT erhältlich) ein entsprechendes Softwarewerkzeug zur Verfügung.

RI*:

Ring Indicator - ein Signal von Modems um einen Anruf zu signalisieren. Dieses Signal wird nicht benutzt.

RxD:

Receive Data - die Eingangsdaten.

TxD:

Transmit Data - die Ausgangsdaten.

DTR*:

Data Terminal Ready - signalisiert Bereitschaft von SCOTTY08. Dieses Signal ist auf MFP5 gelegt. Damit kann z.B. bei einem RS485 Treiber TxD auf den Bus geschaltet werden (0 = TxD durchgeschaltet, 1 = TxD blockiert).

RTS*:

Request To Send - signalisiert Empfangsbereitschaft an den Partner. Fest auf Low (aktiv / bereit) Potential gelegt.

CTS*:

Clear To Send - signalisiert Empfangsbereitschaft vom Partner. Dieses Signal wird nicht benutzt.

DCD*:

Data Carrier Detect - aktiv, wenn eine Verbindung über die Telefonleitung besteht. DCD* geht inaktiv (1) wenn die andere Seite auflegt. DCD* ist auf MFP4 gelegt.

GND:

Stromversorgung Masse.

^

6.4 Stromversorgungs-Stecker

Belegung des 4pol. Floppy-Power-Steckers:

Pin-Nummer Signal
1 VCC
2 GND
3 Power_Good
4 Power_Off / STDP*

VCC:

5V ±5% Stromversorgung

GND:

Masse der Stromversorgung

Power_Good:

Dieses Signal kann verwendet werden, um vom Netzteil eine Stromausfallsmeldung zu erhalten. Eine negative Flanke löst einen Interrupt aus. Es ist mit dem MFP7-Pin verbunden.

Power_Off:

Dieses Signal kann verwendet werden, um das Netzteil auszuschalten. Über die Alarmfunktion der RTC kann nach Ablauf einer programmierbaren Zeit das Netzteil wieder eingeschaltet werden.

^

7 GAL-Gleichungen

  PLD20V8 SCOTTY08 V1.00 BAGPIPE V1.00 ; Copyright © MCT Paul & Scherer GmbH

   CLK /DS   READ A12 /E6    A13 A14  A15 A16   A17   A18 GND
  /OE  /RST /WR  /RD  /IACK /ROM RAM /IO /BERR /DTACK A19 VCC

  RD.OE    = VCC
  RD       = RST + RD*WR*/DS + RD*WR*/A19 + DS* READ
  WR.OE    = VCC
  WR       = RST + RD*WR*/DS + RD*WR*/A19 + DS*/READ

  DTACK.OE = /E6*/IACK
  DTACK    = RAM*DS + ROM*DS + IO*/A12*DS
  BERR    := DS*/RAM*/ROM*/IO*/IACK + DS*IO*A12*/E6 + DS*IO*/A12*E6

  RAM.OE   = VCC
  RAM      = DS*/A19*/A18*/A17*/A16*/A15*/RD
           + DS*/A19*/A18*/A17*/A16*/A15*/WR
   #if RAM128 || RAM512
           + DS*/A19*/A18*/A17*/RD
           + DS*/A19*/A18*/A17*/WR
   #endif
   #if RAM512
           + DS*/A19*/RD
           + DS*/A19*/WR
   #endif

  ROM.OE   = VCC
  ROM      = RD*WR*DS*/A19*/A18*/A17*/A16*/A15*/A14*/A13*READ
   #if !ROM128 && !ROM256 && !ROM512
           + DS*A19*/A18*/A17*/A16
   #endif
   #if ROM128
           + DS*A19*/A18*/A17
   #endif
   #if ROM256
           + DS*A19*/A18
   #endif
   #if ROM512
           + DS*A19*/A17
           + DS*A19*/A16
           + DS*A19*/A15
           + DS*A19*/A14
   #endif

  IO.OE    = VCC
  IO       = A19*A18*A17*A16*A15*A14*/A13*DS
  IACK.OE  = VCC
  IACK     = A19*A18*A17*A16*A15*A14* A13*A12*READ*DS

  DESCRIPTION

  History
  -------
  1.10 Improve DTACK* timing.

  reset map
  ---------
   address-space  size    device (comment)
   -------------  ----    ----------------
   00000-01fff    8K      rom (resetvector @ 8XXXX)
   80000-+ROMSIZE ROMSIZE rom
   fe000-fffff    8K      iack space

   note: the first bytes of the rom must be:
   00 xx xx xx 00 08 xx xx
      --------       -----
      initial sp     start offset in rom

  standard map
  ------------
   address-space  size    device (comment)
   -------------  ----    ----------------
   00000-+RAMSIZE RAMSIZE ram
   80000-+ROMSIZE ROMSIZE rom
   fc000-fc0ff    256     latch 0
   fc100-fc1ff    256     latch 1
   fc200-fc2ff    256     input driver 0
   fc300-fc3ff    256     tlx ce0
   fc400-fc4ff    256     tlx ce1
   fc500-fc5ff    256     tlx ce2
   fc700-fc7ff    256     rtc
   fd600-fd6ff    256     mfp
   ff000-fffff    4K      iack space

  name conventions for different memory types
  -------------------------------------------
  00-110 :  32KB RAM +  64KB EPROM
  01-110 :  32KB RAM + 128KB EPROM
  02-110 :  32KB RAM + 256KB EPROM
  03-110 :  32KB RAM + 512KB EPROM
  10-110 : 128KB RAM +  64KB EPROM
  11-110 : 128KB RAM + 128KB EPROM Standard
  12-110 : 128KB RAM + 256KB EPROM
  13-110 : 128KB RAM + 512KB EPROM
  20-110 : 512KB RAM +  64KB EPROM
  21-110 : 512KB RAM + 128KB EPROM
  22-110 : 512KB RAM + 256KB EPROM
  23-110 : 512KB RAM + 512KB EPROM
^

8 Bei Problemen

Der Einplatinenrechner ist am Netzteil und PC angeschlossen, meldet sich aber nicht oder nicht korrekt.

Prüfen sie :

Die Stromversorgung auf dem Rechner (zum Beispiel direkt EPROM messen). Es müssen 4,75 bis 5,25V anliegen.

Die RESET* Leitung. Wenn sie immer Low ist könnte die 5 Volt Versorgungsspannung zu niedrig dimensioniert sein (Brummen, Störungen, Unterspannung, ...)

V.24-Kabel inklusive Handshakeleitungen.

Ist der Terminalemulator / das Terminal korrekt konfiguriert?

Kann die Software auf dem Einplatinenrechner überhaupt mit einem Terminalemulator kommunizieren? KatCe-Pascal kann es zum Beispiel nicht. Monitor und BASIC können es aber.

Die Batterie ist installiert. Der Einplatinenrechner meldet sich überhaupt nicht oder nur mit Line-Noise oder mit einer zyklisch wiederholten Startmeldung:

Tip:

Vielleicht ist die Konfiguration des Monitors falsch oder korrumpiert. Entfernen Sie alle Anschlüsse vom Board und schliessen Sie die Batterieversorgung kurz. Das kann am einfachsten mit einem Draht vom Pin 16 zum Pin 32 des RAMs für maximal eine Sekunde geschehen. Danach benutzt der Monitor seine voreingestellte Konfiguration.

^

9 Versionen

In diesem Kapitel werden alle Besonderheiten der aktuellen Version beschrieben. Vergewissern sie sich, dass dieses Handbuch mit der Version ihres SCOTTY08 übereinstimmt. Die Versionsnummer finden sie auf der Lötseite der Platine neben dem MCT-Logo.

Erweiterungen der Version 1.02:

Ein zusätzlicher Stromversorgungsstecker (Floppy-Power-Stecker) mit Power_Good- und Power_On-Funktion wurde vorgesehen. Um die Power_Good-Funktion zu nutzen, ist es erforderlich, die Verbindung des Pin 3 des Steckers J5 mit dem Pin 42 der CPU (U1) zu unterbrechen und statt dessen den Pin 3 des Steckers J5 mit dem Pin 29 des MFP (U3) zu verbinden.

Das DSR* Signal der V.24-Schnittstelle kann nun über den Jumper J6 mit der RESET*-Leitung verbunden werden.

Der Pin 1 des Jumpers J3 wurde mit dem WR* Signal belegt, um die Programmierung von Flash-Memories zu unterstützen.

Erweiterungen der Version 1.03:

Das Signal RD* vom GAL wurde mit dem Pin 24 OE* vom EPROM-Sockel verbunden. Von nun an sind Flash-Memories ohne Patch einsetzbar.

Erweiterungen der Version 2.00:

Die zweilagige Platine wurde in einen 4 Lagen Multilayer verwandelt. Dies verbessert die EMV-Verträglichkeit.

Die Stromaufnahme sinkt von typisch 350mA auf 160mA.

Die NMOS-CPU MC68008 wird durch die CMOS-CPU MC68EC000 ersetzt.

Optional kann die CPU mit 16MHz getaktet werden.

Die Versorgungsspannung wird durch eine grüne LED angezeigt.

Der HALT-Zustand der CPU wird über eine rote LED angezeigt.

Das RAM kann nun nur noch 128KB oder 512KB gross sein. Die 32KB Variante wurde ersatzlos gestrichen.

Der diskret aufgebaute Oszillator wurde duch ein IC ersetzt.

Der diskret aufgebaute Reset-Controller wurde durch ein IC ersetzt.

Der 32KB RAM-Typ hat nur 28 Anschlüsse. Der Baustein muss im 32pol. Sockel rechtsbündig eingesetzt werden. Dabei wird z.B. der Pin 1 des RAM in den Pin 3 des Sockels gesteckt.

Der EPROM Typ 27512 hat nur 28 Anschlüsse. Der Baustein muss im 32pol. Sockel rechtsbündig eingesetzt werden. Dabei wird z.B. der Pin 1 des EPROMs in den Pin 3 des Sockels gesteckt.

^

Anhang A NICO-Monitor

  1. Syntax
    1. Zeilenformat
    2. Operandengrösse
    3. Automatische Wiederholung
    4. Zahlendarstellung
    5. Zeichendarstellung
  2. Befehle
    1. Breakpoint löschen bc
    2. Breakpoint setzen bs
    3. Konfiguration ändern conf
    4. Speicherdump d
    5. S-Record-Dump ds
    6. Deviceparameter dev
    7. Environment env
    8. Steuerzeichen key
    9. Binärer Download l
    10. Download als S-Record ls
    11. Speichereditieren m
    12. Speicherbereich füllen mf
    13. Speicherbereich durchsuchen ms
    14. Speichertest mt
    15. Register lesen und schreiben r
    16. Programm ausführen s
    17. Programm starten sp
    18. Stellen und Lesen der Zeit time
    19. Trace einschalten ton
    20. Trace ausschalten toff
    21. Version Info ver
  3. Zeileneditieren
  4. Environmentvariablen
^

A1 Syntax

A1.1 Zeilenformat

Eine Zeile besteht aus einem oder mehreren Kommandos. Die einzelnen Kommandos sind durch ein Semikolon getrennt. Jedes Kommando besteht aus dem eigentlichen Kommandowort und - je nach Kommando - den Parametern. Die einzelnen Parameter sind durch ein oder mehrere Leerzeichen getrennt. Soll ein Leerzeichen oder Semikolon in einem Parameter verwendet werden muss dieser in Hochkommas (') eingeschlossen werden oder vor das Zeichen ein Backslash gestellt werden ('\ ' für ein Leerzeichen und '\;' für ein Semikolon).

^

A1.2 Operandengrösse

Einige Kommandos erlauben eine Angabe der Operandengrösse, die an den Befehl angehängt wird. Diese wird durch sizespec in der Befehlssyntax symbolisiert. Das folgende Beispiel dient zum Speichereditieren von Langworten.

ml 0

Folgende Grössenangaben sind möglich:

b: Die Operandengrösse ist 8Bit.
w: Die Operandengrösse ist 16Bit.
l: Die Operandengrösse ist 32Bit.

Die Standardeinstellung ist ein Byte.

^

A1.3 Automatische Wiederholung

Manche Kommandos verfügen über eine automatische Wiederholung. Wird ein solches Kommando einmal ausgeführt, lässt es sich mit Return einfach wiederholen. Der Wiederholmodus wird mit dem aktuellen Kommandowort am Beginn der Zeile vor dem Promt angezeigt.

^

A1.4 Zahlendarstellung

Das Zahlensystem ist von den einleitenden Zeichen abhängig:

$: hexadezimal
0x: hexadezimal
0: oktal
0d: dezimal

Alle anderen Zahlen werden je nach Konfiguration hexadezimal oder dezimal interpretiert. Die Standardeinstellung ist dezimal. Alle ausgegebenen Zahlen sind hexadezimal. Verschiedene Kommandos erfordern eine Bereichsangabe, dabei kann entweder die Obergrenze oder die Grösse des Bereichs angegeben werden. Wird die Bereichsgrösse angegeben wird diese mit '#' eingeleitet.

^

A1.5 Zeichendarstellung

Zur Zeichendarstellung von nicht direkt darstellbaren Zeichen dienen folgende Escapesequenzen:

\OOO: OOO ist eine maximal 3stellige Oktalzahl.
\xXX: XX ist eine maximal 2stellige Hexadezimalzahl.
^: Das folgende Zeichen ist ein Controlzeichen. Also z.B. ^A für Control-A.
\\: Der Backslash selbst
\E: ESC (escape)
\t: HT (horizontal tab)
\r: CR (carriage return)
\n: LF (linefeed)
\b: BS (backspace)
\f: FF (formfeed)
^

A2 Befehle

A2.1 Breakpoint löschen

bc

Dieser Befehl löscht einen zuvor gesetzten Breakpoint.Der ursprüngliche Speicherinhalt wird wieder restauriert.

^

A2.2 Breakpoint setzen

bs address

Der Breakpoint wird gesetzt. Der ursprügliche Inhalt der Speicherstelle wird gesichert. Es ist nötig, dass sich an der Breakpointadresse RAM befindet. Der Breakpoint wird mit einer illegalen Instruktion (0x4AFC) erzeugt, die beim Versuch sie auszuführen eine Exception Nummer 4 (illegal instruction) auslöst.

^

A2.3 Konfiguration ändern

conf [name [parameter]]

Dieses Kommando leitet mehrere Befehle ein, mit denen das Verhalten des Monitors modifiziert werden kann. Wird nur conf eingegeben, zeigt der Monitor die möglichen Konfigurationsbefehle an. Die einzelnen Befehle sind:

beepon: Wenn ein Steuerzeichen nicht definiert ist, wird ein Klingelzeichen (0x7) auf der Standardausgabe abgesetzt. Dies ist die Standardeinstellung.
beepoff: Wenn ein Steuerzeichen nicht definiert ist, wird die Ausgabe des Klingelzeichens unterdrückt.
dec: Zahlen die mit einer Ziffer ungleich 0 beginnen, werden dezimal interpretiert. Dies ist die Standardeinstellung.
hex: Zahlen die mit einer Ziffer ungleich 0 beginnen, werden hexadezimal interpretiert.
info: Die Konfiguration des Targetsystems wird angezeigt.
stdall devname: Das Device devname wird als Standardfehlerkanal, Standardeingabekanal und Standardausgabekanal verwendet.
stderr devname: Das Device devname wird als Standardfehlerkanal verwendet.
stdin devname: Das Device devname wird als Standardeingabekanal verwendet.
stdout devname: Das Device devname wird als Standardausgabekanal verwendet.
^

A2.4 Speicherdump

d[sizespec] start [end]/[#offset]

Anzeigen des angegebenen Speicherbereichs. Falls nur der Bereichsanfang angegeben wird, wird ein 256 Bytes grosser Bereich ausgegeben. Jede Zeile der Ausgabe besteht aus der Speicheradresse, dem Inhalt von 16 Bytes als Hexadezimalzahlen und den entsprechenden ASCII-Zeichen, falls diese darstellbar sind (ansonsten wird ein Punkt angezeigt). Dieser Befehl wird automatisch wiederholt.

^

A2.5 S-Record-Dump

ds start end/#offset

Ausgabe eines Speicherbereichs im S-Record-Format.

^

A2.6 Deviceparameter

dev [devname [baud [(7/8)(N/E/O)(1/2)]]]

Die Devicefunktion dient zum Setzen und Ausgeben von Deviceparametern. Wenn nur dev eingegeben wird, gibt NICO die implementierten Devices (Schnittstellen) aus. Wird der Devicename zusätzlich angegeben, zeigt NICO die Parameter des Devices an, also die Baudrate und die sonstigen Parameter. Wenn darüberhinaus die Baudrate und die sonstigen Parameter angegeben werden, werden diese gesetzt. Die sonstigen Parameter sind dabei optional. Bedeutung der sonstigen Parameter:

^

A2.7 Environment

env [name [entry]]

Der Befehl dient zur Verwaltung des Environments (deutsch auch Umgebungsbereich). Das Environment dient wie bei Betriebssystemen zum Abspeichern bestimmter Systemeinstellungen. Die im Environment gespeicherten Daten sind resetfest und bei Akkupufferung des RAMs auch gegen Versorgungsspannungsunterbrechungen geschützt. Je nach Anzahl der Parameter erfüllt das Kommando drei Funktionen:

Keine Parameter
Das gesamte Environment wird ausgegeben. Jeder Eintrag in einer eigenen Zeile.
Ein Parameter
Der als Parameter eingegebene Name wird - falls vorhanden - im Environment gelöscht.
Zwei Parameter
Es wird ein neuer Eintrag in das Environment übernommen. Falls ein Eintrag mit diesem Namen schon vorhanden ist wird er durch den neuen überschrieben.
^

A2.8 Steuerzeichen

key [name binding]

Die Steuerzeichensequenzen zum Zeileneditieren werden angezeigt wenn keine Parameter angegeben werden. Sind beide Parameter angegeben, wird die Steuerzeichensequenz binding als Code zum Aufrufen des Editierkommandos name gesetzt. Hiermit kann der Monitor an die Steuerzeichen verschiedener Terminals bzw. Hostrechner angepasst werden. Die Standardeinstellung benutzt die Steuerzeichensequenzen die von TM abgeschickt werden. Mit dem folgenden Beisiel wird das Zeichenlöschen-Kommando auf das entsprechenden ASCII-Steuerzeichen (127) gesetzt:

key delete-char \x7f

^

A2.9 Binärer Download

l [address]

Dieses Kommando dient zum Laden von Programmen oder sonstigen Daten ins RAM. Die Daten werden ohne ein Protokoll binär übertragen. Es wird zunächst gewartet bis ein Zeichen empfangen wurde. Das Ende der Übertragung wird dann durch einen Timeout bestimmt, d.h. wird eine bestimmte Zeit (etwa 1s) kein Zeichen empfangen, geht NICO davon aus, dass die Übertragung beendet ist und gibt die Anzahl der übertragenen Bytes aus. Falls ein Programm übertragen wurde, wird zusätzlich die Startadresse und Grösse der einzelnen Segmente ausgegeben. Bei falscher Relozierung des Programms gibt NICO die Warnung "Wrong relocation!" aus. Der Parameter address ist optional und gibt die Anfangsadresse des Downloads an. Die Standardeinstellung ist die erste freie Speicherstelle, sie ist systemabhängig. Mit conf info lässt sich der Anwender-Speicherbereich (User-RAM) anzeigen.

^

A2.10 Download als S-Record

ls

Dieses Kommando dient zum Laden von Programmen oder sonstigen Daten ins RAM im S-Record-Format. Es können alle S-Records empfangen werden.

^

A2.11 Speichereditieren

m[sizespec] address [value]

Dieses Kommando dient zum komfortablen Lesen und Schreiben des Speichers. Ist der optionale Parameter value vorhanden wird er an die angegebene Speicherstelle geschrieben und der Speicher wird nicht gelesen (Nurschreib-Modus). Mit diesem Kommando wird in einen speziellen Speichereditier-Modus umgeschaltet. Im Prompt wird die aktuelle Adresse und deren Inhalt (falls nicht Nurschreib-Modus) angezeigt. Folgende Tasten erhalten in diesem Modus eine spezielle - bzw. andere Bedeutung:

n/Cursor nach oben
Die Adresse wird um die Schrittweite erhöht.
p/Cursor nach unten
Die Adresse wird um die Schrittweite erniedrigt.
r
Die Adresse wird ständig gelesen und bei Änderungen der neue Wert angezeigt. Alle 16384 Leseaktionen wird ein Punkt als Funktionskontrolle ausgegeben. Das Kommando wird mit Control-C beendet.
q
Der Speichereditiermodus wird wieder verlassen.

Der Speichereditiermodus verfügt über folgende Befehle:

value
Die eingegebene Zahl wird an die aktuelle Speicherstelle geschrieben.
s step
Die Schrittweite wird auf step eingestellt. Die Standardeinstellung für die Schrittweite ist:
Bytes Worte Langworte
Schrittweite 1 2 4
a address/#offset
Die Adresse wird geändert.
b
Es werden Bytes editiert.
w
Es werden Worte (16Bit) editiert.
l
Es werden Langworte (32Bit) editiert.
m
Schaltet zwischen Nurschreib-Modus und Schreib-Lese-Modus um.
^

A2.12 Speicherbereich füllen

mf[sizespec] start end/#offset pattern

Der spezifizierte Speicherbereich wird mit dem Wert pattern gefüllt. Es ist darauf zu achten, dass nicht der monitoreigene Seicherbereich beschrieben wird.

^

A2.13 Speicherbereich durchsuchen

ms[sizespec] start end/#offset pattern

Der spezifizierte Speicherbereich wird nach dem Wert pattern durchsucht.

^

A2.14 Speichertest

mt [start end/#offset]

Testet den spezifizierten Speicherbereich. Wird kein Speicherbereich angegeben, testet der Monitor den gesamten nutzbaren Arbeitsspeicher.

Es ist darauf zu achten, dass nicht der monitoreigene Speicherbereich beschrieben wird, da der ursprüngliche Speicherinhalt verloren geht.

Der Speichertest ist sowohl auf Geschwindigkeit als auch auf Gründlichkeit optimiert. Der angegebene Bereich wird erst beschrieben und dann gelesen. Zur Funktionskontrolle wird jeweils ein 'w' bzw. 'r' ausgegeben.

Das Kommando wird mit Control-C beendet. Tritt ein Fehler auf, wird die Adresse mit geschriebenem und gelesenem Wert ausgegeben.

^

A2.15 Register lesen und schreiben

r [register [value]]

Je nach Anzahl der Parameter erfüllt das Kommando drei Funktionen:

Keine Parameter
Alle Register werden in kompakter Form ausgegeben.
Ein Parameter
Das spezifizierte Register wird angezeigt. Als Register kommen in Frage: d0-d7, a0-a7, pc, usp, sr.
Zwei Parameter
Das spezifizierte Register wird geschrieben.

Bei einem Neustart sind alle Register auf Null gesetzt, bis auf:

pc
Der Programmzähler wird auf die niedrigste freie Adresse gesetzt.
a7
Der Supervisor-Stackpointer wird auf die höchste freie Adresse gesetzt.
usp
Der User-Stackpointer wird 512 Bytes unter den Supervisorstackpointer gesetzt.
sr
Die Interrupts sind gesperrt und der Prozessor befindet sich im Supervisor-Modus.
^

A2.16 Programm ausführen

s [startaddress]

Das Programm wird ausgeführt. Wird die Startadresse nicht angegeben, startet die Ausführung an der aktuellen Programmzähleradresse. Dieses Kommando wird automatisch wiederholt.

^

A2.17 Programm starten

sp [arguments]

Das Programm startet an der aktuellen Programmzähleradresse. Dies sollte der Programmbeginn sein, damit das Environment und die eventuell angegebenen Argumente vom aufgerufenen Programm verarbeitet werden können. Das aufgerufene Programm muss sich an die Übergabekonventionen von ECO-C halten. Programme die mit dem C-Start von ECO-C übersetzt wurden tun das in jedem Fall. Das erste Argument entspricht "argv[0]", das zweite "argv[1]" . Damit ist es möglich einen Programmnamen in "argv[0]" zu übergeben.

^

A2.18 Stellen und Lesen der Zeit

time [a/c] [hh:mm[:ss] [dd-mm-yy]]

Dieses Kommando erfordert eine Realtimeclock. Ist kein Argument angegeben, wird die Uhr gelesen, ansonsten wird sie gestellt. Das Zeitformat muss exakt mit der Vorgabe übereinstimmen. Die Zeit kann ohne das Datum verändert werden. Die Sekundenangabe ist optional.

Ist der erste Parameter 'a' wird die Alarmzeit gestellt, falls die entsprechende RTC dies erlaubt. Die Zeitangabe muss im Bereich von einem Jahr auf die aktuelle Uhrzeit folgen. Sind keine weiteren Parameter angegeben, wird die Alarmzeit angezeigt.

Ist der erste Parameter 'c' wird ein anstehender Alarm zurückgesetzt.

^

A2.19 Trace einschalten

ton

Schaltet den Einzelschritt-Modus ein.

^

A2.20 Trace ausschalten

toff

Schaltet den Einzelschritt-Modus aus.

^

A2.21 Version Info

ver

Zeigt die NICO- und Flashloader-Version an.

^

A3 Zeileneditieren

NICO stellt komfortable Möglichkeiten zum Editieren von Zeilen zur Verfügung. Es wird ein Zeilenbuffer und eine History verwaltet. Liste der Editierkommandos mit ihrem Namen und die Standard Zeichensequenz:

arrow-up (\0\x48)
Cursor nach oben hat die gleiche Bedeutung wie "previous-history".
arrow-down (\0\x50)
Cursor nach unten hat die gleiche Bedeutung wie "next-history".
arrow-left (\0\x4d)
Cursor nach links hat die gleiche Bedeutung wie "backward-char".
arrow-right (\0\x4b)
Cursor nach rechts hat die gleiche Bedeutung wie "forward-char".
previous-history (^P)
Vorhergehende Zeile aus dem Historybuffer anzeigen.
next-history (^N)
Nächste Zeile aus dem Historybuffer anzeigen.
beginning-of-line (^A)
Aktuelle Position an den Anfang der Zeile setzen.
end-of-line (^E)
Aktuelle Position ans Ende der Zeile setzen.
forward-char (^F)
Aktuelle Position um ein Zeichen nach rechts setzen.
backward-char (^B)
Aktuelle Position um ein Zeichen nach links setzen.
delete-backward-char (\b)
Zeichen vor der aktuellen Position löschen.
delete-char (\0\x53)
Zeichen auf der aktuellen Position löschen.
kill-line (^K)
Zeile ab der aktuellen Position in den Zeilenbuffer übertragen.
yank-line (^Y)
Zeilenbuffer an der aktuellen Position ausgeben.
kill-region (^W)
Übertragen des Bereichs von der Marke bis zur aktuelle Position in den Zeilenbuffer.
copy-region (\Ew)
Kopieren des Bereichs von der Marke bis zur aktuelle Position in den Zeilenbuffer.
set-mark (\E.)
Marke an der aktuellen Position setzen.
line-termination (\n)
Zeilenende Zeichensequenz.
alt-line-termination (\r)
Alternative Zeilenende Zeichensequenz.

Zwei Zeichen haben eine feste Bedeutung:

Control-C
Damit kann jedes Kommando abgebrochen werden.
Control-\
Es wird ein Reset erzeugt.
^

A4 Environmentvariablen

Folgende Environmentvariablen werden ausgewertet:

after-init
Die Copyright-Meldung wird nach dem Ausführen der autoexec-Befehle ausgegeben. Dies ist z.B. sinnvoll falls die Baudrate verändert wird.
autoexec
Dieser Eintrag wird nach jedem Reset ausgeführt. Im folgenden Beispiel wird ein Environmenteintrag gesetzt, der das Programm im RAM nach jedem Reset mit dem Parameter "hello" startet:

env autoexec 'sp hello'

autoexec1 - autoexec9
Der Eintrag wird nach dem autoexec-Eintrag ausgeführt, wenn die Anzahl der Resets mit der Endziffer übereinstimmt. Die Resets müssen in einem Abstand von kleiner als 0,5s erfolgen.
init-term
Die angegebene Zeichenkette wird zur Initialisierung über "stdout" ausgegeben.
prompt
Die angegebene Zeichenkette wird als Prompt verwendet.
quiet
Die Startmeldung wird unterdrückt wenn dieser Eintrag gesetzt ist.
stderr
Das angegebene Device wird als Standardfehlerkanal verwendet.
stdin
Das angegebene Device wird als Standardeingabekanal verwendet.
stdout
Das angegebene Device wird als Standardausgabekanal verwendet.
^

Anhang B FLASH-Entwicklungspaket

  1. Allgemein
  2. Der Flashloader
  3. FLASH programmieren
  4. NICO ins FLASH programmieren
  5. Beispielprogramm
  6. Programmentwicklung mit FLASHs
^

B1 Allgemein

Seit 12/2002 wird ein neuer Flashloader ausgeliefert. Wenn Sie noch ein Board mit der alten Version haben, können Sie den Update selbst vornehmen.

-> Neuer Flashloader und neues flashing/flashw

Dieses Paket ermöglicht ein komfortables Arbeiten mit Flash-Memories. Es umfasst einen Flashloader, Downloadsoftware und Beispielroutinen in 'C' um das FLASH auch aus dem Anwendungsprogramm heraus modifizieren zu können. Die mitgelieferten Beispielroutinen bieten blockweises Löschen, Lesen und Schreiben sowie Identifikationsfunktionen um den Typ des verwendeten FLASH-Chips direkt zur Laufzeit festzustellen.

Im Verzeichnis flashent auf der CD befinden sich folgende Verzeichnisse und Dateien:

Verzeichnis sample

^

B2 Der Flashloader

Der Flashloader ist ein Programm, welches im ersten Block des FLASH liegt. Aufgabe des Flashloaders ist es entweder ein lauffähiges Programm von der seriellen Schnittstelle entgegenzunehmen und ins FLASH zu programmieren oder ein sich bereits im FLASH befindliches Programm zu starten.

Befehle des Flashloaders

?/h: Es wird ein Hilfetext mit einer kurzen Beschreibung der Befehle auf dem Bildschirm angezeigt.
X: Startet den Flashloader erneut. Ist ein Programm im FLASH, so wird dieses nach ca. 1s automatisch gestartet.
i: Liefert Informationen zum Target und zu dem bestückten FLASH-Typ.
V: Gibt die Copyright-Meldung mit der Versionsnummer des Flashloaders auf dem Bildschirm aus.
dev tty0 <r>: Mit diesem Befehl lässt sich die Baudrate der ersten seriellen Schnittstelle verändern. Hiermit kann die Programmiersoftware auf dem PC den Flashloader auf die schnellstmögliche Übertragung einstellen.
l: Der Flashloader ist für einen herkömmlichen Download mit download.bat bereit.
0/1/2/3/4/5/6/7: Der Block mit der angegebenen Nummer wird gelöscht.
L <a> <l>: L startet den Flashloader für einen Download mit Checksummenberechnung und einer Blockübertragung. Die Parameter a (Startadresse) und l (Anzahl der Bytes) sind optional. Wird keine Startadresse angegeben, so benutzt der Flashloader die niedrigste Adresse die im FLASH programmierbar ist.
E <a>: E löscht ohne den Parameter a (Startadresse) alle Blöcke (2-7 bei AM29F010 bzw. 1-7 bei AM29F040). Wird eine Startadresse zum Löschen angegeben, so wird der entsprechende Block in dem diese Adresse fällt, gelöscht.
p <a> <l>: Druckt ohne Angabe von Parametern die ersten 256 Byte des ersten (AM29F040) bzw. zweiten (AM29F010) Blockes aus. Damit kann der Anwender überprüfen, ob ein Download korrekt abgelaufen ist bzw. der Block gelöscht ist. Mit den Parametern a und l kann die Startadresse und die Anzahl der zu druckenden Bytes angegeben werden.
g <a>: Startet ein Programm, welches sich im FLASH befindet. Ist kein Programm ins FLASH geladen, so stürzt der Flashloader unweigerlich ab! Mit a kann eine Adresse gesetzt werden, von wo aus der Programmstart erfolgen soll.

Syntax der Parameter

Die Parameter können in zwei unterschiedlichen Konventionen angegeben werden. Entweder wird eine normale Dezimalzahl benutzt, die auch genau so interpretiert wird, oder man gibt die Parameter als Hexadezimale Zahl mit 0x als führende Zeichenkette an (z.B. 0x08A000).

Starten des Flashloaders

Der Start des Flashloaders hängt davon ab, ob ein lauffähiges Programm im FLASH liegt oder nicht. Ist kein Programm im FLASH und sind die Blöcke für das Anwenderprogramm gelöscht, so startet der Flashloader automatisch nach einem Reset und meldet sich mit einer Copyrightmeldung und dem Hilfebildschirm. Befindet sich ein Programm im Block nach dem Flashloader, so meldet er sich nur, wenn er nach dem Reset (maximal ca. 1s) die Zeichenfolge "flashloader" (ohne die Anführungszeichen) über die serielle Schnittstelle empfängt. Ansonsten wird vom Flashloader das im FLASH gespeicherte Programm gestartet. Befindet sich aber kein lauffähiges Programm im FLASH, so bricht der Flashloader ab und kann erst durch einen erneuten Reset wieder zum Leben erweckt werden.

^

B3 FLASH programmieren

Download mit Flashing.exe oder flashw.exe

Auf der PC-Seite braucht man nur flashing oder flashw mit der zu ladenden Datei als Parameter aufzurufen (im Verzeichnis flashent auf der CD) und schon erledigt dieses Programm die notwendigen Einstellungen des Flashloaders. Anschliessend lädt dieses Programm die angegebene Datei über die serielle Schnittstelle auf den Targetrechner herunter. Dabei werden die Daten blockweise und mit einer Checksumme übertragen. Das Programm flashing/flashw versucht in Verbindung mit dem Flashloader die schnellstmögliche Baudrate zwischen Target und Host einzustellen.

Also z.B: flashw test.040

Sie werden dann aufgefordert, das Target einzuschalten bzw. zu resetten. Das Programm flashing/flashw versucht 60s lang den Targetrechner über die serielle Schnittstelle zu erreichen.

Schalter von Flashing.exe/flashw.exe

Über folgende Schalter können Sie das Verhalten des Programms beeinflussen.

-?: Gibt eine Kurzbeschreibung des Aufrufs auf dem Bildschirm aus.
-d/-device NAME: Mit diesem Schalter wird eingestellt welche serielle Schnittstelle verwendet werden soll (z.B. -d com2).
-s/-slowly: Beim Download wird generell mit 19200Baud übertragen.
-v/-verbose: Mit diesem Schalter werden noch zusätzliche Statusmeldungen angezeigt. Es ist auch möglich um noch mehr Informationen zu erhalten -vv anzugeben.

Standardmässig wird COM1 benutzt, der Schalter -v gesetzt und alle anderen Schalter sind ungesetzt.

Umgebung von Flashing.exe/flashw.exe

Es wird nur eine Variable verwendet. Mit der Umgebungsvariablen DOWNLOAD können Sie festlegen, welche serielle Schnittstelle des PCs für Downloads genutzt werden soll.

Z.B. Schnittstelle COM2: set DOWNLOAD=com2

Start eines Programms

Nachdem ein Programm ins FLASH programmiert wurde, wird es vom Flashloader automatisch ca. 1s nach dem Reset gestartet.

^

B4 NICO ins FLASH programmieren

Wenn Sie ein Anwendungsprogramm ins FLASH programmieren, wird der NICO-Monitor überschrieben.

Um den NICO-Monitor wieder zu verwenden, programmieren Sie ihn wie ein "normales" Programm, also flashing TARGET.010/040 (Sie finden den NICO für alle Targets auf der Download-Seite).

^

B5 Beispielprogramm

Es wird eine installierte Version von ECO-C oder WinECO-C vorausgesetzt.

^

B6 Programmentwicklung mit FLASHs

Während allen Programmier- und Löschoperationen ist das FLASH nicht normal lesbar. Daraus folgt, dass die eigentlichen Programmierroutinen nicht selbst aus dem FLASH gelesen werden dürfen. Durch einfaches Kopieren der Programmiersequenz vom FLASH ins RAM und abschliessendes aufrufen im RAM kann diese Einschränkung umgangen werden.

Der Inhalt des FLASH kann immer nur von 0xFFFF "herunterprogrammiert" werden. Bevor ein Block mit beliebigen Daten programmiert werden kann, muss er erst gelöscht werden.

Protection

AMD Flash-Memories lassen sich in mehreren gleichgrossen Blocks gegen Überschreiben in der Anwenderschaltung schützen. Dazu muss nach dem Programmieren der zu schützenden Blocks für jeden Block das entsprechende Schutzbit gesetzt werden. Für das An- und Abschalten sind erhöhte Spannungen notwendig - es ist deshalb nur mit einem Programmiergerät möglich die Protectionbits zu modifizieren.

Programmierung und Löschen

Die Programmierung der Flash-Memories erfolgt nach den untenstehenden Tabellen:

Kommando Adresse Daten Funktion
Reset 0x0100AAAA
0x01005554
0x0100AAAA
0xAAAA
0x5555
0xF0F0
1. Kommando
2. Kommando
3. Kommando

Diese Sequenz setzt die interne State Machine des FLASH auf den Grundzustand.

Kommando Adresse Daten Funktion
Hersteller 0x0100AAAA
0x01005554
0x0100AAAA
0x01000000
0xAAAA
0x5555
0x9090
xxxx
1. Kommando
2. Kommando
3. Kommando
Manufacturer
Typ Code 0x0100AAAA
0x01005554
0x0100AAAA
0x01000002
0xAAAA
0x5555
0x9090
xxxx
1. Kommando
2. Kommando
3. Kommando
Typ Code

Mit diesen Kommandos kann der Hersteller und der Typ festgestellt werden.

Kommando Adresse Daten Funktion
Schreiben 0x0100AAAA
0x01005554
0x0100AAAA
0x010xxxxx
0xAAAA
0x5555
0xA0A0
yyyy
1. Kommando
2. Kommando
3. Kommando
xxxxx = yyyy

Dieses Kommando schreibt ein Datenwort auf die gegebene Adresse. Durch Rücklesen des FLASH bis zur Übereinstimmung der geschriebenen und gelesenen Daten kann die Programmierzeit abgewartet werden.

Kommando Adresse Daten Funktion
Chip Erase 0x0100AAAA
0x01005554
0x0100AAAA
0x0100AAAA
0x01005554
0x0100AAAA
0xAAAA
0x5555
0x8080
0xAAAA
0x5555
0x1010
1. Kommando
2. Kommando
3. Kommando
4. Kommando
5. Kommando
6. Kommando
Sector Erase 0x0100AAAA
0x01005554
0x0100AAAA
0x0100AAAA
0x01005554
0x010xxxxx
0xAAAA
0x5555
0x8080
0xAAAA
0x5555
0x3030
1. Kommando
2. Kommando
3. Kommando
4. Kommando
5. Kommando
Sektoradresse

Mit diesen Kommandos kann das gesamte FLASH oder nur ein Sektor gelöscht werden. Beim Sektorlöschen wird nur der Sektor, in den die angegebene Adresse fällt, gelöscht. Das Löschen ist beendet, wenn sich aus dem gelöschten Bereich der Wert 0xFFFF lesen lässt.

Bootblocks

Nach dem Reset versucht die CPU den Resetvektor von der Adresse 0x00000000 zu lesen. Da beim Einsatz von unprogrammierten Flash-Memories an dieser Stelle nichts Vernünftiges steht, stellt sich die Frage: "Wie kommt das erste Pogramm ins FLASH".

Bei Variante 1 wird der Urlader oder der Monitor mit einem Programmiergerät geschrieben. Anschliessend können die entsprechenden Blocks gegen Überschreiben geschützt werden.

Die bequemere Variante bedient sich des Background-Debugging-Interfaces. Dabei wird die CPU mit einem Incircuit-Debugger in den Background-Debugging Mode (BDM) gebracht und führt unter Kontrolle eines Hostrechners (typischerweise ein PC oder eine Workstation) die Programmierung des FLASH aus.

Beispielsource

Das Headerfile 'flash.h' enthält alle notwendigen Deklarationen und muss in alle Programme eingebunden werden, in denen FLASH Funktionen benutzt werden.

Das File 'flash.c' wird einfach übersetzt und zur Applikation dazugelinkt.

Bei der Programmentwicklung für Flash-Memories sind die folgenden Punkte zu beachten:

^
www.mct.de: Produkte: Einplatinencomputer: SCOTTY08
IndexHomepage^