


![]() |
SCOTTY08 - Handbuch |
- Lieferumfang und Auslieferungszustand
- Inbetriebnahme
- Stromversorgung
- RESET und Exceptions
- Baugruppen
- Schnittstellen
- GAL-Gleichungen
- Bei Problemen
- 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:
- Das RAM ist standardmässig mit 128KB bestückt. Die Jumper sind entsprechend gesteckt.
- Der ROM Steckplatz ist unbestückt. Die ROM Select Jumper sind auf einen unbestimmten Typ eingestellt.
- Die TTL I/O Ports sind standardmässig mit HCT-Treibern bestückt.
- Die RTC (Real Time Clock) ist eine Option und wird separat zusammen mit der Lithiumzelle ausgeliefert. Nach der Installation der RTC muss die Zeit einmal eingestellt werden (z.B. mit dem Monitorprogramm).
- Die CPU Taktfrequenz beträgt 8MHz.
- Die MFP Taktfrequenz beträgt 2.4576MHz.
Folgende Teile sind im Lieferumfang des Developer Kit enthalten:
- SCOTTY08 Board mit 128KB RAM
- Monitorprogramm NICO im EPROM
- Die RTC mit Batterie
- IF232LP RS232 Schnittstellentreiber
- 10pol. Verbindungskabel zwischen IF232LP und SCOTTY08
- Serielles Kabel für PC (9pol. Nullmodemkabel)
- ECO-C Compilerpaket in der Version für SCOTTY08
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
![]()
Für die erste Inbetriebnahme sind folgende Komponenten nötig:
- Ein Terminal (oder PC mit Terminalemulations-Software)
- Ein V.24/RS232 Nullmodemkabel
- IF232LP RS232 Schnittstellentreiber mit 10pol. Verbindungskabel
- Ein Netzteil mit +5V stabilisiert, min. 500mA
- Monitorsoftware im EPROM des SCOTTY08
- SCOTTY08
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 Leistungsreserve, 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 belegtPin 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
- Syntax
- Befehle
- Breakpoint löschen bc
- Breakpoint setzen bs
- Konfiguration ändern conf
- Speicherdump d
- S-Record-Dump ds
- Deviceparameter dev
- Environment env
- Steuerzeichen key
- Binärer Download l
- Download als S-Record ls
- Speichereditieren m
- Speicherbereich füllen mf
- Speicherbereich durchsuchen ms
- Speichertest mt
- Register lesen und schreiben r
- Programm ausführen s
- Programm starten sp
- Stellen und Lesen der Zeit time
- Trace einschalten ton
- Trace ausschalten toff
- Version Info ver
- Zeileneditieren
- 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:
- Länge eines Zeichen entweder 7 oder 8 Bits.
- Parity-Bit entweder no Parity (N), oder even Parity (E), oder odd Parity (O).
- Anzahl der Stopbits entweder 1 oder 2. Bei verschiedener Hardware ist ein langes Stopbit nicht 2 sondern 1,5 Bits lang.
![]()
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
- Allgemein
- Der Flashloader
- FLASH programmieren
- NICO ins FLASH programmieren
- Beispielprogramm
- 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:
- flashing.exe: FLASH-Downloadprogramm für DOS
- flashw.exe: FLASH-Downloadprogramm für Windows (DOS-Box)
- crc.c: Sourcefile für die Checksummenberechnung
Verzeichnis sample
- flash.c: Sourcefile für die FLASH-Programmierung
- flash.h: Headerfile für flash.c
- hello/...: Beispielprogramm Hello, World
- list/...: Beispielprogramm Parameter Demo
- makefile: Makefile für die Beispiele
![]()
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.
Mit WinECO-C erzeugen Sie ein neues Projekt für Ihr Target mit einem einfachen Programm (z.B hello.c in WinECO-C/samples). Unter Einstellungen/Linker stellen Sie FLASH010 bzw. FLASH040 ein (je nach FLASH-Typ).
Mit ECO-C übersetzen Sie hello.c in ECO-C/samples für den entsprechenden FLASH-Typ mit:
ecoc -target IHR-TARGET -T flash010 hello.c -o hello.bin bzw. ecoc -target IHR-TARGET -T flash040 hello.c -o hello.binDer Compiler hat hello.bin erzeugt. Jetzt muss noch der Header in hello.bin entfernt werden, um ein reines Binär-Image zu erhalten:
mkrom hello.bin hello.010 bzw. mkrom hello.bin hello.040Programmieren Sie das FLASH mit flashing/flashw hello.010/040.
Resetten Sie das Target und testen Sie das Programm mit dem WinECO-C Terminal bzw. mit TM.
![]()
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
0x0100AAAA0xAAAA
0x5555
0xF0F01. Kommando
2. Kommando
3. KommandoDiese Sequenz setzt die interne State Machine des FLASH auf den Grundzustand.
Kommando Adresse Daten Funktion Hersteller 0x0100AAAA
0x01005554
0x0100AAAA
0x010000000xAAAA
0x5555
0x9090
xxxx1. Kommando
2. Kommando
3. Kommando
ManufacturerTyp Code 0x0100AAAA
0x01005554
0x0100AAAA
0x010000020xAAAA
0x5555
0x9090
xxxx1. Kommando
2. Kommando
3. Kommando
Typ CodeMit diesen Kommandos kann der Hersteller und der Typ festgestellt werden.
Kommando Adresse Daten Funktion Schreiben 0x0100AAAA
0x01005554
0x0100AAAA
0x010xxxxx0xAAAA
0x5555
0xA0A0
yyyy1. Kommando
2. Kommando
3. Kommando
xxxxx = yyyyDieses 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
0x0100AAAA0xAAAA
0x5555
0x8080
0xAAAA
0x5555
0x10101. Kommando
2. Kommando
3. Kommando
4. Kommando
5. Kommando
6. KommandoSector Erase 0x0100AAAA
0x01005554
0x0100AAAA
0x0100AAAA
0x01005554
0x010xxxxx0xAAAA
0x5555
0x8080
0xAAAA
0x5555
0x30301. Kommando
2. Kommando
3. Kommando
4. Kommando
5. Kommando
SektoradresseMit 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:
- Das Programm muss bei mit dem Switch -T LINKERSCRIPT übersetzt werden.
- Das Linkerscript muss unbedingt dem bestückten FLASH-Typ entsprechen. Also flash010 für AM29F010 und flash040 für AM29F040 verwenden.
- Der Header muss mit "mkrom OBJECT-FILE FLASH-IMAGE" entfernt werden.
www.mct.de: Produkte: Einplatinencomputer: SCOTTY08