[go: up one dir, main page]

DE69230642T2 - Automatischer programmierungs-mikrokontroller mit gespeichertem befehl zur programm-steuerung von externem speicher und verfahren - Google Patents

Automatischer programmierungs-mikrokontroller mit gespeichertem befehl zur programm-steuerung von externem speicher und verfahren

Info

Publication number
DE69230642T2
DE69230642T2 DE69230642T DE69230642T DE69230642T2 DE 69230642 T2 DE69230642 T2 DE 69230642T2 DE 69230642 T DE69230642 T DE 69230642T DE 69230642 T DE69230642 T DE 69230642T DE 69230642 T2 DE69230642 T2 DE 69230642T2
Authority
DE
Germany
Prior art keywords
program
microcontroller
memory
instruction
programming
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69230642T
Other languages
English (en)
Other versions
DE69230642D1 (de
Inventor
Chao-Wu Chen
Greg Italiano
Sumit Mitra
Kurt Rosenhagen
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microchip Technology Inc
Original Assignee
Microchip Technology Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microchip Technology Inc filed Critical Microchip Technology Inc
Application granted granted Critical
Publication of DE69230642D1 publication Critical patent/DE69230642D1/de
Publication of DE69230642T2 publication Critical patent/DE69230642T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Microcomputers (AREA)

Description

    Hintergrund der Erfindung
  • Die vorliegende Erfindung bezieht sich allgemein auf Halbleitermikrokontroller, und insbesondere auf einen selbst programmierenden Mikrokontroller, sowie auf ein Verfahren zum Herbeiführen der Selbstprogrammierung eines Mikrokontrollers.
  • Mikroprozessoren haben sich zu komplexen Instrumenten und Maschinen entwickelt, die eine hochwertige, schnelle Echtzeitsteuerbefähigung erfordern. Statt große Mikroprozessoren mit einer 16- oder 32- Bit-Befähigung zusammen mit Unterbrechungstreiberchips, Zeitgeberchips, ROM-und RAM-Chips zu benutzen, ist die Fachwelt auf einen Einzelchipmikrokontroller übergegangen, bei dem alle Peripherieteile auf dem gleichen Chip eingebettet sind. Die Betriebsweise des Chips in einem Expansionsmodus ermöglicht das Erzielen der Vielseitigkeit aller chipintegrierten Merkmale. Mikrokontroller werden bei heutigen Anwendungen sehr verschieden verwendet, wobei fast täglich neue Anwendungen entdeckt werden. Bei mit der Hand gehaltenen Instrumenten, wie etwa einem winzigen Personenrufempfänger im Taschenformat spricht der Mikrokontroller auf empfangene Zeichen an, um sie zu interpretieren, einen Piepser zu erzeugen, um dem Benutzer eine ankommende Nachricht anzukündigen (oder auch nicht, falls der Benutzer einen nicht hörbaren Modus bevorzugt), und erzeugt zusammengesetzte Meldungen unter den mehreren letzten von jenen, die auf einer geeigneten Anzeige, typischerweise einer LCD, empfangen wurden. Der Mikrokontroller kann auch von seinem inneren Speicher aus irgendeine Nachricht oder die in einer gegebenen Zeitperiode empfangenen Nachrichten aufrufen. Der Chip wird auch bei anderen Instrumentierungen, wie etwa Meßgeräte und Testgeräte, verwendet, indem er zur Durchführung von Tausenden von Tests in der Lage ist, jeweils in einer Millisekunde oder darunter.
  • Weitere Anwendungen umfassen Tastaturkontroller für Personalcomputer, bei denen der Mikrokontroller dazu dient, Entlastung von vielen Aufgaben zu bringen, die früher vom Prozessor bearbeitet wurden. Der Chip führt ununterbrochen eine Reihe von Diagnoseprozeduren durch und meldet dem Prozessor, wenn er ein Problem erkennt. Bei anderen Personalcomputeranwendungen werden Mikrokontroller benutzt in Modems für die Befehlsinterpretation und Datenübertragung, in Druckerpuffern für das Hochgeschwindigkeitsausdrucken von Daten als Vorbereitung zum Treiben des Druckers mit erheblich niedrigerer Geschwindigkeit als derjenigen, mit der der Drucker arbeitet, oder sie werden benutzt bei Farbplottern, in Farbkopierern, in elektronischen Schreibmaschinen, Kabelfernseh-Anschlußausrüstungen, Rasensprinklerkontrollern, Kreditkarten- Fernsprachgeräte, Kraftfahrzeuganwendungen, wie etwa Motorsteuermodule, Anti- Blockierschutz-Bremssysteme, Kraftfahrzeugaufhängungssteuerungen zum gewünschten Einstellen eines weichen oder harten Fahrens je nach den Wünschen des Benutzers, und bei einer Menge anderer Anwendungen, die täglich von Gewerbetreibenden und Verbraucherkunden benutzt werden.
  • Ein Echtzeitmikrokontroller ist ein Mikrocomputer, der ausgelegt ist, schnelle Lösungen auf Signalverarbeitungsalgorithmen und andere numerisch intensive Berechnungen zu liefern, ebenso wie Echtzeitereignisse zu steuern, wie etwa das Öffnen und Schließen von Relais, das Steuern der Position und Geschwindigkeit eines Motors, und andere Problemlösungen wie die oben erwähnten. Die Zentralverarbeitungseinheit (CPU) des Mikrokontrollers arbeitet in Verbindung mit bestimmten Peripheriegeräten zum Zwecke solcher Steuerungen. Die Peripheriegeräte können Vorrichtungen umfassen, wie etwa Zeitgeber, Signalports, und Baudratengeneratoren, und anderes mehr.
  • Herkömmlicherweise arbeiten Mikrokontroller des Standes der Technik mit einem speziellen Test-Modus, um den chipintegrierten Programmspeicher zu programmieren. Dies erfordert spezielle Datenbank-Schemata und Brettschaltungen, um das Programmieren zu ermöglichen. Bei einer Anwendung des Standes der Technik liefert der Prozessor Befehle, um sich selbst zu programmieren, doch erfordert die Anfangsprogrammierung der selbstprogrammierenden Befehle in den Speicher dennoch einen Testmodus.
  • In dem Dokument "Research Disclosure", I. Bd. 308, No. 68, Dezember 1989, Havant GB, Seiten 9532-9532: "Circuitry for a Self-Programming OTP-EPROM Based Microcontroller System" wird ein sich selbstprogrammierender Mikrokontroller gemäß dem Oberbegriff des Anspruches 1 offenbart. Der Mikrokontroller programmiert sich selbst mit einem Programm, das durch einen Systembenutzer des Mikrokontrollers spezifiziert wird. Der Mikrokontroller erzeugt Steuersignale als Ergebnis der Durchführung von Programmen und Befehlen zum selektiven Steuern eines externen Systems, das durch den Benutzer bestimmt wird. Der Mikrokontroller ist mit einem Programmspeicher versehen, der mit einem Programm programmiert werden kann, das durch den Mikrokontroller ausgeführt werden soll.
  • Es ist Aufgabe der vorliegenden Erfindung, die Selbstprogrammierung des Mikrokontrollers zu erleichtern und ein vereinfachtes Selbstprogrammierungs-Setup zu schaffen, und insbesondere ein System und ein Verfahren zum Selbstprogrammieren des Programmspeichers des Mikrokontrollers bereitzustellen.
  • Diese Aufgaben werden durch den Mikrokontroller des Anspruches 1 und das Verfahren des Anspruches 3 gelöst. Weitere Merkmale der Erfindung sind im Unteranspruch offenbart.
  • Zusammenfassung der Erfindung
  • Kurz gesagt wird gemäß der Erfindung ein vereinfachtes Selbstprogrammierungs-Setup mit Hilfe eines Befehls geschaffen, durch den der Programmspeicher des Mikrokontrollers programmiert wird. Der Mikrokontroller wendet einen selbstinkrementierenden Zeiger und einen chipintegrierten Nur-Lese-Speicher (ROM) an, um das Programm zu speichern.
  • Im wesentlichen programmiert der Prozessor des Mikrokontrollers seinen eigenen Programmspeicher unter Benutzung des Befehls. Ein Zeiger zum Programmspeicher wird von dem Befehl benutzt, um das Programm des Programmspeichers zu programmieren, wobei der Zeiger zur Erleichterung des Durchschaltens des Programmspeichers in der Lage ist, sich selbst zu inkrementieren. Der Prozessor hat einen chipintegrierten festkodierten ROM mit einem Programm, das die den Programmspeicher programmierenden Befehle enthält, und andere Codes, um ein relativ einfaches selbstprogrammierendes setup zu ermöglichen.
  • Demgemäß ist es eine Hauptaufgabe der vorliegenden Erfindung, ein System und ein Verfahren zum Selbstprogrammieren des Programmspeichers eines Mikrokontrollers oder eines Prozessors zu schaffen.
  • Eine spezifischere Aufgabe der Erfindung besteht darin, einen Mikrokontroller bereitzustellen, der einen chipintegrierten, nicht löschbaren Speicher besitzt, welcher zum Speichern eines Befehls (und anderer Codes) benutzt wird, der die Selbstprogrammierung eines chipintegrierten löschbaren Programmspeichers des Mikrokontrollers einleitet, und der einen selbstinkrementierenden Zeiger besitzt, welcher gespeicherte Befehle des gewünschten Programms aus einem chipexternen Platz herausholt und sie in der richtigen Reihenfolge in aufeinanderfolgende Adressplätze des chipintegrierten Programmspeichers lädt. Eine weitere Aufgabe der Erfindung besteht darin, neue und verbesserte Verfahren zum Selbstprogrammieren von Mikrokontrollern bereitzustellen.
  • Kurze Beschreibung der Zeichnungen
  • Die obigen und weiteren Aufgaben, Merkmale, Aspekte und damit zusammenhängenden Vorteile der Erfindung werden durch Einbeziehung der nachfolgenden detaillierten Beschreibung der besten Art und Weise der praktischen Umsetzung der Erfindung verdeutlicht, wie sie derzeit in Aussicht genommen ist, und zwar in Verbindung mit den beigefügten Zeichnungen.
  • Fig. 1 ist ein Blockdiagramm des gesamten Mikrokontrollerchips, das eine bevorzugte Ausführungsform der vorliegenden Erfindung enthält;
  • Fig. 2 ist ein Zeitgabediagramm, das das interne Taktgabeschema des Mikrokontrollerchips der Fig. 1 veranschaulicht;
  • Fig. 3 umfaßt Teile (a), (b) und (c), bei denen es sich um vereinfachte Blockdiagramme von vier unterschiedlichen, wählbaren Oszillatormoden für den Mikrokontrollerchip der Fig. 1 handelt, wobei der Teil (c) im wesentlichen zwei dieser Moden definiert;
  • Fig. 4 ist ein Zeitgabediagramm der Befehlsabruf/-ausführungspipeline im Befehlszyklus des Mikrokontrollerchips der Fig. 1;
  • Fig. 5 ist ein Speicherabbild der verschiedenen Betriebsmodi des Mikrokontrollerchips der Fig. 1, welches durch Wählen unterschiedlicher Konfigurationen des Programmspeichers gewählt werden kann;
  • Fig. 6 ist ein Zeitgabediagramm für externes Programmspeicherlesen und -schreiben;
  • Fig. 7 ist eine als Beispiel gedachtes Befehlsdekodierabbild des Befehlssatzes des Mikrokontrollers der Fig. 1 in mnemonischen Code;
  • Fig. 8 ist ein vereinfachtes Blockdiagramm einer chipintegrierten Rücksetzschaltung für den Mikrokontroller;
  • Fig. 9 ist ein Zeitgabediagramm für einen Abschnitt der Rücksetzschaltung der Fig. 8;
  • Fig. 10 ist ein bevorzugter Programmieralgorithmus zur Verwendung beim Selbstprogrammieren des Mikrokontrollers;
  • Fig. 11 ist ein vereinfachtes Blockdiagramm des Selbstprogrammierers;
  • Fig. 12 ist ein Zeitgabediagramm für den Selbstprogrammierer;
  • Fig. 13 ist eine Tabelle, die ein Test-Modusregister für den Mikrokontroller veranschaulicht; und
  • Fig. 14 ist eine Tabelle die veranschaulicht, wie die Testauffangspeicheremulation der Konfigurationssicherungen des Mikrokontrollers organisiert ist, um die Konfiguration der Vorrichtung ohne Sprengen der Sicherungen zu ermöglichen.
  • Detaillierte Beschreibung
  • Nachfolgend wird die Erfindung im Zusammenhang mit einem EPROM-basierten 8-Bit- Mikrokontroller hoher Leistung beschrieben; doch geschieht dies nur beispielshalber und ohne die Absicht der Begrenzung der Erfindung. Bei einer der geeigneten Ausführungsformen wird der Mikrokontroller in Form eines Schaltungschips mit integriertem CMOS-Halbleiter hergestellt, der eine Zentraleverarbeitungseinheit (CPU) enthält, die einen 250 Nanosekunden (ns) Befehlszyklus hat, mit einem Array peripherer Betriebsmittel zum Durchführen komplexer Echtzeitsteueranwendungen. Einige der Steueranwendungen, für die eine solche Vorrichtung geeignet ist, sind im obigen Hintergrundteil dieser Beschreibung angegeben. Die EPROM-basierte Vorrichtung erlaubt es dem Benutzer, Codes bei einer mit Fensterausschnitt versehenen keramischen Gehäuseversion mit zwei parallelen Reihen (keramisches DIP oder CERDIP) zu entwickeln und zu testen; und nachdem dies geschehen ist, mit einer kostengünstigeren, einmalprogrammierbaren (OTP) Kunststoff-DP-Gehäuseversion in Produktion zu gehen.
  • Die Merkmale der CPU dieser als Beispiel gedachten Ausführungsform beinhalten vorzugsweise einen voll statischen Aufbau; einen 8-Bit breiten Datenpfad; 16-Bit breite Befehle (alle, Einzelwort); Einzelzyklusbefehle in den meisten Fällen und Zweizyklusbefehle in den anderen Fällen; 250 ns Zykluszeit bei 16 MHz oder höheren Frequenzen (beispielsweise 20 oder 25 MHz); einen einzelnen adressierbaren Megabit- Programmspeicherraum (in 64K · 16-Format); direktes, indirektes (mit Selbstinkrementiern und -dekrementieren), sofortiges und relatives Adressieren; und vier Betriebsmodi einschließlich der Mikrokontrollermodus, dem Sicherungs-Mikrokontrollermodus (codegeschützt), dem erweiterten Mikrokontrollermodus (sowohl interner als auch externer Programmspeicherzugriff), und dem Mikroprozessormodus (nur externer Programmspeicherzugriff).
  • Vorzugsweise besteht eine Großintegrationsvorrichtung mit: einem 32K-chipintegrierten EPROM-Programmspeicher (d. h. eingebettet in den Chip selber zusammen mit dem Mikrokontroller), 2K Allzwegregister (SRAM), spezielle Funktionsregister, einem Hardware- Stapelspeicher, externen/internen Interrupt-E/A-Zeitgeber/-zähler, Fangregister, Hochgeschwindigkeits-PWM-Ausgänge (10 Bit, 15,6 KHz) und einen seriellen Port (Universal-Synchron/Asynchron-Empfänger-Übertrager, oder OSART) mit Baudratengenerator.
  • Einige der Merkmale der hier zu beschreibenden Mikrokontrollerausführungsform, bei der mindestens einige der erfinderischen Aspekte Anwendung finden, umfaßt einen Überwachungszeitgeber mit seinem eigenem chipintegrierten RC-(Widerstand-Kapazität- Oszillator) für zuverlässigen Betrieb; einen energiesparenden Schlafmodus; einen chipintegrierten Einschaltzeitgeber mit Einschaltrücksetzmittel zum Verringern der externen Beschaltung; einen chipintegrierten Oszillatoreinschaltzeitgeber; wobei Sicherungswähleroszillatoroptionen einen Standard-Quarzoszillator, einen Niederfrequenz- Quarzoszillator und einen RC-Oszillator oder externen Taktgeber umfassen; und einen schmelzbaren Codeschutz.
  • Der als Beispiel genannte Mikrokontroller, bei dem die vorliegende Erfindung angewandt wird, ist ein solcher hoher Leistung, die teilweise auf bestimmte konstruktive Merkmale zurückzuführen ist, welche in herkömmlichen Rechen-Mikroprozessoren mit reduziertem Befehlsvorrat (RISC) vorhanden ist. Es wird eine modifizierte Harvard-Architektur verwendet, bei der auf Programme und Daten von getrennten Speichern aus zugegriffen wird (auf die jeweils entsprechend als Programmspeicher und Datenspeicher Bezug genommen wird). Die Bandbreite wird gegenüber der traditionellen Von-Neuman-Architektur verbessert, bei der Programm und Daten vom gleichen Speicher abgerufen werden. Die Trennung des Programms- und Datenspeichers erlaubt es auch, Befehle auf andere als 8-Bit breite Datenwörter zuzuschneiden. Im Mikrokontroller werden 16-Bit breite op-Codes benutzt, so daß überall Einzelwortbefehle möglich sind. Ein ganzer 16-Bit breiter Programmspeicher- Zugriffsbus ruft in einem einzelnen Zyklus einen 16-Bit-Befehl ab, und eine zweistufige Pipeline überlappt den Abruf und die Durchführung von Befehlen. Dementsprechend führen alle nachfolgend zu beschreibenden Befehle einen einzelnen Zyklus aus (250 ns bzw. 16 MHz), ausgenommen Programmzweige und spezielle Befehle zum Übertragen von Daten zwischen Programm- und Datenspeichern.
  • Der Mikrokontroller adressiert einen 64K · 16 Programmspeicherraum und = integriert einen 2K · 16 EPROM-Programmspeicher auf dem Chip. Die Programmausführung kann in einem Mikrokontrollermodus durchgeführt werden, der nur intern ist, oder aber in einem Mikroprozessormodus, der nur extern ist, oder in einem erweiterten Mikrokontrollermodus, der sowohl intern als auch extern ist. Datenspeicherplätze (Dateiregister), beispielsweise 256 solcher Stellen, werden direkt oder indirekt durch den Mikrokontroller adressiert. Spezialfunktionsregister einschließlich des Programmzählers werden im Datenspeicher abgebildet. Die Benutzung eines im wesentlichen orthogonalen (symmetrischen) Befehlssatzes ermöglicht die Durchführung jeder beliebigen Operation auf jedem beliebigen Register unter Verwendung irgendeines Adressiermodus.
  • Nachfolgend wird der Mikrokontroller unter Bezugnahme auf das Blockdiagramm eines Mikrokontrollerchips 10 der Fig. 1, neben anderen Figuren, beschrieben; doch ist es JUr den Leser hilfreich, zuerst das interne Taktgabeschema des Mikrokontrollers zu betrachten, das in Fig. 2 dargestellt ist. Der Mikrokontroller 10 kann eine externe Takteingabe (EC), neben anderen Oszillatoroptionen, an einem OSC1-Stift 12 eines Schaltungsblockes oder - moduls 15 annehmen, der eine Zeitgabeschaltung und zugehörige Schaltungen (Rücksetzen und Steuern) enthält, die jetzt des näheren beschrieben werden sollen. Intern wird die Takteingabe an den OSC1-Stift durch 4 geteilt, um vier Phasen (Q1, Q2, Q3 und Q4) zu erzeugen, jede mit einer Frequenz gleich derjenigen der Takteingabe/4 und mit einem Tastgrad von 25%. Falls der EC-Eingabemodus oder ein RC-Oszillatormodus (RC-Modus, weiter unten beschrieben) gewählt wird, liefert der OSC2-Stift 13 des Mikrokontrollerchips eine Taktausgabe (CLKOUT), die während Q3, Q4 hoch und während Q1, Q2 niedrig ist, wie unten auf dem Zeitgabediagramm der Fig. 2 dargestellt ist. Während die interne Chiprücksetzung aktiv ist, hält der Taktgenerator den Chip 10 (hier zuweilen auch als die Vorrichtung oder der Mikrokontroller bezeichnet) im Q1-Status, wobei CLKOUT niedrig angesteuert wird.
  • Die Funktion des OSC1-Stiftes 12 befindet sich, wie der externe Takteingang, im EC-Modus, und der Oszillatoreingang befindet sich im RC-Modus oder Quarz-/Resonatormodus (XT- Modus, weiter unten beschrieben). Der OSC2-Stift 13 arbeitet als Oszillatorausgang. Er schließt sich an einen Quarz oder Resonator im XT-Modus an, und im EC-Modus oder RC- Modus gibt er CLKOUT mit %4 der Frequenz am OSC1-Stift aus, und kennzeichnet die Befehlszyklusrate.
  • Die Oszillatoroptionen ermöglichen die Anpassung der Vorrichtung an die besondere Anwendung, in der sie benutzt werden soll. Beispielsweise verringert die RC-Oszillatoroption die Systemkosten, während eine LF-(niedrige Frequenz)-Quarz-/Resonatoroption Leistung spart. Die Oszillatoroptionen oder Modi werden unter Bezugnahme auf Fig. 3 beschrieben, welche drei Schaltungsdiagramme umfaßt, die mit (a), (b) und (c) für den EC-, RC- und XT- Modi (oder für den auf niedriger Frequenz arbeitenden Quarzoszillator LF) jeweils entsprechend gekennzeichnet sind. Irgendeiner dieser vier möglichen Modi kann durch annäherndes Definieren des Status eines Paares von EPROM-Konfigurationssicherungen FOSC1 und FOSC0 definiert werden, die in vorbestimmten Adressplätzen im Programmspeicher 17 (Fig. 1) abgebildet sind, und über die in dieser Beschreibung zusätzliche Details später mitgeteilt werden. Im Teil (a) der Fig. 3 wird die OSC1-Eingabe durch CNOS-Treiber für einen externen Takt angesteuert, so daß Stift 12 einen hochpegeligen Impedanz-CMOS-Eingang bildet. Die Schaltung 15a führt eine Division-durch-4-Funktion aus, und der OSC2-Stift 13 gibt CLKOUT aus. Der bevorzugte Frequenzbereich für diesen Modus erstreckt sich von DC bis 16 MHz.
  • Der in Teil (b) dargestellte RC-Modus erfordert eine Reihenschaltung aus einem externen Widerstand 18 und einem Kondensator 19, angeschlossen an eine Spannungsquelle VDD, wobei der Anschlußpunkt zwischen den RC-Komponenten an den OSC1-Stift 13 angeschlossen ist und der CLKOUT-Ausgang an den OSC2-Stift 13 angeschlossen ist. Die internen Komponenten der Schaltung 15b für diesen Modus sind so, wie dargestellt, wobei die Eingabe SLEEP zum Gatter 23 ein Befehl innerhalb des Befehlssatzes des Mikrokontrollers ist, wie noch zu beschreiben ist. Während der RC-Modus kostengünstig ist, unterliegt er der Veränderung der Frequenz des Oszillators bei der Energieversorgung, der Temperatur und von Chip zu Chip, wegen Prozeßveränderungen. Der Modus ist daher nicht eine geeignete Wahl für zeitgabeempfindliche Anwendungen, die eine exakte Oszillatorfrequenz verlangen. Der Frequenzbereich für diesen Modus reicht nominal von DC bis 4 MHz.
  • Bei dem XT-Modus von Teil (c) der Fig. 3 ist ein Quarz oder Keramikresonator 25 des Grundwellenmodus parallel an den OSC1-Stift 12 und den OSC2-Stift 13 angeschlossen, und der interne Basisaufbau der Schaltung 15c ist so beschaffen, wie dargestellt.
  • Falls ein Oberschwingungsmodusquarz benutzt wird (beispielsweise oberhalb von 20 MHz), würde eine Tankschaltung verwendet, die aus einer seriellen LC-Schaltung parallel zum Kondensator C2 verwendet wird, um die Verstärkung bei Grundwellenfrequenz abzuschwächen. Der Frequenzbereich XT ist 0,2-16 MHz. Der LF-Modus ist im wesentlichen der gleiche wie der XT-Modus, mit der Ausnahme, daß er für Quarze im Frequenzbereich von 32 KHz bis 200 KHz verwendet wird.
  • Bezugnehmend auf Fig. 4, welche die Befehlsabrufs-/Durchführungspipeline veranschaulicht, besteht ein Befehlszyklus im Mikrokontroller aus den Phasen Q1, Q2, Q3 und Q4 des internen Taktes, Abruf und Ausführung des Befehls werden im Pipeline-System so verarbeitet, daß der Abruf einen einzelnen Befehlszyklus besetzt, während der Dekodierbefehl zusammen mit dem Ausführungsbefehl einen weiteren Befehlszyklus besetzen (s. den unteren Abschnitt von Fig. 4). Die Pipeline-Verarbeitung führt jedoch im Ergebnis tatsächlich zur Durchführung jedes Befehls in einem einzelnen Zyklus, wie es in dem genannten Abschnitt von Fig. 4 dargestellt ist, mit wenigen Ausnahmen (z. B. solchen, bei denen es z. B. ein Befehl erfordert, den Programmzähler PC zu ändern, oder bei denen die Befehle TABLRD und TABLWT benutzt werden), was jetzt besprochen wird. Ein Abrufzyklus beginnt mit dem Inkrementieren des PC (in Fig. 1 allgemein mit 30 gekennzeichnet) in Phase Q1. Die Adresse wird an den Stiften AD15-AD0 (gekennzeichnet mit AD < 15 : 0 > , siehe 32 in Fig. 1), während Q2 für interne Ausführung angeboten wird, und der Befehl wird mit der abfallenden Flanke von Q4 verklinkt. Der abgerufene Befehl wird in einem Befehlsregister (IR) zwischengespeichert, das während der Phasen Q2, Q3 und Q4 dekodiert und ausgeführt wird. Der Datenspeicher (Speicher mit wahlfreiem Zugriff, oder RAM) 34 (Fig. 1) wird während Q2 gelesen (Lesen des Operanden) und während Q4 (Schreiben der Zieladresse) geschreiben.
  • Die in Fig. 4 mit ALE und bezeichneten Abschnitte (bei 35 von Fig. 1) sind bei Port- Stiften konfigurierbar, als Eingabe oder Ausgabe in Software, mit DTL-kompatibler Eingabe (jeweils entsprechend Bits 0 und 1 oder Port E). Im Mikroprozessormodus oder im erweiterten Mikrokontrollermodus des Betriebs (wird weiter unten besprochen) des Chips 10, ist der ALE-Stift der Adressen-Latch bzw. Auffangspeicher-Freigabeausgang, und die Adresse wird mit der absteigenden Flanke der ALE-Ausgabe verklinkt; und der -Stift ist, der Ausgabe-Freigabesteuerausgang (aktiv niederpegelig), wie durch den Balken über der Bestimmungsangabe gekennzeichnet ist).
  • Zusätzlich zu den getrennten Programm- und Daten-Speicherräumen 17 und 34 (Fig. 1), bei der durch den Mikrokontroller benutzten Harvard-Architektur ist ein Hardware- Stapelspeicher 37 vorgesehen, der von beiden Speicherräumen getrennt ist. Der Datenraum bei dieser als Beispiel dienenden Ausführungsform besitzt eine Größe von 256 Bites und ist im grundsätzlichen als statischer RAM implementiert. Der verbleibende Abschnitt des Datenraums besteht aus Spezialfimktionsregistern, die als individuelle Hardwareregister implementiert sind.
  • Bei der als Beispiel dargestellten Ausführungsform ist kein Datenspeicher-Adressbus oder Datenbus außerhalb des Chips verlegt, und somit können Speicherdaten nicht extern expandiert werden. Falls gewünscht, können jedoch Datensegmente im externen Programmspeicher erzeugt werden. Der 16-Bit breite chipintegrierte Programmspeicher 17 wird durch den 16-Bit Programmzähler 30 zum Befehlsabruf adressiert und durch ein 16-Bit breites Tabellenzeigerregister (TBLPTR) 38 zum Bewegen der Daten in und aus dem Datenraum adressiert. Bei der als Beispiel dienenden Ausführungsform ist der adressierbare Programmspeicher ein solcher von 64K · 16, und der chipintegrierte Programmspeicher ist ein EPROM-Array, das in der Größe 2K · 16 aufgebaut ist.
  • Der Mikrokontroller 10 kann in irgendeinem Modus der vier unterschiedlichen Modi arbeiten, die eine unterschiedliche Programmspeicherorganisation oder -konfiguration aufweisen, worauf weiter oben verwiesen worden ist. Diese Modi sind:
  • - (1) Ein Mikrokontrollermodus, in welchem nur eine interne Ausführung erlaubt ist und somit nur der chipintegrierte Programmspeicher 17 verfügbar ist. Jeder unternommene Zugriff auf den Programmspeicher über 2K hinaus erzeugt automatisch einen "kein Betrieb"-(NOP)-Befehl. Ein Satz von EPROM-Sicherungen (Konfigurationsbits) wird benutzt, um verschiedene Optionen zu wählen einschließlich dieser Betriebsmodi der Vorrichtung, das Vorsehen von Codesicherheit und Schreibschutz. Die Sicherungen ebenso wie der Testspeicher, die in der Fabrik zum Testen der Vorrichtung benutzt werden, sowie der Urladespeicher, der zum Speichern der Programme, für das Programmieren und Verifizieren verwendet wird, sind in diesem Modus zugänglich.
  • - (2) Ein geschützter Mikrokontrollermodus, bei dem es sich um den gleichen handelt wie der Mikrokontrollermodus mit der Ausnahme, daß der Codeschutz aktiviert ist, wird jetzt beschrieben.
  • - (3) Ein erweiterter Mikrokontrollermodus, in welchem der chipintegrierte Programmspeicher 17 (0-2K) und der externe Speicher (2K-64K) verfügbar sind, bei dem aber Sicherungen, der Testspeicher und der Urladespeicher nicht zugänglich sind. Das Ausführen schaltet automatisch auf externen Speicher um, falls die Programmspeicheradresse die höchste verfügbare Adresse im letztgenannten Speicher überschreitet.
  • - (4) Ein Mikroprozessormodus, bei dem der chipintegrierte Programmspeicher 17 nicht benutzt wird und die gesamten 64K des externen Speichers zum Programmieren extern abgebildet sind. Sicherungen, der Testspeicher und der Urladespeicher sind in diesem Modus nicht zugänglich.
  • Ein Speicherabbild der verschiedenen Modi ist in Fig. 5 dargestellt. Der geschützte Mikrokontrollermodus ist nicht dargestellt, weil er der gleiche wie der Mikrokontrollermodus ist, mit Ausnahme dessen, was oben angegeben ist.
  • Eine externe Programmspeicherschnittstelle, die benutzt wird, falls die externe Ausführung benutzt wird, hat Ports C, D und E (s. 32 und 35 in Fig. 1), die als ein Systembus für den externen Programmspeicherzugriff konfiguriert sind. Die Ports C und D bilden zusammen einen 16-Bit breiten multiplexierten Adreß- und Datenbus. Der Drei-Bit-E-Port gibt Steuersignale ALE (Address Latch Enable), (Output Enable) und (Write Enable) aus. Die Lese- und Schreibzeitgaben des externen Programmspeichers sind in Fig. 6 dargestellt. Ein Zugriffszyklus des externen Speichers umfaßt vier Oszillatorzyklen (zwischen steigenden Flanken aufeinanderfolgender Q1's). Während Q2 wird eine 16-Bit-Adresse an den Ports C und D dargeboten, und ALE wird bestätigt. Die Adreßausgabe wird durch die absteigende Flanke von ALE verklinkt. Bei einem Befehlsabruf oder einem Datenlesezyklus wird durch Q3 und Q4 bestätigt. Das Datum wird mit der absteigenden Flanke von verklinkt. Eine einzelne Oszillatorzyklustrennung zwischen und der Adressenausgabe garantiert externen Speichern ausreichend Zeit, um ihre Ausgabetreiber abzuschalten, ehe die Adresse auf dem Bus angesteuert wird. In einem Datenschreibzyklus (nur während des TABLWT-Befehls), der der Adreßausgabe während Q2 folgt, werden Daten während Q3 und Q4 in dem Bus angesteuert. wird während Q4 bestätigt, und die Datenausgabe ist für beide Flanken, die absteigende und ansteigende, zulässig.
  • Der Datenspeicher 34 (Fig. 1) auf dem Mikrokontrollerchip ist als 256 · 8-Speicher organisiert, und auf ihn wird über einen internen 8-Bit-Datenbus 40 und einen 8-Bit- Datenspeicher-Adreßbus 42, der von dem Befehlsregister 45 abgeleitet ist, zugegriffen. Das Adressieren erfolgt über den Direktadreßmodus oder durch den Indirektadreßmodus unter Benutzung von Dateiwählregistern als Zeigerregister. Alle Register bis auf einige wenige (beispielsweise TBLATH (Tabellenauffangspeicher-Hochpegelbyte), TBLATL (Tabellenauffangspeicher-Niederpegelbyte)), Spezialfunktionsregister (wie etwa W (Akkumulator), RTCC, Programmzähler und Ports), sind im Datenspeicher abgebildet, und die restlichen Datenspeicher sind als statischer RAM implementiert. Der Überwachungszeitgeber und der Stapelspeicherzeiger ebenso wie TBLATH und TBLATL sind nicht adressierbar.
  • Im Befehlssatz für den Mikrokontroller ist jeder Befehl ein einzelnes Wort, 16 Bits breit; und so gut wie alle Befehle werden in einem einzelnen Befehlszyklus ausgeführt. Der Befehlssatz besteht aus 55 Befehlen; er ist hoch orthogonal und in Datenbewegungsoperationen, arithmetische und logische Operationen, Bitmanipulationsoperationen, Programmsteueroperationen und Spezialsteueroperationen gruppiert. Der orthogonale Befehlssatz ermöglicht das Lesen und Schreiben von Spezialfunktionsregistern, wie etwa PC- und Statusregistern. Die Befehle, abgefaßt im mnemonischen Code, und ihre Beschreibungen sind wie folgt abgefaßt (es wird auch auf das Befehlsdekodierabbild von Fig. 7 verwiesen).
  • - ADDLW (Add literal to W): Die Inhalte des W-Registers 47 werden dem 8- Bit-Literalfeld (konstante Daten) "k" 49 hinzugefügt, und das Ergebnis wird im W-Register abgelegt.
  • - ADDWF (Add W to f): Füge die Inhalte des W-Registers 47 der Datenspeicherstelle in "f" hinzu (Register-Dateiadresse). Falls "d" (destination select) den Wert 0 hat, wird das Ergebnis im W-Register gespeichert. Falls "d" den Wert 1 hat, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - ADDWFC (Add W and Carry to f): Füge das W-Registerflag und das Übertragsflag der Datenspeicherstelle "f" hinzu. Falls "d" den Wert 0 hat, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert 1 hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt.
  • - ANDLW (AND-literal to W): Der Inhalt des W-Registers wird mit dem 8-Bit- literal "k" einer UND-Verknüpfung unterzogen. Das Ergebnis wird im W- Register abgelegt.
  • - ANDWF (AND W with f): man UND-verknüpfe das W-Register mit Datenspeicherstelle "f". Falls "d" 0 ist, wird das Ergebnis im W-Register gespeichert. Falls "d" den Wert 1 hat, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - BCF (Bit Clear f)9: Bit "b" (Bitadresse innerhalb des 8-Bit-Dateiregisters) in Datenspeicherstelle "f" wird auf 0 rückgesetzt.
  • - BSF (Bit Set f): Bit "b" in Datenspeicherstelle "f" wird auf 1 gesetzt.
  • - BTFSC (Bit-Test, skip if clear): dies kann ein einzelner der wenigen Zweizyklusbefehle sein. Falls Bit "b" in Datenspeicherstelle "f" den Wert "0" hat, dann wird der nächste Befehl übersprungen. Falls Bit "b" den Wert "0" hat, wird der nächste Befehl, der während der aktuellen Befehlsausführung abgerufen worden ist, ausgeschieden, und eine NOP (No Operation) wird anstelle der Ausführung dieses Zweizyklusbefehls ausgeführt.
  • - BTFSS (Bit-Test, skip if set): Falls das Bit in "b" in der Datenspeicherstelle "f den Wert "1" hat, wird der nächste Befehl, der während der aktuellen Befehlsausführung abgerufen worden ist, ausgeschieden, und eine NOP wird anstelle der Durchführung dieses Zweizyklusbefehls durchgeführt.
  • - BTG (Bit Toggle f): Bit "b" in Datenspeicherstelle "f" wird invertiert.
  • - CALL (Subroutine Call): Dies ist ein Zweizyklusbefehl. Subroutinenaufruf innerhalb von 8K-Hauptspeicherseite. Zuerst wird die Rückkehradresse (PC + 1) in den Stapelspeicher geschoben. Der Dreizehn-Bit-Wert wird in PC-Bits < 12 : 0 > geladen. Dann werden die oberen 8 Bits des PC in PCLATH kopiert (program counter high holding latch).
  • - CLRF (Clear f and Clear d): Die Inhalte der Datenspeicherstelle "f" werden auf 0 gesetzt. Falls "d" den Wert "0" hat, werden die Inhalte beider Datenspeicherstellen "f" und W-Register auf "0" gesetzt. Falls "d" den Wert "1" hat, wird nur der Inhalt der Datenspeicherstelle "f" auf "0" gesetzt.
  • - CLRWDT (Clear Watchdog Timer): Der Überwachungszeitgeber (WDT) und der Prescaler des WDT werden rückgesetzt. Die CPU-Statusbits TO (tome-out) und PD (power-down) werden gesetzt.
  • - COMF (Complement f): Der Inhalt der Datenspeicherstelle "f" wird komplementiert. Falls "d" den Wert "0" hat, wird das Ergebnis in W gespeichert. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - CPFSEQ (Compare f with W; skip if f = W): Falls der Inhalt der Datenspeicherstelle "f" gleich dem Inhalt des W-Registers ist, wird der nächste Befehl, welcher während der aktuellen Befehlsausführung aufgerufen wurde, übersprungen (ausgeschieden), und statt dessen wird eine NOP durchgeführt, wodurch ein Zweizyklusbefehl gemacht wird.
  • - CPFSGT (Computer f with @, skip if f > W): Falls der Inhalt der Datenspeicherstelle "f"> als der Inhalt des W-Registers ist, wird der nächste Befehl, der während der aktuellen Befehlsausführung abgerufen worden ist, übersprungen (ausgeschieden), und eine NOP wird statt dessen durchgeführt, wodurch ein Zweizyklusbefehl gemacht wird.
  • - DAW (Decimal Adjust W Register): Der 8-Bit-Wert im W-Register, der sich aus der früheren Addition von zwei Variablen ergab (jeder in BCT- (binärkodierten Dezimal)-Format gepackt, wird abgestimmt, und ein korrekt gepacktes BCT-Ergebnis wird erzeugt. Falls "d" den Wert "0" hat, wird das Ergebnis im W-Register und in der Datenspeicherstelle "f" abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis nur in der Datenspeicherstelle "f" abgelegt.
  • - DECF (Decrement f): Datenspeicherstelle "f" dekrementieren. Falls "d" den Wert "0" hat, wird das Ergebnis im W-Register gespeichert. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - DECFSZ (Decrement f, skip if 0): Der Inhalt der Datenspeicherstelle "f" wird dekrementiert. Falls "d" den Wert "0" hat, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt. Falls das Ergebnis "0" ist, wird der nächste Befehl, der bereits aufgerufen worden ist, durch Ausscheiden übersprungen, und eine NOP wird statt dessen durchgeführt, wodurch ein Zweizyklusbefehl gemacht wird.
  • - DCFSNZ (Decrement f, skip if not 0): Der Inhalt der Datenspeicherstelle "f" wird dekrementiert. Falls "d" "0" ist, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt. Falls das Ergebnis nicht "0" ist, wird der nächste Befehl, welcher während der aktuellen Befehlsausführung aufgerufen worden ist, ausgeschieden. Eine NOP wird statt dessen durchgeführt, wodurch ein Zweizyklusbefehl gemacht wird.
  • - GOTO (Unconditional Branch): Dies ist ein Zweizyklusbefehl. Er erlaubt eine nicht bedingte Abzweigung irgendwo innerhalb einer 8K- Hauptseitenspeichergrenze. Der dreizehnte Bit-Immediatwert wird in PC-Bits geladen. Dann werden die oberen 8 Bits von PC in PCLATH geladen.
  • - INCF (Increment f): Der Inhalt der Datenspeicherstelle "f" wird inkrementiert. Falls "d" "0" ist, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt.
  • - INCFSZ (Increment f, skip if 0): Der Inhalt der Datenspeicherstelle "f" wird inkrementiert. Falls "d" den Wert "0" hat, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt. Falls das Ergebnis den Wert "0" hat, wird der nächste Befehl, der während der aktuellen Befehlsausführung abgerufen worden ist, übersprungen, "ausgeschieden", und eine NOP wird statt dessen durchgeführt, wodurch ein Zweizyklusbefehl gemacht wird.
  • - INFSNZ (Increment f, skip if not 0): Der Inhalt der Datenspeicherstelle "f wird inkrementiert. Falls "d" nicht "0" ist, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt. Falls das Ergebnis nicht "0" ist, wird der nächste Befehl, während der aktuellen Befehlsausführung abgerufen worden ist, ausgeschieden, und eine NOP wird statt dessen durchgeführt, wodurch ein Zweizyklusbefehl gemacht wird.
  • - IORLW (Inclusive OR literal with W): Der Inhalt wird einer Inklusiv- ODER- Verknüpfung mit dem 8-Bit-Literal "k" unterzogen. Das Ergebnis wird im W- Register abgelegt.
  • - IORWF (Inclusive OR W with f): Inklusiv- ODER-Verknüpfung des W- Registers mit der Datenspeicherstelle "f". Falls "d" den Wert "0" hat, wird das Ergebnis im W-Register gespeichert. Falls "d" der Wert "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - LCALL (Long Call): Ermöglicht einen nicht bedingten Subroutinenaufruf nach irgendeiner Stelle innerhalb des externen 64k-Programmspeicherraums. Die Rückadresse (PC + 1) wird zuerst auf den Stapelspeicher geschoben, und dann wird eine 16-Bit-Bestimmungsadresse in den PC geladen. Die unteren 8 Bits der Bestimmungsadresse werden in den Befehl eingebettet. Die oberen 8 Bits des PC werden vom PCLATH geladen.
  • - MOVFP (Move f to p): Bewege Daten von der Datenspeicherstelle "f" zur Datenspeicherstelle "p" (periphere Registerdateiadresse). Die Stelle "f" kann sich irgendwo im 256 Worte enthaltenden Datenraum befinden, während die Stelle "p" eingegrenzt ist. Entweder, "p" oder "f", kann das W-Register sein, und beide von ihnen, "f" und "p" können indirekt adressiert werden.
  • - MOVLB (Move Literal to BSR): Die Konstante wird in das BSR (Bankwählregister) geladen. Nur die unteren vier Bits des BSR sind physikalisch implementiert.
  • - MOVLW (Move Literal to W): Das 8-Bit-Literal "k" wird in das W-Register geladen.
  • - MOVPF (Move P to F): Bewege Daten von der Datenspeicherstelle "p" zur Datenspeicherstelle "f". Die Stelle "f" kann sich irgendwo im Datenspeicherraum von 256 Bytes befinden, während die Stelle von "p" eingegrenzt ist. Entweder, "p" oder "f" kann das W-Register sein.
  • - MOVWF (Move W to f): Bewege Daten vom W-Register zur Datenspeicherstelle "f". Die Stelle "f" kann sich irgendwo im Datenspeicherraum von 256 Worten befinden.
  • - NEGW (Negate W): Die Inhalte des W-Registers werden unter Benutzung des Zweierkomplements negiert. Falls "d" "0" ist, wird das Ergebnis im W- Register und in der Datenspeicherstelle "f" abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis nur in der Datenspeicherstelle "f" abgelegt.
  • - NOP (No Operation): Keine Operation.
  • - RETFIE (Return from Interrupt): Dies ist ein Zweizyklusbefehl, der vom Interrupt zurückkehrt. Im Stapelspeicher wird der oberste Speicherinhalt abgehoben, und DOS (obere Schicht des Stapelspeichers) wird in PC abgelegt. Interrupts werden durch Räumen eines GLINTD-Bits (global interrupt disable) aktiviert.
  • - RETLW (Return Literal to W): Dies ist ein Zweizyklusbefehl. Das W-Register wird mit dem 8-Bit-Literal "k" geladen. Der PC wird von der TOS (der Rückkehradresse) geladen. Der hochpegelige Adreßauffangspeicher (PCLATH) bleibt unverändert.
  • - RETURN (Return from Subroutine): Dies ist ein Zweizyklusbefehl, der von der Subroutine aus zurückgekehrt. Im Stapelspeicher wird die oberste Schicht entladen und die TOS wird in den PC geladen.
  • - RLCF (Rotate Left f through Carry): Der Inhalt der Datenspeicherstelle "f" wird durch das Übertragsflag um ein einzelnes Bit nach links gedreht. Falls "d" den Wert "0" hat, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in die Datenspeicherstelle "f" zurückgespeichert.
  • - RLNCF (Rotate Left f (no carry)): Der Inhalt der Datenspeicherstelle "f" wird um ein einzelnes Bit nach links gedreht. Falls "d" "0" ist, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in die Datenspeicherstelle "f" rückgespeichert.
  • - RRCF (Rotate Right f through Carry): Der Inhalt der Datenspeicherstelle "f" wird durch das Übertragsflag um ein einzelnes Bit nach rechts gedreht. Falls "d" "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt.
  • - RMCF (Rotate Right f (no carry): Der Inhalt der Datenspeicherstelle "f" wird um ein einzelnes Bit nach rechts gedreht. Falls "d" "0" ist, wird das Ergebnis im W-Register abgelegt. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt.
  • - SETF (Set f and Set d): Falls "d" "0" ist, werden sowohl die Datenspeicherstelle "f" und das W-Register auf die höchste Stelle der Universaldateiregister gesetzt, die als statischer RAM implementiert sind. Falls "d" den Wert "1" hat, wird nur die Datenspeicherstelle "f" auf die genannte Stelle gesetzt.
  • - SLEEP: Das Abschalt-( )-Statusbit wird geräumt; das Zeitablauf-( )- Statusbit wird gesetzt, und der Überwachungszeitgeber (WDT) sowie sein Vorskalierer werden geräumt. Der Prozessor wird dadurch in den SLEEP- Modus bei gestopptem Oszillator gebracht.
  • - SUBLW (Subtract W from literal): Der Inhalt des W-Registers wird von dem 8-Bit-Literal "k" subtrahiert. Das Ergebnis wird im W-Register abgelegt.
  • - SUBWF (Subtract W from f): Subtrahiere (Zweierkomplementverfahren) das W- Register von der Datenspeicherstelle "f". Falls "d" den Wert "0" hat, wird das Ergebnis im W-Register gespeichert. Falls "d" den Wert "1" hat, wird das Ergebnis in die Datenspeicherstelle "f" rückgespeichert.
  • - SUBWFB (Subtract W from B with Borrow): Subtrahiere (Zweierkomplementmethode) W-Register und das Übertragsflag (Borgen) von der Datenspeicherstelle "f". Falls "d" "0" ist, wird das Ergebnis im W-Register gespeichert. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - SWAPF (Swap f): Die oberen und unteren Tetraden der Datenspeicherstelle "f" werden ausgetauscht. Falls "d" den Wert "0" hat, wird das Ergebnis im W- Register plaziert. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt.
  • - TABLRD (Table Read): Dies ist ein Zweizyklusbefehl, und, in einigen Fällen, kann es sogar ein Dreizyklus sein. Zunächst werden entweder (TBLAT) das niederwertige Byte (Falls "t" = "0" ist, wobei t die Tabellenbytewähloperation ist und t = 0 die Durchführung der Operation am unteren Byte meint), oder das höherwertige Byte (falls t = 1, was die Durchführung der Operation am oberen Byte) der Tabelle meint, zur Registerdate "f" bewegt. Dann wird der Inhalt der Programmspeicherstelle, die durch den 16-Bit Tabellenzeiger (TBLPTR) angezeigt wird, in den 16-Bit-TBLAT geladen.
  • - TABLWT (Table Write): Dies ist ein Zweizyklusbefehl und kann viele Zyklen lang sein, falls in den chipintegrierten EPROM-Programmspeicher 17 geschrieben wird. Als erstes wird der Inhalt des Dateiregisters "f" in das niederwertige Byte geladen (falls t = 0), oder in das höherwertige Byte des TBLAT (falls t = 1 ist). Falls der TBLPTR zur externen Programmspeicherstelle zeigt, wird der Inhalt von TBLAT an diese Stelle geschrieben, und der Befehl geht über 2 Zyklen. Falls TBLPTR zur internen EPROM-Stelle zeigt, aber die globale Schreibschutzsicherung (FGLWP) gesetzt ist, findet kein Schreiben statt und der Befehl läuft in 2 Zyklen ab. Falls TBLPTR zu einer internen EPROM-Stelle zeigt und kein Schutz gesetzt ist, wird eine EPROM-Schreib-(Programm)-Sequenz eingeleitet, und sie wird beendet, wenn ein Interruptsignal empfangen wird. Falls das GLINTD-Bit gesetzt ist, wird der Interrupt den TABLWT vollständig ausführen, doch wird keine Interruptsequenz ausgelöst. Falls GLINTD - 0 ist, wird der Interruptbefehl im Anschluß an den TABLWT bestätigt. Falls der FGLWP programmiert ist, werden alle TABLWT-Befehle eine Länge von 2 Zyklen haben, unabhängig von den Operationsmodi oder -adressen.
  • - TLRD (Table Latch Read): Lese Daten vom höherwertigen Byte (t = 1) oder vom niederwertigen Byte (t = 0) des 16-Bit-TBLAT in das Dateiregister "f". TBLAT ist nicht betroffen. Dieser Befehl wird in Verbindung mit TABLRD benutzt, um Daten vom Programmspeicher in den Datenspeicher zu übertragen.
  • - TLWT (Table Latch Write): Daten vom Dateiregister "f" werden in das niederwertige Byte (t = 0) oder in das höherwertige Byte (t = 1) des 16-Bit- TBLAT geschrieben. Dieser Befehl wird in Verbindung mit TABLWT benutzt, um Daten vom Datenspeicher in den Programmspeicher zu übertragen.
  • - TSTFSZ (Test f, skip if 0): Falls der Inhalt der Datenspeicherstelle "f" den Wert 0 hat, wird der nächste Befehl, der während der aktuellen Befehlsausführung abgerufen wurde, übersprungen (ausgeschieden), und es wird statt dessen eine NOP durchgeführt, wodurch ein Zweizyklusbefehl gemacht wird;
  • - XORLW (Exclusive OR literal with W): Der Inhalt des W-Registers wird einer XODER-Verknüpfung mit dem 8-Bit literal in "k" unterzogen. Das Ergebnis wird in dem W-Register abgelegt.
  • - XORWF (Exclusive OR W with f): Bewirke eine Exklusiv-ODER- Verknüpfung des Inhaltes des W-Registers mit der Datenspeicherstelle "f". Falls "d" "0" ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" den Wert "1" hat, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • Von den oben aufgeführten Befehlen sind die nachfolgenden Befehle Datenbewegungsbefehle: MOVFP, MOVLB, MOVPF, MOVWF, TABLRD, TABLWT, TLRD, und TLWT; die folgenden Befehle sind arithmetische und logische Befehle: ADDLW, ADDWF, ADDWFC, ANDLW, ANDWF, CLRF, COMF, DAW, DECF, INCF, IORLW, IORWF, MOVLW, NEGW, RLCF, RLNCF, RRCF, RMCF, SETF, SUBLW, SUBWF, SUBWFB, SWAPF, XORLW, und XORWF; die folgenden Befehle sind Programmsteuerbefehle: CALL, CPFSEQ, CPFSGT, CPFSLT, DECFSZ, DCFSNZ, GOTO, INCFSZ, INFSNZ, LCALL, RETFIE, RETLW, RETURN, und TSTFSZ; die folgenden sind Bitbehandlungsbefehle: BCF, BSF, BTFSC, BTFSS, und BTG; und die folgenden Befehle sind Spezialsteuerbefehle: CLRWDT, NOP, und SLEEP.
  • Der Zentralverarbeitungseinheitsabschnitt des Mikrokontrollers enthält eine Anzahl von signifikanten Hardware-Elementen. Indirekt adressierende Register bestehen aus zwei Registerstellen, die nicht physisch implementiert sind, sondern nur dazu benutzt werden, ein indirektes Adressieren des Raumes des Datenspeichers 34 zu implementieren. Zwei Datenwählregister sind 8-Bit breite, indirekte Adreßzeiger für den Datenspeicher 34. Zwei weitere Dateiregister bilden einen 16-Bit-Zeiger (TBLPTR); um den externen 64K- Programmspeicherraum zu adressieren und werden durch Befehle TABLWT und TABLRD benutzt, um Daten zwischen dem Raum des Programmspeichers 17 und dem Datenspeicherraum zu übertragen. Der Tabellenzeiger dient als die 16-Bit-Adresse des Datenwortes innerhalb des Programmspeichers. Der Tabellenauffangspeicher (TBLAT) ist ein 16-Bit-Auffangspeicher, bestehend aus TBLATH und TBLATL, den höherwertigen und niedrigerwertigen Bytes des Auffangspeichers. TBLAT wird als temporärer Halte- Auffangspeicher während der Datenübertragung zwischen dem Programmspeicher und dem Datenspeicher benutzt; er ist in keinem der Speicher abgebildet.
  • Das Programmzähler-PC-Modul 30 ist ebenfalls Teil der Mikrokontroller-CPU-Hardware. Der PC selber ist ein 16-Bit-Register mit einem PCL 51 (niedrigerwertiges Byte, abgebildet im Datenspeicher und ablesbar und beschreibbar mit jedem anderen Register, sowie mit einem PCH 52 (höherwertiges Byte), das in keinem Daten- oder Programmspeicher abgebildet ist und somit nicht direkt adressierbar ist. Der PCLATH 54 (PC hochpegeliger Auffangspeicher) ist ein 8-Bitregister, das in den Datenspeicher abgebildet ist, der als Halteauffangspeicher für das höherwertige Byte des PC dient und durch den PCH gelesen oder beschrieben werden kann. Der PC wird nach jedem Befehlabruf während der Phase Q1 inkrementiert, so lange er nicht durch GOTO-, CALL-, LCALL-, RETURN-, RETLW-, oder RETFIE-Befehl, oder durch eine Interruptantwort, oder durch ein Bestimmungsschreiben an IPCL seitens eines Befehls modifziert wird. "Skips" sind dem zweimaligen Inkrementieren des PC äquivalent.
  • Die CPU-Hardware umfaßt auch den Stapelspeicher 37, der gemäß 16 Wort · 16 Bit organisiert ist, und der kein Teil weder des Datenraums noch des Programmspeicherraums ist. Der PC liefert den letzten Eintrag oben auf dem Stapelspeicher, falls CALL- oder LCALL- Befehle durchgeführt werden; falls ein Interrupt eine Abzweigung zu dem entsprechenden Interruptvektor erzeigt. Dem Stapelspeicher wird der letzte Eintrag entnommen und in den PC geladen. Falls ein RETURN-, RETLW-, oder RETFIE-Befehl durchgeführt wird. TOS (das obere Ende des Stapelspeichers) ist in keiner anderen Weise adressierbar. Ein Nur-Lese- Status-Bit wird benutzt, um einen Stapelspeicher-Überlauffehler anzuzeigen.
  • Eine Interruptlogik ist in Form von Interruptquellen vorgesehen, die in die Interruptvektoren abgebildet sind. Wenn ein Interrupt auftritt, wird der aktuelle PC-Wert auf den Stapelspeicher geschoben, und der der Interruptquelle entsprechende Vektor wird in den PC geladen. Alle Peripherieeinrichtungen 57 benutzen den gleichen Interruptvektor, und wenn mehrere Peripheriequellen aktiviert werden, werden die Prioritäten durch Software bestimmt. Externe INT- und RT-Interrupts 58 und 59 können positiv oder negativ flankengetriggert sein, also durch Software wählbar sein.
  • Die Arithmetik- und Logikeinheit 62 (ALU) des Mikrokontrollers CPU führt arithmetische oder logische Operationen an einem einzelnen Operanden oder an zwei Operanden durch. Alle Einzeloperandenbefehle arbeiten entweder auf dem W-Register 47 oder auf einem Dateiregister. Zwei Operandenbefehle haben das W-Register als einen einzigen Operanden, und sie haben den anderen Operanden entweder als ein Dateiregister oder als eine 8-Bit- Immediatkonstante.
  • Eine prinzipielle Unterscheidung zwischen Mikrokontrollern im allgemeinen und anderen Prozessoren ist die Verfügbarkeit in den ersteren von speziellen Schaltungen zur Bewältigung der Bedürfnisse von Echtzeitanwendungen. Eines jener Merkmale des Mikrokontrollers 10, die darauf abzielen, die Systemzuverlässigkeit zu maximieren, teure externe Komponenten zu eliminieren, leistungssparende Betriebsmodi zu schaffen und Codeschutz anzubieten, ist das Einschalterkennungsschema der vorliegenden Erfindung. Eine duale Zeitgeberanordnung wird benutzt, um ausreichende Zeit für die Energiezufuhr und die Stabilisierung des Taktes bereitzustellen, ehe es dem Mikrokontroller ermöglicht wird, den Rücksetzzustand zu verlassen, wodurch sichergestellt wird, daß (i) sich das Leistungsniveau im richtigen Betriebsbereich befindet und (ii) der Takt stabil ist, damit der Mikrokontroller einwandfrei arbeiten kann.
  • Bezugnehmend auf Fig. 8 wird ein chipintegrierter Überwachungszeitgeber 65 (WDT) im Modul 15 (Fig. 1) verwendet, um es dem Mikrokontroller zu ermöglichen, sich von einer Funktionsstörung der Software zu erholen. Der WDT 65 selber ist ein asynchroner 8-Bit- Ripple-Zähler mit einem 8-Bit-Vorscaler, der ebenfalls ein asynchroner Ripple-Zähler ist, und der zur Steigerung der Zuverlässigkeit nach seinem eigenen internen RC-Oszillator abläuft. Der WDT ist nicht ablesbar oder beschreibbar, und er ist nicht in den Datenraum oder den Programmspeicherraum abgebildet. Ein Paar von EPROM-Sicherungen, FWDT 1 und FWDT 0 (Konfigurationsbits) sind an adressierbaren Stellen im EPROM-Speicher 17 abgebildet, um bis zu vier Betriebsoptionen (Modi) für den WDT bereitzustellen, die seine Periode (Frequenz) oder (als ein einfacher Zeitgeber) seine Befehlszykluszeit beeinflussen. Die EPROM-Sicherungen werden weiter unten besprochen. Vorzugsweise kann der WDT nur durch die EPROM-Sicherungen abgeschaltet werden. Der WDT und sein Vorskalierer werden rückgesetzt und das Zeitablaufbit (TO) wird auf 1 gesetzt, falls ein CLRWDT-Befehl ausgeführt wird, oder ein SLEEP-Befehl ausgeführt wird, oder ein Einschalten beim Rücksetzen auftritt. Normalerweise würde das Benutzerprogramm erstellt, um den WDT- Zeitgeber in einem regelmäßigen Zeitintervall zu räumen; aber wenn es dies nicht tut, wird der WDT überlaufen und den Mikrokontrollerchip rücksetzen. Wenn jedoch die Sicherungen so eingestellt sind, daß sie den WDT als einen einfachen Zeitgeber konfigurieren, inkrementiert der WDT bei einem internen OSC/4-Takt mit einer Vorskalierung von 256 (d. h. er inkrementiert bei einer OSC-Frequenz/1024-Rate); und beim Überlauf wird das TO -Bit geräumt, aber der Chip wird nicht rückgesetzt. Bei diesem Modus wird der WDT während des SLEEP gestoppt.
  • Gemäß einem Aspekt der Erfindung liefen zwei Zeitgabeschaltungen die gewünschten Verzögerungen beim Einschalten des Mikrokontrollers. Eine derselben ist ein Oszillatorstartzeitgeber (OST) 67 (Fig. 8), der den Mikrokontroller so lange im Rücksetzzustand hält, bis der Quarz-Oszillator des Taktgenerators (in Modul 15, Fig. 1) für den Mikrokontroller stabil ist. Der andere dieser beiden Zeitgeber ist ein Einschaltzeitgeber (PWRT) 69, der eine feste Verzögerung - beispielsweise 80 Millisekunden (ms) nominal - nur beim Einschalten liefert, um den Mikrokontroller so lange im Rücksetzzustand zu halten, bis die Leistungsversorgung stabil wird. Der WDT 65 und sein Vorskalierer entsprechen physisch dem PWRT 69, unterscheiden sich dabei nur in Bezug auf die Rolle, die sie ausüben sowie durch die äußere Rücksetzbedingung. Mit dem chipintegrierten OSD- Zeitgeber 67 und dem PWRT-Zeitgeber 69 wird die externe Rücksetzbeschaltung normalerweise nicht benötigt.
  • Ein Rücksetzen der gesamten Mikrokontrollerbeschaltung wird in der folgenden Weise durchgeführt. Der Oszillatorpuffer wird aktiviert, so daß der Oszillator erneut gestartet wird, falls ein Aufwecken vom SLEEP durch Rücksetzen erfolgt. Der SLEEP-Modus dieser Vorrichtung, die weiter unteren des näheren beschrieben wird, ist ein mit sehr schwachem Strom betriebener Abschaltmodus, der den Leistungsverbrauch der Vorrichtung während inaktiver Perioden bei seinen besonderen Anwendungen erheblich reduziert. Das Aufwecken aus dem SLEEP wird durch das externe Rücksetzen oder durch Ablauf des Überwachungszeitgebers oder durch ein Interrupt durchgeführt. Fortfahrend mit der Sequenz zum Rücksetzen wird der PC auf seine niedrigste Adresse rückgesetzt, und alle Register werden rückgesetzt. Der WDT und sein Vorskalierer werden geräumt. Der interne Taktgenerator wird im Q1-Zustand gehalten, und falls externer Ausführungsbetrieb gewählt wird, wird der ALE-Ausgabe niederpegelig gehalten, während die - und -Ausgänge hochpegelig gemacht werden (am Port E, Fig. 1). Schließlich werden die E/A-Ports B, C und. D als Eingänge konfiguriert.
  • Rücksetzen wird durch das Auftreten von einem von drei Ereignissen verursacht. Ein Einschaltrücksetzen findet bei Erkennen eines VDD-Anstiegs statt (beispielsweise im Bereich von 1,2 V - 2,0 V). Ein weiteres mögliches Ereignis ist ein externes Rücksetzen, das mit einem "niedrigen" Pegel am -Eingang (70, Fig. 1) auftritt. Das dritte Ereignis ist ein WDT-Rücksetzen, das auftritt, wenn der Überwachungszeitgeber abschaltet. Diese drei Ereignisse sind in der oberen Hälfte der Fig. 8 dargestellt und liefern jeweils Eingaben an das ODER-Gatter 71. Sobald die Vorrichtung in den Rücksetzzustand versetzt worden ist, wird dieser Zustand solange aufrechterhalten wie entweder (i) der -Eingang 70 "niederpegelig" ist, oder (ii) der -Eingang auf hohen Pegel geht, aber der PWRT 69 aktiv ist (d. h., nicht abgeschaltet hat), oder (iii) der OST 67 aktiv ist (d. h., nicht abgeschaltet hat).
  • Der erste der letzten drei Zustände ist ein anhaltendes externes Rücksetzen, und der zweite und dritte sind Rücksetzungen, die aufgezwungen werden, wenn entweder der PWRT- Zeitgeber oder der OST-Zeitgeber aktiv sind. Dementsprechend wird bei Fehlen einer fortdauernden externen Rücksetzung mit dem Ausführungsbetrieb begonnen, solange, bis sie daran durch Halten im Rücksetzzustand geändert wird, weil einer von den beiden Zeitgebern noch nicht abgeschaltet hat. Die Abschaltperioden für die beiden Zeitgeber werden gemäß der Erfindung so gewählt, daß sie genügend lang sind, um es der der Vorrichtung zugeführten Spannung zu ermöglichen, sich zu stabilisieren und ebenso der. Taktfrequenz, sich zu stabilisieren, aber derart, daß die Ausführung der Befehle oder Programme durch den Prozessor nicht unzulässig verzögert wird.
  • Weiter bezugnehmend auf Fig. 8 und auch auf das Einschaltzeitgabediagramm der Fig. 9, implementiert der OST-Zeitgeber 67 eine Oszillatorperiodenverzögerung von 1024, die durch den einen 10-Bit-Ripple-Zähler bewirkt wird, beide beim Einschalten oder beim Aufwecken aus dem SLEEP. Beim Einschalten beginnt die Verzögerung mit der ansteigenden Flanke von , während beim Aufwecken aus dem SLEEP, das Abschalten ab dem Auftreten des Aufweck-Ereignisses gezählt wird. Der OST-Zeitgeber beginnt mit dem Zählen des Oszillatorsignals am OSC1-Stift 12, wenn die Amplitude an diesem Stift eine vorbestimmte, akzeptable Grenze erreicht. Dies wird mit einer Aktivier-Eingabe am Gatter 72 bei Erkennung der ansteigenden Flanke von oder beim Aufwecken aus dem SLEEP aktiviert, vorausgesetzt, daß sich der Oszillator entweder im XT-Modus oder im LF-Modus befindet, der einen Quarzoszillator oder ein Resonator benutzt. Das Abschalten ermöglicht es dem Quarzoszillator (oder dem Resonator) zu stabilisieren, ehe der Mikrokontroller aus dem Zustand der Rücksetzung herausgenommen wird. Die Schaltung funktioniert mit Quarzen jeder Frequenz. Man beachte, daß diese Abschaltung nicht in den EC- oder RC- Oszillatormodi hervorgerufen wird, weil kein Quarzoszillator oder ein anderer Oszillationsmechanismus benutzt wird, der eine Stabilisierung nach dem Einschalten erfordert.
  • Der PWRT-Zeitgeber 69 implementiert eine fixierte Verzögerung nur beim Einschalten desselben. Die Verzögerung wird durch einen 10-Bit-Ripple-Zähler mit Eingabetakt von einem chipintegrierten RC-Oszillator 74 geliefert. Diese Zeitabschaltung wird ab der ansteigenden Flanke des gezählt, um es der VDD-Versorgung zu ermöglichen, ein akzeptables Niveau zu erreichen, ehe die Vorrichtung aus dem Rücksetzzustand herausgenommen wird, wie in Fig. 9 gezeigt ist. Ein interner Power-On-Reset-Impuls (POR, in der oberen Hälfte von Fig. 8) wird erzeugt, wenn ein VDD-Anstieg während des anfänglichen Einschaltens des Chips (beispielsweise nominal 1,2 V - 2,0 V) erfaßt wird. Das POR-Signal setzt interne Register zurück und aktiviert PWRT 69, um seine Verzögerung durch eine Eingabe an das Gatter 75 zu beginnen. Ein solcher Betrieb des PWRT-Zeitgebers tritt nur beim Einschalten der Vorrichtung auf, weil ein Aufwecken aus dem SLEEP normalerweise ohne Beeinflussung des VDD-Versorgungspegels stattfindet.
  • Die PWRT- und OST-Zeitgeber gewährleisten ein korrektes Einschaltrücksetzen ohne externe Komponenten (d. h. keine chipintegrierten), durch bloßes Verbinden des -Stiftes 70 mit VDD. Mit dem Ansteigen von VDO wird POR erzeugt, und wird im Chip als 1 erkannt, und die beiden OST und PWRT beginnen mit der Zeitabschaltung. Falls die Anstiegszeit von VDD so langsam ist, daß am Ende der PWRT-Zeitüberwachung die Spannung VDD noch kein annehmbares Niveau erreicht hat, muß die externe RC-Verzögerung an den -Stift angeschlossen werden.
  • Das duale Zeitgeberschema gewährleistet, daß die an die Vorrichtung angelegte Spannung sich im richtigen Betriebsbereich befindet, und daß der Takt stabil ist, ehe es der Vorrichtung ermöglicht wird, ein Programm auszuführen.
  • Die Vorrichtung 10 kann in den Energiespar-SLEEP-Modus (oder den Abschaltmodus) versetzt werden, wenn ein statischer Zustand angemessen ist, in welchem alle chipintegrierten Taktgeber gestoppt sind. Dieser Modus wird nach Ausführen eines SLEEP-Befehls eingeleitet, der den Oszillator abschaltet, das -Bit setzt, und das -Bit, den WDT- Zeitgeber und seinen Vorskalierer räumt. Im XT- oder LF-Modus des Oszillators werden beide Stifte, der OSC1-Stift und der OSC2-Stift in den hochohmigen Zustand versetzt. Im EC- oder RC-Modus wird der OSC 1-Stift in den hochohmigen Zustand versetzt, während der OSC2-Stift niederohmig gemacht wird. Dementsprechend werden der internen Logik keine Takte zugeführt, selbst wenn ein externer Takt am OSC1-Stift anliegt. Der Chip bleibt dann in einem völlig statischen Zustand, mit gewissen Ausnahmen wie folgt:
  • (1) Falls der WDT aktiviert wird, läuft er weiter und wird daher den Chip bei Zeitablauf aufwecken,
  • (2) Signalflanken am RT-Stift (Port A, Fig. 1) inkrementieren den Vorskalieren (ein asynchroner Ripple-Zähler) des RTCC-Moduls 77 (Echtzeittaktl-zähler), falls eine externe Taktquelle für den RTCC gewählt wird. Der RTCC inkrementiert nicht ohne den externen Takt.
  • (3) Jedes externe Interrupt-Ereignis weckt die Vorrichtung auf, falls beim Eingeben des SLEEP-Modus das entsprechende Interruptmaskenbit aktiviert wurde. Falls das GLINTD-Bit (global interrupt disable) ein "o" (off) ist springt die Vorrichtung beim Aufwecken zu dem entsprechenden Interruptvektor, während die die Vorrichtung andernfalls aufwachen wird und die Durchführung von Befehlen oder des Programms ohne antworten auf den Interrupt wieder aufnehmen wird (d. h., sie wird nicht zum Interruptvektor abzweigen).
  • (4) Jedes periphere Element, das unabhängig vom internen Takt arbeitet, kann wegen externer Ereignisse seinen Status ändern. Beispielsweise wird das serielle Portempfangsschieberegister Daten im synchronen Slave-Modus (externer Takt) einschieben.
  • Zusätzlich zum chipintegrierten Oszillator wird jede Beschaltung, die Strom verbraucht, im SLEEP-Modus ausgeschaltet, einschließlich des gesamten EPROM-Programmspeichers und der EPROM-Sicherungen. Die einzigen Sicherungen, die aktiv bleiben, sind die WDT- Sicherungen (FWDT0 und FWDT1). Die Vorrichtung kann nur durch den SLEEP-Modus durch eines der folgenden Ereignisse aufgeweckt werden:
  • (1) induzieren einer Spannung beim Rücksetzen durch Absenken von VDD auf 0 und Sichern auf Betriebspegel.
  • (2) Anlegen eines "niedrigen" Pegels an den -Stift.
  • (3) Ein WDT-Zeitablauf mit aktivierem WDT.
  • (4) Verschiedene Interrupts.
  • Gemäß einem weiteren Aspekt der Erfindung kann der Code oder das Programm, das im Programmspeicher EPROM enthalten ist, gegen Piraterie oder nicht autorisierte Änderungen geschützt werden (gesichert werden), wenn sich die Vorrichtung im codegeschützten Mikrokontrollermodus befindet, durch Sprengen gewählter Konfigurationssicherungen. Insbesondere wird dieser Sicherungsmikrokontrollermodus durch Sprengen eines Paares von Konfigurationssicherungen erzielt, bezeichnet FPMM1 und FPMM0, von "1-Status" zum "0- Status". Diese und andere Konfigurationssicherungen des Mikrokontrollers sind EPROM- Bits, die, wenn sie programmiert sind, "0" lesen, indem sie den Zustand des "Gesprengtseins" oder offenen Zustandes, und die, wenn sie nicht programmiert bleiben, "1" lesen, was den Zustand des "Gelöschtseins" oder des Geschlossenseins bildet.
  • Im Mikrokontroller der vorliegenden Erfindung ermöglichen es die Konfigurationssicherungen dem Benutzer, zwischen Optionen, wie etwa Betriebsmodi, durch bloßes Auswählen des passenden Zustandes zu wählen. Diese Sicherungen sind in den chipintegrierten Programmspeicher 17 (Fig. 1) abgebildet, um das Programmieren zu vereinfachen, was es auch ermöglicht, den Wert (Zustand) jeder Sicherung zu lesen. Allerdings sind die Sicherungsstellen, um gelesen oder geschrieben zu werden, nur im Mikrokontroller und in geschützten Mikrokontrollermodi zugänglich. Im Mikroprozessor- und erweiterten Mikrokontrollermodi ist dieser Abschnitt des Programmspeichers extern abgebildet (wie in Fig. 5 dargestellt), wodurch die Sicherungsstellen unzugänglich gemacht werden. Jede Sicherung ist einer einzelnen Programmspeicher-Adreßstelle zugewiesen. Um eine Sicherung zu "sprengen" (Programm), wird die Adresse der betreffenden Sicherung eingeschrieben, unter Verwendung eines TABLWT-Befehls. Bei Konfigurationssicherungen, die im Mikrokontroller der Erfindung benutzt werden, sind die Sicherungen (EPROM-Bits) so angeordnet, daß sie ohne Rücksicht auf die in die Sicherungsadreßstelle eingeschriebenen Daten gesprengt werden können. D. h., daß die Daten keine Rolle spielen - der bloße Akt des Schreibens an eine nicht programmierte EPROM-Sicherung ist an sich ausreichend, um die Sicherung zu sprengen.
  • Nachdem das geeignete Paar von EPROM-Sicherungen gesprengt worden ist, um den Sicherungs- Mikrokontrollermodus auszuwählen, wird ein TBLRD-(Lesen)-Befehl, ausgeführt von einem nicht im Chip integrierten EPROM (oder anderswo außerhalb des Sicherungsbereichs des geschützten Programm-EPROM), der den chipintegrierten Programm- EPROM zu lesen versucht, nur verschlüsselte (verwürfelte) Daten lesen. Wenn aber der Befehl von einer Adresse unter 2K ausgeführt wird (d. h., vom chipintegrierten Programm- EPROM) werden die gelesenen Daten unverschlüsselt erscheinen.
  • Um weiter einen nicht autorisierten Zugriff auf den Sicherungsbereich zu verhindern, wird jeder TABLWT-(Schreiben)-Befehl, der von einem EPROM außerhalb des Chips oder von einer anderen Stelle außerhalb des Sicherungsbereichs ausgeführt wird, welcher versucht, in den EPROM mit eingebettetem Programm zu schreiben, am Programmieren der Bestimmungsadresse gehindert. Es ist nach wie vor erforderlich, den Befehl durch eine Interrupt-Bedingung zu beenden, und die Tabellenauffangspeicher werden nach wie vor beschrieben. Wie im analogen Falle der Befehlsauslesens wird jedoch ein TABLWT-Befehl, ausgeführt von einer Adresse unter 2K, wirksam, um die adressierte chipintegrierte Programm-EPROM-Speicherstelle trotz des codegeschützten Zustandes dieses Speichers zu programmieren, und zwar aufgrund der Art des Sicherungsmikrokontrollermodus, weil ein solcher Befehl von einer autorisierten Stelle aus durchgeführt worden ist.
  • Diese Maßnahmen sind wirksam, um das Lesen, Verifizieren oder Programmieren irgendeiner Speicherstelle des chipintegrierten Programmspeicher-EPROMs von außerhalb des geschützten Bereichens zu programmieren, mit der Absicht, geschützt zu werden.
  • Der Mikrokontroller der Erfindung weist insgesamt 8 Konfigurationssicherungen auf, einschließlich der FPMM0- und FPMM1-Sicherungen, die oben beschrieben wurden, zum Wählen eines Gesamtoperationsmodus. Beispielsweise wird der Sicherungsmikrokontrollermodus durch Programmieren von beiden der letzteren (d. h., beide in den "0-Zustand gesprengt"; der normale Mikrokontorllermodus wird durch Programmieren von FPMM0 und Belassen vom FPMM1 im nicht programmierten Zustand gewählt; ein erweiterter Mikrokontorllermodus wird durch Umkehren des letzteren gewählt; und ein Mikroprozessormodus wird durch Belassen beider dieser Sicherungen im nicht programmierten Zustand gewählt. Die anderen sechs EPROM-Konfigurationssicherungen umfassen ein Paar von Sicherungen, die mit FOSC0 und FOSC1 bezeichnet sind, und die in irgendeiner von den vier unterschiedlichen Kombinationen zum Wählen der entsprechenden Gewünschten der vier unterschiedlichen Oszillatormodi EC, RD, XT und LF programmiert oder nicht programmiert sein können, wie weiter oben besprochen worden ist; ein Paar von Sicherungen, bezeichnet mit FWDT0 und FWDT1, die in ähnlicher Weise in irgendeiner der vier unterschiedlichen Kombinationen programmiert oder nicht programmiert werden können, um die entsprechend gewünschte eine von vier unterschiedlichen Überwachungszeitgeber- (WDT)-Betriebsoptionen oder Modi zu wählen, wie ebenfalls oben besprochen; eine Globalschreibschutzsicherung FGLWP, die programmiert werden kann, um das Programmieren insgesamt zu verhindern (d. h., das Sprengen dieser Sicherung würde das Schreiben in den chipintegrierten Programm-EPROM, in den nicht im Chip integrierten EPROM, und in alle Konfigurationssicherungen, verhindern); und, schließlich, einen Schreibschutzsicherungs-FOPTWP, um eine Änderung irgendeiner der Konfigurationssicherungen zu verhindern. Der TABLWT-Befehl wird so implementiert, daß er immer ein "Kurzschreiben" durchführt (beispielsweise nur zwei Zyklen), falls ein globaler Schreibschutz aktiviert wird.
  • Ein Array von Hochgeschwindigkeitsperipherieeinrichtungen ist auf dem Chip 10 zum Zwecke der echtzeitberechnungsintensiven Anwendungen eingebaut. Um die CPU-Aufgaben so weit wie möglich zu entlasten, sind die Peripherieeinrichtungen 57 (Fig. 1) hoch intelligent und besitzen ihre eigene Interrupt- und Fehlerbehandlung. Das Modul 80 umfaßt drei 16-Bit- Zeitgeber/Zähler (TMR1, TMR2 und TMR3), von denen einer sich in zwei 8-Bitzeitgeber aufteilen kann; zwei Hochgeschwindigkeitsfangeinrichtungen zum wirksamen Bilden einer Schnittstelle zum Shaftkodierer und anderen Hochgeschwindigkeits-Impulsfolgequellen; und zwei Hochgeschwindigkeits-Impulsbreitenmodulations-(PWM)-Ausgängen mit einer Auflösung von bis zu 10 Bit, um eine Motorsteuerung direkt oder durch DC- Steuerspannungen zu erlauben. Darüber hinaus befinden sich bis zu vier externe und mehrere interne Interruptquellen unter den Peripherieeinrichtungen, wie auch zahlreiche E/A-Stifte, von denen die meisten als Eingänge oder Ausgänge in Software konfiguriert werden können.
  • Alle Peripherieregister sind in den Raum des Datenspeichers 34 unter Verwendung eines Bankbildungsschemas abgebildet, in welchem ein Segment des Datenspeichers mit einer begrenzten Anzahl von gewählten Adressen als Bank ausgebildet ist. Dies ermöglicht die Unterbringung einer großen Anzahl von Registern, ohne Universaldaten-RAM-Kapazität zu verschwenden. Ein Bankwählregister (BSR) 82 wählt die aktuell aktive "periphere Bank". Wenngleich periphere Register von mit ihnen zusammenhängender Funktionalität zu einer einzigen Bank gruppiert werden können, ist es typischerweise erforderlich, von Bank zu Bank umzuschalten, um alle, auf eine einzelne Aufgabe bezogenen, peripheren Einrichtungen zu adressieren, wobei dies der Zweck des MOVLB-Befehls ist (move literal valve to BSR).
  • Die Vorrichtung 10 hat fünf digitale E/A-Ports, die mit A, B, C, D und E bezeichnet sind (Fig. 1), und die sich zusammen auf 33 Port-Stifte summieren, von denen die meisten ein ihnen zugeordnetes Datenrichtungsregister-DDR-Bit haben, um den zugeordneten Port-Stift als Eingang (DDR-Bit = 1) oder als Ausgang (DDR-Bit = 0) zu konfigurieren. Die meisten der Port-Stifte werden mit dem Systembus oder peripheren Funktionen multiplexiert. Beispielsweise multiplexieren die Ports C, D und E mit den vorherigen (AD< 15 : 0> , ALE, und ). Alle fünf dieser Ports und ihre zugeordneten DDR-Register werden in den Datenspeicher 34 abgebildet. Steuerbits in den entsprechenden peripheren Registern konfigurieren die Stifte entweder als Port-Stifte oder als periphere Eingänge/Ausgänge, und wenn ein Port-Stift für eine andere Funktion gewählt wird, wird seine Richtung durch die Peripherielogik bestimmt, welche das DDR-Bit in den gewünschten Status zwingt.
  • Der Port A ist ein 6-Bit-Port, zu einer der als Bank gebildeten Adressen; er hat kein mit ihm in Verbindung stehendes Datenrichtungsregister, und wird mit Peripheriefunktionen multiplexiert, die externe Unterbrechungseingaben an Stifte RAO/INT und RAlIRT umfassen. Der Port B ist ein 8-Bit breiter bidirektionaler Port, der ebenfalls in eine der Bänke im Datenspeicher 34 abgebildet ist. Schreiben an seine abgebildete Adresse schreibt in den Port- Auffangspeicher, und Lesen der Adresse liest die Port-Stifte aus. Die meisten seiner Stifte werden mit Peripheriefunktionen multiplexiert, wie etwa das Fangen, PWM und externer Takt. Der Port B ist so implementiert, daß er ein "Interrupt on change" liefert, indem ein Interrupt erzeugt wird, wenn sich die Port-Eingabe ändert (unter Benutzung seines Ausgabedatenauffangspeichers als Vergleichsauffangspeicher, um die Erzeugung einer höherwertigen Ausgabe bei Fehlanpassung zwischen dem Stift und dem Auffangspeicher zu veranlassen), und der Interrupt kann den Chip 10 aus dem SLEEP-Modus aufwecken.
  • Die Ports C, D und E sind in einer anderen Bank des Datenspeichers abgebildet. Die Ports C und D sind 8-Bit breite bidirektionale Ports, während Port E ein 3-Bit breiter bidirektionaler Port ist.
  • Der serielle Port 83 ist angepaßt, um entweder in einem asynchronen Voll-Duplexmodus oder einem getakteten, synchronen Halbduplexmodus zu arbeiten, um einen synchronen, asynchronen Universalempfänger-Übertrager (USART) zu schaffen. Im asynchronen Modus wird der Takt intern abgeleitet, während im synchronen Modus der Takt entweder intern oder extern sein kann. Ein dedizierter 8-Bit-Baudratengenerator (BRG) wird vorzugsweise für die interne Takterzeugung bei dieser Anwendung verwendet. Der BRG ist in den mit Banken versehenen Raum im Datenspeicher 34 mit einem Register abgebildet, das lesbar und beschreibbar ist.
  • Das RTCC-Modul 77 ist eines von mehreren Zeitgebern/Zählern im Mikrokontroller, der TMR1, TMR2 und TMR3 des Moduls 80 enthält. Das RTCC enthält vorzugsweise einen 16- Bit Zeitgeber/Zähler, höherwertige und geringerwertige Bytes, einen 8-Bit-Vorskalierer und eine Quelle des externen Taktsignals am RT-Stift. 8-Bit-Zeitgeber/Zähler TMR1 und TMR2 werden als Zeitbasen für die PWM-Ausgaben des Moduls 80 verwendet, und ein 16-Bit- Zeitgeber T3 wird für eine Fangfunktion benutzt.
  • Gemäß einem Aspekt der Erfindung ist ein vereinfachtes Selbstprogrammieren durch Benutzen eines Schemas vorgesehen, in welchem ein Befehl verwendet wird, um den Programmspeicher des Mikrokontrollers zu programmieren, der mit einem selbstinkrementierenden Zeiger und einem chipintegrierten ROM ausgerüstet ist, um ein Programm zu speichern. Der Mikrokontroller wird unter Benutzung des TABLWT-Befehls programmiert, wobei der Tabellenzeiger auf eine interne EPROM-Stelle des Programmspeichers 17 zeigt. Dementsprechend kann ein Benutzer eine EPROM-Stelle während der Codeausführung programmieren, selbst aus einem internen EPROM. Zwei "programmiere und verifiziere"-Routinen sind in Adreßstellen des Programmspeichers vorgesehenen. Eines der beiden Programme ist eine "Universal-Programmier/Verifizier"- Routine, die die flexibelste von den beiden Programmen ist, was es dem Benutzer ermöglicht, irgendeine Adresse zu laden, eine Speicherstelle zu programmieren, eine Speicherstelle zu verifizieren oder auf die nächste Stelle zu inkrementieren, mit variablem Programmieren der Impulsbreite. Das andere Programm ist eine "selbst programmierende/verifizierende" Routine, ein einfaches, aber starr programmierendes Verfahren, bei dem der Mikrokontroller sequentiell 2K-Stellen aus zwei externen 2K · 8 EPROMs liest und seinen eigenen internen Speicher programmiert. Sie werden in den chipintegrierten Programmspeicherraum abgebildet, doch sitzen die beiden Programme im ROM statt im EPROM, um sie unlöschbar zu machen.
  • Um eine dieser beiden Programmierroutinen auszuführen, wird der TEST-Stift 85 (Fig. 1) nach dem Einschalten hochpegelig gehalten, während der MCLR-Stift niederpegelig gehalten wird; und dann wird der -Stift von 0 auf 1 (VCC oder VPP) angehoben. Die Programmausführung beginnt im PC (Programmzähler) 30 nach dem Rücksetzen, und das Programm fragt sofort den Port B ab, um eine Abzweigadresse zu bestimmen. Das Programm kann eine "Universalprogrammier/-Verifizier"-Routine oder eine "Selbstprogrammier/Verifizier"-Routine ausführen. Wenn der TEST-Stift 85 hochpegelig ist, werden der Einschaltrücksetz-Zeitgeber und der Oszillatorstartzeitgeber (PWRT und OST, Fig. 8) deaktiviert. Der Universalprogrammier/Verifiziermodus wird für Vollmerkmalsprogrammierer benutzt, doch ist er von nicht besonderem Interesse in Bezug auf die vorliegende Erfindung oder deren praktische Umsetzung und wird daher nicht weiter beschrieben.
  • Der Mikrokontroller 10 benutzt einen intelligenten Schnell-Impulsalgorithmus, der eine Programmverifikation sowohl bei VCC(min) wie auch bei VCC(max) erfordert. Die Verifikation bei VCC(min) garantiert einen guten "Löschspielraum", und die Verifizierung bei VCC(max) garantiert einen guten "Programmierspielraum". Bezugnehmend auf Fig. 10 startet der Programmieralgorithmus durch Laden einer neuen Adresse aus dem Speicher mit der Impulszählung bei 0 (Block 90); die Adresse wird als leer verifiziert (Block 91); und der Leertest (Verifikation) ist entweder gelungen oder fehlgeschlagen (Entscheidungsblock 93). Falls er gelungen ist, werden neue Daten geladen (94) und dann wird unter Benutzung von Impulsen zu 100 ms mit Inkrement der Impulszählung (95) programmiert. VCC wird dann auf VCC(max) gesetzt, und die Stelle für korrekte Daten wird verifiziert (96). Falls die Verifikation erfolgreich ist (98), wird eine 3X-(dreimal)-Impulszählung angewandt, um den Programmspielraum (100) zu vergrößern; und VCC wird auf VCC(min) eingestellt, um die Stelle (101) zu verifizieren. Falls die Verifikation bei VCC(min) erfolgreich ist (102), kehrt der Algorithmus zum Start zurück und eine neue Adresse wird geladen (90).
  • Ein Fehlschlag bei irgendeinem der oben genannten gelungenen/fehlgeschlagenen Entscheidungsschritten (93, 102) des Programmieralgorithmus führt zu einer angemessenen Fehlermeldung oder -kennung und zu einer Rückkehr an den Start, mit Ausnahme des Falles eines Versagens der Verifikation bei VCC(max) (98) und einer weiteren Feststellung, daß die Impulszählung nicht größer als 25 (103) ist. In diesem Falle kehrt das Programm zum Inkrementierimpulszählungsschritt (95) zurück, und VCC wird erneut auf VCC(max) gesetzt, um die Speicherstelle für korrekte Daten (96) zu verifizieren, gefolgt von der gelungenen/fehlgeschlagenen Entscheidung für entsprechende Verifikation (98).
  • Im Selbstprogrammiermodus liest der Mikrokontroller zwei externe 2K · 8-EPROMs und programmiert sich selber mit Hilfe eines Befehls und eines selbst inkrementierenden Zeigers, benutzt durch den Befehl, um den Programmspeicher durch Inkrementierung zu programmieren, um die aufeinanderfolgenden Adreßstellen desselben zum Speichern der aufeinanderfolgenden Schritte des Programms zu durchschreiten. Der Mikrokontroller enthält einen chipintegrierten, festcodierten (d. h., masken- oder herstellerprogrammierten) Speicher, wie etwa einen ROM, der den Befehl sowohl zum Selbstprogrammieren, als auch andere Codes enthält, die darin gespeichert werden sollen. Fig. 11 ist ein vereinfachtes Schaltungsdiagramm für den Selbstprogrammierer, und Fig. 12 ist ein Zeitgabediagramm, das die Sequenz veranschaulicht, in der VCC, VPP, TEST und andere Signale angewandt werden (oder auftreten). Der zu programmierende Mikrokontroller 10 wird durch Steckverbindung mit dem (betrieblich als Schnittstelle geschalteten) Selbstprogrammierer verbunden, woraus sich die Gesamtschaltung der Fig. 11 ergibt. Die beiden 2K · 8 externen EPROMs 110, 111, die mit dem gewünschten Code programmiert sind, werden ebenfalls in entsprechende Steckdosen des Selbstprogrammierers eingesteckt (d. h., betrieblich schnittstellenmäßig). Das Einschalten der Spannung VCC wird bewirkt und kann sich stabilisieren, wie im VCC-Abschnitt des Zeitgabediagramms (Fig. 12) gezeigt ist. Wenn VCC stabil ist, wird der Selbstprogrammiermodus eingeleitet, indem zuerst der TEST-Stift, auf 1 gehoben wird (hochpegelig, TEST-Abschnitt des Zeitgabediagramms). Dann geht der VCC/ -Stift nach oben auf VPP (beispielsweise auf 12,5 bis 13,5 V, nominal 13,0 V; VPP/ -Abschnitt des Zeitgabediagramms), was den Mikrokontroller aus der Rücksetzstellung herausbringt, um mit der Durchführung der Selbstprogrammierroutine zu beginnen.
  • Bei der selbstprogrammierenden Routine liest der Mikrokontroller die beiden EPROMs, nämlich jedesmal ein einzelnes Wort, und programmiert die entsprechende Speicherzelle in ihren chipintegrierten 2K · 16-EPROM-Programmspeicher 17 unter Benutzung eines selbst inkrementierenden Zeigers bei einer Adreßstelle am Port B (RB < 7 : 0> ) und Stifte RC4-RC7 des Ports C (s. die entsprechenden Abschnitte des Zeitgabediagramms Fig. 12). Wenn der gesamte chipintegrierte EPROM erfolgreich programmiert worden ist, liest der Mikrokontroller 10 die Schalteinstellungen 115 (Fig. 11) für die die Konfigurationssicherung betreffende Information, und programmiert seine Sicherungen entsprechend dieser Konfiguration. Eine visuelle Anzeige ist vorgesehen, so daß der Bediener das Fehlen eines Fehlers oder einen Fehler bei der Programmierung wahrnimmt, in dem ein paar von lichtemittierenden Dioden (LEDs) 117 und 118 verwendet wird, die an die Stifte RC0 und RC1 des Ports angeschlossen sind. Eine grüne LED 117 und eine rote LED 118 sind beide eingeschaltet (leuchten) während des Programmierens. Am Ende der Programmierung bleibt nur eine einzige LED eingeschaltet, und zwar die grüne, falls die Programmierung fehlerlos ist, und die rote, falls ein Fehler aufgetreten ist.
  • Das genannte Schema ermöglicht es dem Mikrokontroller (oder dem Mikroprozessor), seinen eigenen Programmspeicher auf einfache Weise zu programmieren, wobei ein Zeiger zum Programmspeicher hin durch einen Befehl gerichtet wird.
  • Auf alle Testmodi des Mikrokontrollers wird über den TEST-Stift 85, den Port A und den Port B zugegriffen. Der TEST-Stift ist ein Schmitt-Trigger-Eingang, der weder pull-up noch pull-down aufweist, und der bei Anwendungen niederpegelig gehalten werden muß. VPP muß auf nominal 12 V gehalten werden, während der TABLWT ausgeführt wird, falls Programmieren gewünscht wird. Der Port A wird für spezielle EPROM-Testmodi benutzt, und der Port B wird für einen CPU-Test benutzt.
  • Ein Mikrokontroller, der eine kleine Stiftenzählung hat, kann unzureichend sein, um 16-Bit- Befehle mit voller Geschwindigkeit einzugeben. Der Mikrokontroller der Erfindung hat einen Block eines chipintegrierten Programmspeicher 17, der als Test-EPROM bestimmt ist und für das Testen in der Fabrik vorgesehen ist. Der Test-EPROM wird mit dem gewünschten Testcode vor dem Testen programmiert. Der Test-EPROM wird mit einer Serie von kleinen Subroutinen programmiert, nämlich eine einzelne für jeden Befehl im Mikrokontrollerbefehlssatz, und einer steuernden Testroutine, welche den Port B liest und ihn in PC niederwertig plaziert. Die CPU ist an den betreffenden Punkt angepaßt, um auf die Adresse der gerade getesteten Befehlssubroutine zu springen. Ein PC (höherwertig) hält den PC, der in den Test-EPROM zeigt; und wenn der Test für die besondere Befehlssubroutine beendet ist, liest das Steuerprogramm (Routine) den Port B erneut für den nächsten Wert von PC niederwertig aus, so daß schließlich alle Befehle in der Vorrichtung getestet werden.
  • Ein Testmodusregister (TSTMD 1), dargestellt in Fig. 13, bildet ein Mittel zum Testen verschiedenartiger Konfigurationen des Chips 10, ohne die EPROM-Sicherungen zu sprengen. Dies ist ein weiterer wichtiger Aspekt der Erfindung, bei der die EPROM- Sicherungen durch Test-Auffangspeicher emuliert werden, wie in der Tabelle der Fig. 14 angezeigt ist. Die Bedeutung der Bits im TSTMD1-Register entspricht derjenigen des Codeschutzes und der Konfigurationssicherungen, die früher beschrieben worden sind, ausgenommen, daß der Sinn umgekehrt ist, d. h., eine Sicherung = 0 entspricht einem Bit, das in diesem Falle 1 ist. Das TSTMD1-Register ist so angepaßt und ausgelegt, daß auf es nur im Testmodus oder im Abfragemodus zugegriffen werden kann. Auch steuern die Konfigurationsbits bei der TSTMDI-Steuerung die Konfiguration nur dann, wenn das TSTMUX-Bit (Fig. 14) den Wert 0 hat. Falls TSTMUX = 1 ist, wird der Status des Mikrokontrollers durch die Sicherungen für diese Bits definiert. Die Codeschützbits werden vom TSTMUX-Bit unabhängig gemacht. Falls die Sicherungen für diese Bits gelöscht werden, kann der Test-Auffangspeicher die Sicherungen unwirksam machen, unabhängig vom Status des TSTMUX-Bits. Falls die Sicherungen gesprengt werden, können sie nicht unwirksam gemacht werden.
  • Das Testmodusregister ist in allen Modi ablesbar, und es reflektiert im Normalmodus den Wert der Sicherungen. TSTMD1 wird im Rücksetzzustand gehalten, wenn es sich nicht im Emulationsmodus oder im Testmodus befindet, was die Sprengung der WDT-Sicherungen und des externen Programms und das Löschen aller anderen Sicherungen definiert.

Claims (3)

1. Microcontroller (10) hergestellt auf einem Halbleiterchip zur Ausführung von Programmen und Befehlen nach Betriebsstart und angepaßt sich selbst mit einem Programm zu programmieren und Steuersignale als eine Folge der Ausführung von Programmen und Befehlen zur selektiven Steuerung eines externen steuerbaren Systems zu generieren,
und aufweisend
(1) Taktmittel (15) zum Zuführen einer Taktfrequenz mit dem Betriebsstart des Microcontrollers, wobei die Taktfrequenz eine für eine gewünschte Anwendung geeignete Stabilität aufweist,
(2) Programmspeichermittel (17) zum Speichern eines Programms, und
(3) Programmiermittel (17) zum Programmieren der Programmspeichermittel mit einem von dem Microcontroller auszuführenden Programm,
dadurch gekennzeichnet, daß
die Programmiermittel aufweisen:
(i) einen auf dem Chip befindlichen nur Lese Speicher (Boot ROM) zum Speichern eines Autoprogrammbefehls zum Programmieren der Programmspeichermittel, wobei der Autoprogrammbefehl ein allgemeiner Befehl (TABLWT) ist, um zuzulassen, daß Selbstprogrammierung ausschließlich intern in dem Microcontroller stattfindet, während der Microcontroller zur selektiven Steuerung des extern steuerbaren Systems wirksam verbunden ist, und
(ii) Mittel zum Wiedergewinnen eines Programms von einem programmierten Speicher (110, 111) bei der Taktfrequenz und zum Bereitstellen dieses in vorbestimmte Adreßorte in den Programmspeichermitteln (17), während es dem Microcontroller erlaubt, Befehle aus den Programmspeichermitteln auszuführen, und daß der Microcontroller des weiteren Mittel (FPMM0, FPMM1) zur Ermöglichung der Auswahl eines sicheren Betriebsmodus aufweist, so daß ein externer Leseversuch der Programmspeichermittel kodierte Daten generieren würde.
2. Microcontroller nach Anspruch 1, wobei die Programmspeichermittel (17) löschbare programmierbare nur Lese Speicher sind.
3. Vorrichtungsimplementiertes Verfahren zum Selbstprogrammieren einer Microcontrollervorrichtung, welche auf einem Halbleiterchip hergestellt ist und vorgesehen ist, ein Programm nach Betriebsstart des Microcontrollers auszuführen und Steuersignale als eine Folge der Ausführung des Programms zur selektiven Steuerung eines extern steuerbaren Systems durch den Microcontroller zu generieren, wobei das Verfahren die Schritte aufweist:
Vorsehen einer Taktfrequenz mit dem Betriebsstart des Microcontrollers mit einer für eine gewünschte Anwendung geeigneten Stabilität;
Programmieren eines Programmspeichers (17) mit dem durch den Microcontroller auszuführenden Programm, aufweisend der Schritte:
(i) Lesen eines Autoprogrammbefehls, der in unlöschbarem, nur Lesespeicher (Boot ROM) gespeichert ist, wobei der Autoprogrammbefehl ein allgemeiner Befehl ist, um zuzulassen, daß Selbstprogrammierung ausschließlich intern in dem Microcontroller stattfindet, während der Microcontroller zum selektiven Steuern des externen steuerbaren Systems wirksam verbunden ist,
(ii) Wiedergewinnen eines gespeicherten Programms von einem programmierten Speicher bei der Taktfrequenz und Bereitstellen des gespeicherten Programms in vorbestimmte Adreßorte in dem Programmspeicher, während es dem Microcontroller erlaubt, Befehle aus dem Programmspeicher auszuführen, und
(iii) Festsetzen eines sicheren Betriebsmodus als ein Konfigurationsmodus, so daß ein externer Leseversuch des Programms in dem Programmspeicher kodierte Daten generieren würde.
DE69230642T 1991-11-12 1992-11-12 Automatischer programmierungs-mikrokontroller mit gespeichertem befehl zur programm-steuerung von externem speicher und verfahren Expired - Fee Related DE69230642T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US79096191A 1991-11-12 1991-11-12
PCT/US1992/009464 WO1993010492A1 (en) 1991-11-12 1992-11-12 Self-programming microcontroller with stored instruction to command program from external memory

Publications (2)

Publication Number Publication Date
DE69230642D1 DE69230642D1 (de) 2000-03-09
DE69230642T2 true DE69230642T2 (de) 2001-05-23

Family

ID=25152258

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69230642T Expired - Fee Related DE69230642T2 (de) 1991-11-12 1992-11-12 Automatischer programmierungs-mikrokontroller mit gespeichertem befehl zur programm-steuerung von externem speicher und verfahren

Country Status (4)

Country Link
US (1) US5504903A (de)
EP (1) EP0614550B1 (de)
DE (1) DE69230642T2 (de)
WO (1) WO1993010492A1 (de)

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2727976B2 (ja) * 1994-09-12 1998-03-18 日本電気株式会社 インサーキットエミュレータ
DE69534396T2 (de) * 1994-11-24 2006-03-16 Sanyo Electric Co., Ltd., Moriguchi Ein-Chip-Mikrorechner mit eingebautem nichtflüchtigem Speicher
US5606710A (en) * 1994-12-20 1997-02-25 National Semiconductor Corporation Multiple chip package processor having feed through paths on one die
US5732207A (en) * 1995-02-28 1998-03-24 Intel Corporation Microprocessor having single poly-silicon EPROM memory for programmably controlling optional features
US5737212A (en) * 1995-12-04 1998-04-07 Industrial Technology Research Institute Flag setting circuit for microcontroller
US5860161A (en) * 1996-08-14 1999-01-12 Advanced Micro Devices, Inc. Microcontroller configured to indicate internal memory accesses externally
US5903912A (en) * 1996-08-14 1999-05-11 Advanced Micro Devices, Inc. Microcontroller configured to convey data corresponding to internal memory accesses externally
US6842820B2 (en) 1997-10-03 2005-01-11 Macronix International Co., Ltd. Processor with embedded in-circuit programming structures
US6493788B1 (en) 1996-10-28 2002-12-10 Macronix International Co., Ltd. Processor with embedded in-circuit programming structures
US6282675B1 (en) * 1997-08-06 2001-08-28 Macronix International Co., Ltd. Fault-tolerant architecture for in-circuit programming
GB2320592B (en) * 1996-12-20 2002-02-13 Thomson Multimedia Sa Updating software in a microprocessor controlled appliance
US5862148A (en) * 1997-02-11 1999-01-19 Advanced Micro Devices, Inc. Microcontroller with improved debug capability for internal memory
US5966723A (en) * 1997-05-16 1999-10-12 Intel Corporation Serial programming mode for non-volatile memory
US6108798A (en) * 1997-07-02 2000-08-22 International Business Machines Corporation Self programmed built in self test
US5764655A (en) * 1997-07-02 1998-06-09 International Business Machines Corporation Built in self test with memory
US6230290B1 (en) 1997-07-02 2001-05-08 International Business Machines Corporation Method of self programmed built in self test
US6115814A (en) * 1997-11-14 2000-09-05 Compaq Computer Corporation Memory paging scheme for 8051 class microcontrollers
TW368626B (en) * 1998-04-17 1999-09-01 Winbond Electronics Corp Microprocessor with self-programmed embedded flash memory and programming method
DE19819569B4 (de) * 1998-04-30 2005-09-22 Siemens Ag Elektronischer Schaltkreis für die Umwandlung von Daten
SE520101C2 (sv) 1998-05-13 2003-05-27 Axis Ab Integrerad krets och metod för att förmå en intgrerad krets att exekvera instruktioner
US6904519B2 (en) * 1998-06-12 2005-06-07 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
US6141705A (en) * 1998-06-12 2000-10-31 Microsoft Corporation System for querying a peripheral device to determine its processing capabilities and then offloading specific processing tasks from a host to the peripheral device when needed
US6185712B1 (en) 1998-07-02 2001-02-06 International Business Machines Corporation Chip performance optimization with self programmed built in self test
US20020133687A1 (en) * 1998-11-06 2002-09-19 Little Wendell L. Facilitating automatic incrementing and/or decrementing of data pointers in a microcontroller
FR2790117B1 (fr) * 1999-02-19 2001-09-14 St Microelectronics Sa Procede de configuration d'un microcontroleur en mode initialisation
US6151238A (en) * 1999-02-23 2000-11-21 Microchip Technology, Inc. Calibrating functions of an integrated circuit and storing calibration parameters thereof in a programmable fuse array
US6708268B1 (en) * 1999-03-26 2004-03-16 Microchip Technology Incorporated Microcontroller instruction set
US6597175B1 (en) 1999-09-07 2003-07-22 Halliburton Energy Services, Inc. Electromagnetic detector apparatus and method for oil or gas well, and circuit-bearing displaceable object to be detected therein
US6715001B1 (en) * 1999-09-15 2004-03-30 Koninklijke Philips Electronics N.V. Can microcontroller that employs reconfigurable message buffers
US7103759B1 (en) * 1999-10-28 2006-09-05 Imsys Technologies Ab Microcontroller architecture supporting microcode-implemented peripheral devices
US6816750B1 (en) * 2000-06-09 2004-11-09 Cirrus Logic, Inc. System-on-a-chip
US6834331B1 (en) 2000-10-24 2004-12-21 Starfish Software, Inc. System and method for improving flash memory data integrity
US7069546B2 (en) * 2001-12-03 2006-06-27 Corrigent Systems Ltd. Generic framework for embedded software development
EP1387254B1 (de) * 2002-07-31 2012-12-12 Texas Instruments Incorporated Übersprungbefehl, der einen Test mit direkten Daten durchführt
US7370082B2 (en) * 2003-05-09 2008-05-06 Microsoft Corporation Remote invalidation of pre-shared RDMA key
KR100640579B1 (ko) * 2004-01-05 2006-10-31 삼성전자주식회사 메모리 에뮬레이션 모듈을 이용하여 고속으로 테스트가능한 임베디드 mcu 및 그 테스트 방법
EP1650862B1 (de) * 2004-10-22 2019-08-07 Dialog Semiconductor GmbH System-On-Chip für Hochspannungsanwendung
US7747415B1 (en) * 2005-12-22 2010-06-29 Microstrain, Inc. Sensor powered event logger
JP4974546B2 (ja) * 2006-02-28 2012-07-11 キヤノン株式会社 画像処理装置及びその制御方法とプログラム
US20090164831A1 (en) * 2007-12-19 2009-06-25 Birru Hemanth K Controlled Default OTP Settings for ASICs
US8516225B2 (en) * 2011-03-25 2013-08-20 Koichi Kitagishi Central processing unit and microcontroller
CN109765985B (zh) * 2018-12-25 2022-11-22 赛特威尔电子股份有限公司 单片机间隙性工作控制方法、系统及装置
US11189327B2 (en) * 2019-08-21 2021-11-30 Micron Technology, Inc. Methods for providing device status in response to read commands directed to write-only mode register bits and memory devices and systems employing the same
US11893276B2 (en) * 2020-05-21 2024-02-06 Micron Technology, Inc. Apparatuses and methods for data management in a memory device

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3827030A (en) * 1973-01-29 1974-07-30 Gulf & Western Industries Programmable controller using a random access memory
US3940744A (en) * 1973-12-17 1976-02-24 Xerox Corporation Self contained program loading apparatus
US4171536A (en) * 1976-05-03 1979-10-16 International Business Machines Corporation Microprocessor system
US4204252A (en) * 1978-03-03 1980-05-20 Digital Equipment Corporation Writeable control store for use in a data processing system
US4205374A (en) * 1978-10-19 1980-05-27 International Business Machines Corporation Method and means for CPU recovery of non-logged data from a storage subsystem subject to selective resets
US4794558A (en) * 1979-06-12 1988-12-27 Motorola, Inc. Microprocessor having self-programmed eprom
US4642763A (en) * 1985-04-23 1987-02-10 International Business Machines Corp. Batch file processing
JPS6299856A (ja) * 1985-10-25 1987-05-09 Mitsubishi Electric Corp マイクロコンピユ−タ
US4718037A (en) * 1985-12-12 1988-01-05 Texas Instrumens Incorporated Microcomputer containing EPROM with self-program capability
JPS6356754A (ja) * 1986-08-28 1988-03-11 Toshiba Corp 入出力チヤネル
DE3743639A1 (de) * 1986-12-24 1988-07-07 Mitsubishi Electric Corp Ic-karte und system zur ueberpruefung ihrer funktionstuechtigkeit
US4843026A (en) * 1987-09-24 1989-06-27 Intel Corporation Architecture modification for improved ROM security
JP2621894B2 (ja) * 1987-12-26 1997-06-18 株式会社東芝 マイクロコンピュータ
EP0495280A1 (de) * 1991-01-18 1992-07-22 International Business Machines Corporation Analog-Digitalwandler mit Driftkompensation
US5063383A (en) * 1990-06-04 1991-11-05 National Semiconductor Corporation System and method for testing analog to digital converter embedded in microcontroller
US5199032A (en) * 1990-09-04 1993-03-30 Motorola, Inc. Microcontroller having an EPROM with a low voltage program inhibit circuit
KR100274099B1 (ko) * 1991-08-02 2001-01-15 비센트 비.인그라시아 점진적으로 프로그램가능한 비휘발성 메모리 및 이를 구비한 집적 회로와 비휘발성 메모리 프로그래밍 방법

Also Published As

Publication number Publication date
US5504903A (en) 1996-04-02
WO1993010492A1 (en) 1993-05-27
EP0614550A4 (de) 1994-07-18
EP0614550A1 (de) 1994-09-14
EP0614550B1 (de) 2000-02-02
DE69230642D1 (de) 2000-03-09

Similar Documents

Publication Publication Date Title
DE69230642T2 (de) Automatischer programmierungs-mikrokontroller mit gespeichertem befehl zur programm-steuerung von externem speicher und verfahren
DE69231230T2 (de) Einschaltverzoegerung fuer mikrokontroller
DE3876780T2 (de) Mikrorechner mit eingebauter chipauswahl und programmierbarer busdehnung.
DE68920216T2 (de) Karte für integrierten Schaltkreis mit geringem Stromverbrauch.
DE69032342T2 (de) Mikroprozessor und Verfahren zur Aufstellung seiner Peripheriefunktionen
US5446864A (en) System and method for protecting contents of microcontroller memory by providing scrambled data in response to an unauthorized read access without alteration of the memory contents
DE3889390T2 (de) Schreibe-Schutzmechanismus für nichtflüchtigen Speicher.
DE69209740T2 (de) Computerbetrieb bei Ausfall und Wiederkehr der Betriebsspannung.
DE2416609C2 (de) Datenverarbeitungsanlage mit einer zentralen Verarbeitungseinheit und Multiprogrammierung mit mehreren Programmunterbrechungs-Prioritätsstufen
DE3853759T2 (de) Datenprozessor mit zwei Betriebsmoden.
DE69228600T2 (de) Kleinleistungs-rechnerarchitektur und verfahren
DE69512485T2 (de) Fehlerbeseitigungs- und Systemverwaltungsunterbrechung
DE69230193T2 (de) Rechner-Schutzsystem
DE69031528T2 (de) Speicherpatrone
DE69231227T2 (de) Mikrokontroller mit schmelzsicherungs-emulierenden speichern und testverfahren
DE4307226A1 (de)
DE102016109892B4 (de) Datenverarbeitungsvorrichtung und Verfahren zum Einsparen von Leistung in einer Datenverarbeitungsvorrichtung
DE2755616A1 (de) Asymmetrischer multiprozessor
EP1262856B1 (de) Programmgesteuerte Einheit
DE69431500T2 (de) Geringem Leistungsverbraucheinchipmikrorechner mit mehreren peripheren Schaltkreisen
DE69831985T2 (de) Mikrocomputer mit Flash-EEPROM
DE69131309T2 (de) Speicherdekodierungssystem für eine tragbare Datenendstation
DE4238099C2 (de) Mikroprozessor mit mehreren Betriebsmoden
DE2755656A1 (de) Einrichtung zum speicherschutz fuer digitalspeicher
DE69031768T2 (de) Zweifachbus-Mikrorechneranordnung mit programmierbarer Sperrfunktionssteuerung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee