DE69231227T2 - Mikrokontroller mit schmelzsicherungs-emulierenden speichern und testverfahren - Google Patents

Mikrokontroller mit schmelzsicherungs-emulierenden speichern und testverfahren

Info

Publication number
DE69231227T2
DE69231227T2 DE69231227T DE69231227T DE69231227T2 DE 69231227 T2 DE69231227 T2 DE 69231227T2 DE 69231227 T DE69231227 T DE 69231227T DE 69231227 T DE69231227 T DE 69231227T DE 69231227 T2 DE69231227 T2 DE 69231227T2
Authority
DE
Germany
Prior art keywords
microcontroller
fuses
test
configuration
eprom
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
DE69231227T
Other languages
English (en)
Other versions
DE69231227D1 (de
Inventor
Ray Allen
Eric Berman
Greg Italiano
Ajay Padgaonkar
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 DE69231227D1 publication Critical patent/DE69231227D1/de
Publication of DE69231227T2 publication Critical patent/DE69231227T2/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/261Functional testing by simulating additional hardware, e.g. fault simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7814Specially adapted for real time processing, e.g. comprising hardware timers
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Microcomputers (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Description

    Hintergrund der Erfindung
  • Die vorliegende Erfindung betrifft allgemein Halbleitermikrokontroller und insbesondere einen Mikrokontroller, - der Betriebszustände aufweist, die durch EPROM-Sicherungen konfiguriert werden und in denen die EPROM-Konfigurierungssicherungen zu Prüfzwecken durch Latches emuliert werden.
  • Mikroprozessoren haben sich zu komplexen Instrumenten und Maschinen gewandelt, die ein ausgefeiltes, schnelles Echtzeit-Steuer-Leistungsvermögen erfordern. Anstatt großer Mikroprozessoren mit einem 16- oder 32-Bit-Leistungsvermögen zusammen mit Interrupt- Bearbeitungsroutinen-Chips, programmierbaren Timer-Chips sowie ROM- und RAM-Chips ist wurde vermehrt zu einem Einchip-Mikrokontroller übergegangen, bei dem alle Peripheriegeräte auf demselben Chip untergebracht sind. Der Betrieb des Chips in einem erweiterten Modus erlaubt einen Vielseitigkeitsgewinn aller chipintegrierten Merkmale. Mikrokontroller kommen heutzutage in einer breiten Vielfalt von Anwendungen zum Einsatz, wobei neue Anwendungen beinahe täglich gefunden werden. In tragbaren Instrumenten wie kleinen Pagern im Taschenformat spricht der Mikrokontroller auf empfangene Zeichen an, um sie zu interpretieren, erzeugt einen Piepton, um dem Nutzer den Eingang einer Nachricht mitzuteilen (oder nicht, falls der Nutzer einen Nichthör-Modus vorzieht) und erzeugt Mehrfach-Nachrichten unter den mehreren empfangenen letzten Nachrichten auf einer geeigneten Anzeige, typischerweise einem LCD. Der Mikrokontroller kann zudem aus seinem internen Speicher jede beliebige oder alle in einer gegebenen Zeitspanne empfangenen Nachrichten abrufen. Der Chip wird auch in anderen Instrumentierungen wie Meßgeräten und Prüfgeräten benutzt, wo er in der Lage ist, Tausende von Prüfvorgängen, jeden innerhalb einer Millisekunde oder weniger, auszuführen.
  • Andere Anwendungen umfassen Tastatur-Kontroller für Personalcomputer, in denen der Mikrokontroller dazu dient, viele Aufgaben, die vorher durch den Prozessor erledigt wurden, zu übernehmen. Der Chip führt fortwährend eine Reihe diagnostischer Verfahren aus und teilt dem Prozessor mit, wenn er ein Problem entdeckt. Neben weiteren Personalcomputer- Anwendungen werden Mikrokontroller benutzt in Modems zur Befehlsinterpretation und Datenübertragung, in Drucker-Puffern zur Hochgeschwindigkeitsausgabe von Daten als Vorbereitung auf den Betrieb des Druckers bei der beträchtlich niedrigeren Geschwindigkeit, bei der der Drucker arbeitet, für Farbplotter, in Farbkopierern, elektronischen Schreibmaschinen, Kabelfernseh-Endstellenausrüstungen, Rasenspreng-Kontrollern, Kreditkarten-Fernsprechausrüstungen, automobiltechnischen Anwendungen wie Motorsteuermodulen, Anti-Blockier-Bremssystemen, einer automobiltechnischen Aufhängesteuerung zur Bestimmung der gewünschten Fahrweichheit oder -härte abhängig von den Vorlieben des Nutzers, und einer Menge anderer Anwendungen, die täglich durch gewerbliche oder private Kunden genutzt werden.
  • Ein Echtzeit-Mikrokontroller ist ein Mikrocomputer, der dafür ausgelegt ist, schnelle Lösungen für signalverarbeitende Algorithmen und andere numerisch aufwendige Berechnungen bereitzustellen, und ebenso Echtzeit-Vorgänge wie das Öffnen und Schließen von Relais, das Steuern der Position und der Geschwindigkeit eines Motors, und anderen wie den oben erwähnten zu steuern. Zu Zwecken einer solchen Steuerung arbeitet die Zentralverarbeitungseinheit (CPU) des Mikrokontrollers in Verbindung mit gewissen Peripheriegeräten. Die Peripheriegeräte können unter anderem Geräte wie Timer, Signalports und Baudratengeneratoren einschließen.
  • In einem Mikrokontroller oder artgleichen Gerät wäre das Leistungsmerkmal wünschenswert, das Gerät zur Auswahl von verschiedenen verfügbaren Optionen, Merkmalen und/oder Komponenten zu konfigurieren und, falls notwendig, zu rekonfigurieren, damit eine Prüfung von jedem von ihnen durch den Nutzer möglich wird. In einer Reihe mit Mikrokontroller- Geräten des Standes der Technik, die als die PICTM16C5X-Familie durch die Microchip Technology Inc., dem Anmelder der vorliegenden Anmeldung, vermarktet werden, werden die Geräte mit einer Konfigurabilität eines chipintegrierten Oszillators, einem chipintegrierten Watchdog-Timer und gewissen Codeschutz-Modi versehen. Die Konfigurabilität und Auswahl der Konfigurierung wurde durch die Nutzung von EPROM-Sicherungen erreicht, die im wesentlichen nur einmal benutzbar sind, da die Sicherung - wenn sie erst einmal beschrieben ist - nicht ohne weiteres zur Prüfung einer neuen Konfigurierung verändert werden kann. Zudem ist das Beschreiben von EPROM-Sicherungen zu Prüfzwecken zeitaufwendig, was die Prüfzeit und -kosten erhöht. In der europäischen Publikation der Nummer 0420388 der Patentamneldung 90307156.1 wird eine Prüf-Latch-Schaltung offenbart, in der flüchtige Latch-Geräte, die mit nichtflüchtigen Speicherelementen verbunden sind, während des Prüfens benutzt werden, damit die Konfigurierungsinformation nur in die Latches geschrieben werden kann und damit die Daten, die in den Latches gespeichert sind, in derselben Bitlinie abgelegt werden; die durch das jeweilige Speicherelement der Architektur genutzt wird, so daß die Prüfung der Chipkonfigurierung ohne ein Beschreiben der Speicherelemente selbst ausgeführt wird.
  • Zusammenfassung der Erfindung
  • Die vorliegende Erfindung stellt einen Mikrokontroller und ein Verfahren zur Prüfung eines Mikrokontrollers entsprechend der Ansprüche 1 und 4 bereit, wobei EPROM- Konfigurierungssicherungen eines Mikrokontrollers oder Mikroprozessors durch Latches emuliert werden, um das Gerät zu anfänglichen Prüfzwecken zu konfigurieren und zu rekonfigurieren ohne die Beschränkungen, Kosten, Programmierzeit oder Prüfzeit, die bei EPROM-Sicherungen auftreten. Im wesentlichen ist in dem Gerät ein Satz von Latches untergebracht, um als Schatten der EPROM-Konfigurierungssicherungen zu wirken. Die Latches können beschrieben und wiederbeschrieben werden, um verschiedene Konfigurierungen, die sonst durch EPROM-Sicherungen auswählbar sind, zu emulieren, um es dem Hersteller und/oder dem Nutzer zu ermöglichen, die verschiedenen Konfigurierungen zu prüfen. Wenn der Prüfvorgang abgeschlossen ist, können die EPROM- Konfigurierungssicherungen benutzt werden, um das Produkt ihrer jeweiligen Anwendung zu konfigurieren, wobei die Prüf-Latches nicht mehr zur Auswahl oder Steuerung der Konfigurierung benötigt werden.
  • Entsprechend ist eine Hauptaufgabe der vorliegenden Erfindung, ein neues und verbessertes System und ein neues und verbessertes Verfahren zur vorübergehenden Konfigurierung und Rekonfigurierung auswählbarer Optionen, Modi, Merkmale und Funktionen eines Mikrokontrollers oder Mikroprozessor-Chips bereitzustellen, damit die ausgewählte Option oder dergleichen vor der endgültigen Auswahl der Konfigurierung geprüft werden kann.
  • Es ist eine speziellere Aufgabe der Erfindung, in solch einem Gerät Latches zum Shadowen oder zur Emulierung von EPROM-Konfigurierungssicherungen, die sonst zur Konfigurierung der verschiedenen Betriebsoptionen zum Zwecke des Durchführens von Prüfungen benutzt würden, und, wenn die Prüfungen vollendet sind und die gewünschte Option oder dergleichen endgültig für den Gerätebetrieb ausgewählt wurde, zur Durchführung jener Auswahl durch Programmierung (oder Nicht-Programmierung) der geeigneten EPROM-Sicherungen und durch Entfernen jedweder Konfigurierungssteuerung aus den Latches bereitzustellen.
  • Kurze Beschreibung der Zeichnungen
  • Die oben dargelegten und weitere Aufgaben, Merkmale, Aspekte und damit verbundenen Vorteile der Erfindung werden durch eine Betrachtung der folgenden detaillierten Beschreibung der besten Ausführungsform der Erfindung, wie sie gegenwärtig vorliegt, in Verbindung mit den beigefügten Zeichnungen deutlich werden. Es zeigen:
  • Fig. 1 ein Blockdiagramm des gesamten Mikrokontroller-Chips, der ein bevorzugtes Ausführungsbeispiel der vorliegenden Erfindung aufweist;
  • Fig. 2 ein Timer-Diagramm, das das interne Taktschema des Mikrokontroller-Chips der Fig. 1 darstellt;
  • Fig. 3 weist Teile (a), (b) und (c) auf, welche vereinfachte Blockdiagramme von vier (Teil (c) definiert im wesentlichen zwei) verschiedenen auswählbaren Oszillatormoden für den Mikrokontroller-Chip der Fig. 1 darstellen;
  • Fig. 4 ist ein Timer-Diagramm der Anweisungs-Abruf/Ausführ-Pipeline des Anweisungs- Zyklusses des Mikrokontroller-Chips der Fig. 1;
  • Fig. 5 ist ein Speicherbelegungsplan der verschiedenen Betriebsarten des Mikrokontroller- Chips der Fig. 1, die durch Wählen verschiedener Konfigurierungen des Programmspeichers ausgewählt werden können;
  • Fig. 6 ist ein Timer-Diagramm für ein Lesen und Beschreiben eines externen Programmspeichers;
  • Fig. 7 ist ein Beispiel eines Anweisungsdecodierplanes des Anweisungssatzes des Mikrokontrollers der Fig. 1 in mnemonischem Code;
  • Fig. 8 ist ein vereinfachtes Blockdiagramm der chipintegrierten Reset-Schaltung für den Mikrokontroller;
  • Fig. 9 ist ein Timer-Diagramm für einen Abschnitt der Rücksetzschaltung der Fig. 8;
  • Fig. 10 ist ein bevorzugter Programmier-Algorithmus zum Zwecke der Autoprogrammierung des Mikrokontrollers;
  • Fig. 11 ist ein vereinfachtes Blockdiagramm des Autoprogrammierers;
  • Fig. 12 ist ein Timer-Diagramm für den Autoprogrammierer;
  • Fig. 13 ist eine Tabelle, die ein Prüfmodus-Register für den Mikrokontroller darstellt; und
  • Fig. 14 ist eine Tabelle, die eine Organisierung des Prüf-Latch-Emulierens der Konfigurierungssicherungen des Mikrokontrollers darstellt, um eine Konfigurierung des Gerätes zu ermöglichen, ohne daß die Sicherungen gesprengt werden.
  • Detaillierte Beschreibung
  • Die Erfindung wird anhand eines EPROM-basierten Hochleistungs-8-Bit-Mikrokontrollers beschrieben, wobei dieser aber nur als Beispiel dient und keine Beschränkung der Erfindung darstellen soll. In einem geeigneten Ausführungsbeispiel wird der Mikrokontroller in einem CMOS-Halbleiter-integrierten Schaltungschip hergestellt, der eine Zentralverarbeitungseinheit (CPU) beherbergt, die einen 250-Nanosekunden-(ns)-Anweisungszyklus aufweist mit einem Feld von peripheren Ressourcen zur Durchführung komplexer Echtzeit- Steueranwendungen. Einige der Steueranwendungen, für die ein solches Gerät geeignet ist, sind in der obigen Darstellung des Hintergrunds der Erfindung dieser Patentschrift beschrieben. Das EPROM-basierte Gerät gestattet dem Nutzer, Code auf einer Fenster aufweisenden Ausführung eines Parallelseitengehäuses (keramisch DIP oder CERDIP) zu entwickeln und zu prüfen und - nachdem dies geschehen ist - mit einer kostengünstigeren, einmal programmierbaren (OTP) Ausführung eines Kunststoff-DIP-Gehäuses in Produktion zu gehen.
  • Die Merkmale des CPU in diesem Ausführungsbeispiel beinhalten bevorzugt ein vollstatisches Design, einen 8-Bit breiten Datenpfad, 16-Bit breite Anweisungen (alles Einwort-Anweisungen), in den meisten Fällen Einzyklus-, in den anderen Fällen Zweizyklenanweisungen, eine Zykluszeit von 250 ns bei 16 Megahertz (MHz), oder höheren Frequenzen (beispielsweise 20 oder 25 MHz); ein Megabit adressierbaren Programmspeicherraum (im 64K · 16-Format), eine direkte, indirekte (mit Autoinkrementierung und -dekrementierung), unmittelbare und relative Adressierung und vier Betriebsarten, nämlich den Mikrokontrollermodus, den (codegeschützten) sicheren Mikrokontrollermodus, den erweiterten Mikrokontrollermodus (sowohl interner als auch externer Programmspeicherzugriff) und den Mikroprozessormodus (äußerer Nur- Programmspeicherzugriff).
  • Bevorzugt existiert ein hohes Niveau an Geräteintegration, einschließend einen chipintegrierten 32K-EPROM-Programmspeicher (das heißt, zusammen mit dem Mikrokontroller in oder auf dem Chip selber untergebracht), 2K-Allzweckregister (SRAM), spezielle Funktionsregister, einen Hardware-Stapel, externe/interne Interrupts I/O, Timer/Zähler, Capture-Register, PWM-Hochgeschwindigkeits-Outputs (10 Bit, 15,6 KHz) und einen seriellen Port (ein universeller synchronasynchron Empfänger-Sender oder USART) mit einem Baudratengenerator.
  • Einige der Merkmale des Ausführungsbeispiels des Mikrokontrollers, der hier beschrieben werden soll, auf den zumindest einige der erfinderischen Aspekte Anwendung finden, beinhalten einen Watchdog-Timer mit eigenem chipintegrierten RC-Oszillator (Widerstand- Kapazität) für verläßlichen Betrieb, einen energiesparenden SLEEP-Modus, einen chipintegrierten Power-Up-Timer und ein Power-on-Reset-Merkmal zur Verringerung externer Beschaltung, einen chipintegrierten Oszillator-Start-Up-Timer, Sicherungs-Selektor- Oszillator-Optionen einschließend einen Standardkristalloszillator, einen Niederfrequenz- Kristalloszillator und einen RC-Oszillator oder eine externe Taktung, und einen gesicherten Codeschutz.
  • Der Mikrokontroller des Beispiels, in dem die vorliegende Erfindung angewandt wird, ist ein Hochleistungsmikrokontroller, der teilweise gewisse Architekturmerkmale aufweist, die in herkömmlichen RISC-Mikroprozessoren (Berechnung mit verringertem Anweisungssatz) vorzufinden sind. Es wird eine modifizierte Harvard-Architektur verwendet, in der auf Programme und Daten aus getrennten Speichern (welche als Programmspeicher bzw. als Datenspeicher bezeichnet werden) zugegriffen wird. Die Bandbreite wird über eine herkömmliche Von-Neuman-Architektur verbessert, in der das Programm und die Daten aus demselben Speicher abgerufen werden. Die Trennung des Programm- und Datenspeichers ermöglicht zudem Anweisungen, deren Größe von der eines 8 Bit breiten Datenwortes abweicht. 16 Bit breite Betriebscodes (Op-Codes) werden in dem Mikrokontroller eingesetzt, so daß Einwort-Anweisungen durchgehend möglich sind. Ein voller 16 Bit breiter Programmspeicherzugriffsbus ruft eine 16-Bit-Anweisung in einem einzigen Zyklus ab und eine 2-Stufen-Pipeline überlappt den Abruf und die Ausführung der Anweisungen. Folglich werden alle nachstehend beschriebenen Anweisungen in einem einzigen Zyklus (250 ns bei 16 MHz) außer bei Programmzweigen und speziellen Anweisungen ausgeführt, um Daten zwischen dem Programm und den Datenspeichern zu übertragen.
  • 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 ausschließlich intern ist, oder in einem Mikroprozessormodus, der sowohl intern als auch extern ist. Datenspeicherplätze (Dateiregister), beispielsweise 256 solcher Stellen, werden direkt oder indirekt durch den Mikrokontroller adressiert. Spezielle Funktionsregister einschließend den Programmzähler sind in dem Datenspeicher belegt. Der Gebrauch eines im wesentlichen orthogonalen (symmetrischen) Anweisungssatzes ermöglicht, daß jedwede Operation auf jedwedem Register unter Benutzung von jedwedem Adressiermodus ausgeführt werden kann.
  • Der Mikrokontroller wird - neben weiteren Figuren - unter Bezugnahme auf das Blockdiagramm eines Mikrokontroller-Chips 10 der Fig. 1, beschrieben, aber es sollte dem Leser nützen, wenn er zuerst das interne Taktgabeschema des Mikrokontrollers betrachtet, das in Fig. 2 gezeigt ist. Der Mikrokontroller 10 kann neben weiteren Oszillator-Optionen eine externe Takt-Eingabe (EC) auf einem OSC1-Pin 12 eines Schaltungsblocks oder Moduls 15 annehmen, der Timer- oder ähnliche (Reset- und Steuer-)beschaltung beherbergt, was eingehender noch beschrieben werden soll. Intern wird die Takt-Eingabe an den OSC1-Pin durch vier geteilt, um vier Phasen (Q1, Q2, Q3 und Q4) zu erzeugen, wobei jede eine Frequenz gleich einem Viertel der Takt-Eingabe und einen Arbeitszyklus von 25% aufweist. Wenn der EC-Eingabemodus oder ein RC-Oszillatormodus (RC-Modus, wie unten beschrieben) ausgewählt werden, liefert der OSC2-Pin 13 des Mikrokontroller-Chips eine Takt-Ausgabe (CLKOUT), die hochpegelig (high) während Q3 und Q4 und niederpegelig (low) während Q1 und Q2 ist, wie im unteren Abschnitt des Timer-Diagramms der Fig. 2 gezeigt ist. Während die interne Chip-Rücksetzung aktiv ist, hält der Taktgenerator den Chip 10 (welcher im Zuge dieser Schrift auch bisweilen als Gerät oder als Mikrokontroller bezeichnet wird) in dem Q1-Zustand, wobei die CLKOUT-Ausgabe niederpegelig (low) gefahren wird.
  • Die Arbeitsweise des OSC1-Pins 12 ist wie die der externen Takt-Eingabe in dem EC-Modus, und die Oszillatoreingabe in dem RC-Modus oder Kristall/Resonatormodus (XT-Modus, wie weiter unten beschrieben). Der OSC2-Pin 13 arbeitet als Oszillatorausgabe. Er ist an einem Kristall oder Resonator in dem XT-Modus verbunden und, im EC-Modus oder RC-Modus, gibt er CLKOUT mit einem Viertel der Frequenz an OSC 1 aus und bestimmt die Anweisungszyklenrate.
  • Die Oszillator-Optionen ermöglichen es, daß das Gerät an die besonderen Anwendungen, für die es gedacht ist, angepaßt wird. Beispielsweise verringert die RC-Oszillator-Option Systemkosten, wohingegen eine LF-(Niederfrequenz)-Kristall/Resonator-Option Energie spart. Die Oszillator-Optionen oder -modi werden unter Bezugnahme auf Fig. 3 beschrieben, die drei Schaltungsdiagramme aufweist, die mit (a), (b) und (c) jeweils für die EC-, RC- und XT- (oder Niederfrequenz-Kristalloszillator-, LF-)moden bezeichnet sind. Jeder beliebige dieser vier möglichen Modi kann durch eine geeignete Definition der Zustände eines Paares von EPROM-Konfigurierungssicherungen FOSC1 und FOSC0 ausgewählt werden, welche an vorbestimmten Adreßplätzen im Programmspeicher 17 (Fig. 1) abgelegt sind und von denen zusätzliche Details später beschrieben werden. In Teil (a) von Fig. 3 wird die OSC1-Eingabe durch CMOS-Treiber für eine externe Taktgabe getrieben, so daß der Pin 12 eine Hochimpedanz-CMOS-Eingabe ist. Die Schaltung 15a führt eine geteilt-durch-4-Funktion durch und der OSC2-Pin 13 gibt CLKOUT aus. Der bevorzugte Frequenzbereich für diese Mode ist Gleichstrom bis 16 Mhz.
  • Die RC-Mode, die in Teil (b) verbildlicht ist, erfordert einen äußeren Widerstand 18 und eine äußere Kapazität 19 in Reihenschaltung verbunden mit einer Energiequelle VDD, wobei der Verbindungspunkt zwischen den RC-Komponenten, die an dem OSC1-Pin 12 angeschlossen sind, und der CLKOUT-Eingabe am OSC2-Pin 13 angeordnet ist. Die inneren Bauelemente der Schaltung 15b für diesen Modus sind wie gezeigt, wobei die Eingabe SLEEP an Gate 23 eine Anweisung innerhalb des Anweisungssatzes des Mikrokontrollers darstellt, was aber noch zu beschreiben ist. Während die RC-Mode kostengünstig ist, ist sie Schwankungen hinsichtlich der Oszillations-Frequenz mit der Energiequelle, der Temperatur und des Chips aufgrund von Verarbeitungsschwankungen unterworfen. Entsprechend ist sie keine angemessene Wahl für zeitempfindliche Anwendungen, welche eine genaue Oszillator- Frequenz erfordern. Der Frequenzbereich für diese Mode ist nominell Gleichspannung bis 4 Mhz.
  • In der XT-Mode von Teil (c) von Fig. 3 ist ein Kristall- oder Keramikresonator 25 in Fundamentalmode über die OSC1- und OSC2-Pins 12 und 13 verbunden und das grundsätzliche interne Aussehen der Schaltung 15c ist wie gezeigt. Kommt ein Obertonmodenkristall zum Einsatz (beispielsweise über 20 Mhz), würde eine Tankschaltung, die aus einer LC-Reihenschaltung über der Kapazität C2 besteht, eingesetzt werden, um den Gewinn bei der Fundamentalfrequenz zu dämpfen. Der Frequenzbereich von XT beträgt 0,2- 16 Mhz. Die LF-Mode ist im wesentlichen dieselbe wie die XT-Mode, außer daß sie für Kristalle mit einem Frequenzbereich 32 Khz-200 Khz verwendet wird.
  • Unter Bezugnahme auf Fig. 4, die die Anweisungs-Abruf/Ausführ-Pipeline darstellt, besteht ein Anweisungszyklus in dem Mikrokontroller aus Phasen Q1, Q2, Q3 und Q4 des internen Taktgebers. Der Abruf und die Ausführung einer Anweisung werden gepipelined, so daß der Abruf einen Anweisungszyklus und das Decodieren zusammen mit dem Ausführen einen anderen Anweisungszyklus (siehe unterer Abschnitt von Fig. 4) einnimmt. Das Pipelinen jedoch resultiert tatsächlich in der Ausführung von jeder Anweisung in einem einzelnen Zyklus, was in jenem Abschnitt von Fig. 4 gezeigt ist, mit ein paar Ausnahmen (beispielsweise wo eine Anweisung den Programmzähler PC ändert oder wo die Anweisungen TABLRD und TABLWT benutzt werden), was nun diskutiert werden soll. Ein Abrufzyklus beginnt damit, daß der PC (generell gezeigt bei 30 in Fig. 1) in Phase Q1 inkrementiert. Die Adresse wird den Pins AD15-AD0 (bezeichnet AD< 15 : 0> , siehe 32 in Fig. 1) während Q2 zur internen Ausführung übertragen, und die Anweisung wird auf der fallenden Flanke von Q4 gelatcht. Die abgerufene Anweisung wird in ein Anweisungsregister (IR) gelatcht, das während der Phasen Q2, Q3 und Q4 dekodiert und ausgeführt wird. Der Datenspeicher (beliebige Zugriffsspeicher oder RAM) 34 (Fig. 1) wird während Q2 (Operand Read) gelesen und während Q4 (Destination Write) beschrieben.
  • Die Abschnitte von Fig. 4, die mit ALE und (bei 35 von Fig. 1) bezeichnet sind, sind an Portpins, die softwaremäßig als Eingabe oder Ausgabe konfigurierbar sind, mit einer TTL- kompatiblen Eingabe (Bits 0 und 1 von Port E jeweils). In einem Betriebsmodus oder einem erweiterten Betriebsmodus des Mikrokontrollers (weiter unten diskutiert) des Chips 10 ist der ALE-Pin die Adreß-Latch-Freigabeausgabe und die Adresse wird auf der fallenden Flanke der ALE-Ausgabe gelatcht und der -Pin ist die Ausgabefreigabesteuerausgabe (active low, wie durch einen Balken über der Bezeichnung angedeutet).
  • Zusätzlich zu den getrennten Programm- und Datenspeicherräumen 17 und 34 (Fig. 1) in der Harvard-Architektur, die in dem Mikrokontroller zum Einsatz kommt, ist ein Hardware-Stack 37 vorgesehen, der getrennt von beiden ist. Der Datenraum in dem Ausführungsbeispiel weist eine Größe von 256 Bytes auf und ist im Prinzip als statischer RAM implementiert. Der verbleibende Abschnitt des Datenraums besteht aus speziellen Funktionsregistern, die als individuelle Hardware-Register ausgeführt sind.
  • In dem Ausführungsbeispiel ist kein Datenspeicheradressbus oder Datenbus außerhalb des Chips angeordnet, und daher kann sich der Datenspeicher nicht nach außen ausdehnen. Falls gewünscht, können Datensegmente jedoch in dem externen Programmspeicher geschaffen werden. Der 16 Bit breite chipintegrierte Programmspeicher 17 wird durch den 16-Bit- Programmzähler 20 zum Anweisungsabruf und durch ein 16 bit breites Tabellenzeigerregister (TBLTPR) 38 zur Bewegung von Daten in den Datenraum und aus diesem heraus adressiert.
  • In dem Ausführungsbeispiel ist der adressierbare Programmspeicher 64K · 16 und der chipintegrierte Programmspeicher ist ein EPROM-Feld, das mit 2K · 16 ausgelegt ist.
  • Der Mikrokontroller 10 kann in jedem beliebigen der vier verschiedenen Modi arbeiten, die verschiedene Programmspeicherorganisierung oder Konfigurierungen aufweisen, auf welche vorher schon Bezug genommen wurde. Diese sind:
  • (1) ein Mikrokontroller-Modus, in dem ausschließlich interne Ausführung erlaubt ist und bei dem daher ausschließlich der chipintegrierte Programmspeicher 17 verfügbar ist. Ein versuchsweiser Zugriff auf Programmspeicher jenseits 2K erzeugt automatisch eine "No Operation"-Anweisung (NOP). Ein Satz von EPROM-Sicherungen (Konfigurierungs-Bits) wird gebraucht, um verschiedenartige Optionen auszuwählen, einschließend diese Betriebsmodi des Gerätes, das Vorsehen von Code-Sicherung und Schreibschutz. Die Sicherungen, wie auch die Prüfspeicher, die am Herstellungsort zum Prüfen des Geräts verwendet werden, und der Boot-Speicher, der zum Speichern der Programme, die zur Programmierung und Verifizierung benutzt werden, gebraucht wird, sind in diesem Modus zugänglich.
  • (2) Ein geschützter Mikrokontroller-Modus, der derselbe ist wie der Mikrokontroller-Modus, außer das der Codeschutz freigegeben ist, was nunmehr beschrieben wird.
  • (3) Ein erweiterter Mikrokontroller-Modus, in dem ein chipintegrierter Programmspeicher 17 (0-2K) und ein externer Speicher (2K-64K) zur Verfügung stehen, wohingegen Sicherungen, ein Prüfspeicher und ein Boot-Speicher nicht zugänglich sind. Die Ausführung schaltet automatisch auf den externen Speicher um, wenn die Programmspeicheradresse die höchste in letzterem Speicher zur Verfügung stehende Adresse überschreitet.
  • (4) Ein Mikroprozessormodus, in dem ein chipintegrierter Programmspeicher 17 nicht benutzt wird, und in dem die gesamten 64K des externen Speichers zur Programmierung extern abgelegt werden. Sicherungen, Prüfspeicher und Boot-Speicher sind in diesem Modus nicht zugänglich.
  • Ein Speicherbelegungsplan der verschiedenen Modi ist in Fig. 5 gezeigt. Der geschützte Mikrokontrollermodus ist nicht gezeigt, weil er derselbe wie der Mikrokontrollermodus ist, bis auf die oben dargestellten Abweichungen.
  • Ein externes Programmspeicherinterface, das gebraucht wird, wenn externe Ausführung ausgewählt ist, weist Ports C, D und E (siehe 32 und 35 von Fig. 1) auf, 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. Drei Bit-E-Port- Ausgaben steuern die Signale ALE (Adreß-Latch-Freigabe), (Ausgabefreigabe) und (Schreibfreigabe). Externe Programmspeicherlese-und schreibtimer sind in Fig. 6 gezeigt. Ein externer Speicherzugriffszyklus umfaßt vier Oszillatorzyklen (zwischen steigenden Flanken aufeinanderfolgender Q1-Zustände). Während Q2 wird eine 16-Bit-Adresse an die Ports C und D geliefert, und ALE wird assertiert. Die Adreßausgabe wird durch die fallende Flanke von ALE gelatcht. In einem Anweisungsabruf oder Datenlesezyklus wird während Q3 und Q4 assertiert. Die Daten werden auf der steigenden Flanke von gelatcht. Eine Oszillatorzyklustrennung zwischen und der Adreßausgabe garantiert den externen Speichern eine angemessene Zeitspanne, um ihre Ausgabetreiber zu schließen, bevor die Adresse über den Bus geschickt wird. In einem Datenschreibzyklus (nur während der TABLW-Anweisung), der einer Adreßausgabe während Q2 folgt, werden Daten während Q3 und Q4 auf dem Bus transportiert. wird während Q4 assertiert und die Datenausgabe ist sowohl bei der fallenden wie auch bei der steigenden Flanke gültig.
  • Der Datenspeicher 34 (Fig. 1) auf dem Mikrokontroller-Chip ist als 256 · 8 organisiert, und auf ihn kann über einen internen 8-Bit-Datenbus 40 und einen 8-Bit-Datenspeicheradreßbus 42, der sich von dem Anweisungsregister 45 ableitet, zugegriffen werden. Die Adressierung wird über einen Direktadressiermodus oder durch einen indirekten Adressiermodus vollzogen, wobei Dateiauswahlregister als Zeigerregister Verwendung finden. Spezielle Funktionsregister (wie beispielsweise W (Akkumulator), RTCC, Programmzähler und Ports) mit Ausnahme einiger weniger (beispielsweise TBLATH (table latch high byte), TBLATL (table latch low byte)) werden in dem Datenspeicher abgelegt, und der Rest des Datenspeichers wird als statischer RAM implementiert. Der Watchdog-Timer und der Stapelzeiger, wie auch TBLATH und TBLATL, sind nicht adressierbar.
  • In dem Anweisungssatz für den Mikrokontroller ist jede Anweisung eine Einwortanweisung, 16 bit breit und praktisch alle Anweisungen werden in einem Anweisungszyklus ausgeführt. Der Anweisungssatz besteht aus 55 Anweisungen, ist hoch orthogonal und ist in Datenbewegungsoperationen, arithmetische und logische Operationen, Bitmanipulationsoperationen, Programmsteueroperationen und spezielle Steueroperationen unterteilt. Der orthogonale Anweisungssatz erlaubt das Auslesen und Beschreiben spezieller Funktionsregister, wie des PCs und der Statusregister. Die Anweisungen, in mnemonischem Code, und deren Beschreibungen sind wie folgt (man betrachte ebenfalls den Anweisungsentschlüsselungsplan von Fig. 7).
  • - ADDLW (Add literal to W): Inhalte des W-Registers 47 werden zu dem 8-Bit-Literal- Feld (constant data) "k" 49 addiert und das Ergebnis wird in dem W-Register abgelegt.
  • - ADDWF (Add W to f): Addiere die Inhalte des W-Registers 47 zu der Datenspeicherstelle "f" (register file address). Falls "d" (destination select) gleich 0 ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" gleich 1 ist, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - ADDWFC (Add W and Carry to f): Addiere das W-Register und das Carry-Flag zu der Datenspeicherstelle "f". Falls "d" gleich 0 ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich 1 ist, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - ANDLW (AND literal and W): Die Inhalte des W-Registers werden UND-verknüpft mit dem 8-Bit-Literal "k". Das Ergebnis wird in dem W-Register abgelegt.
  • - ANDWF (AND W with f): UND-verknüpfe das W-Register mit der Datenspeicherstelle "f". Falls "d" gleich 0 ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" gleich 1 ist, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - BCF (Bit Clear f): Das Bit "b" (Bit-Adresse innerhalb des 8-Bit-Datei-Registers) in der Datenspeicherstelle "f" wird auf 0 zurückgesetzt.
  • - BSF (Bit Set f): Das Bit "b" in der Datenspeicherstelle "f" wird auf 1 gesetzt.
  • - BTFSC (Bit test, skip if clear): Dies kann eine der wenigen Zweizyklen-Anweisungen sein. Falls das Bit "b" an der Datenspeicherstelle "f" gleich "0" ist, dann wird die nächste Anweisung übersprungen. Falls das Bit "b" gleich 0 ist, wird die nächste Anweisung, die während der gegenwärtigen Anweisung abgerufen wird, übersprungen, und NOP (no operation) wird stattdessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung gemacht wird.
  • - BTFSS (Bit test, skip if set): Falls das Bit "b" an der Datenspeicherstelle "f' gleich "1" ist, dann wird die nächste Anweisung, die während der gegenwärtigen Anweisungsausführung abgerufen wird, ausgesondert, und ein NOP wird stattdessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung gemacht wird.
  • - BTG (Bit Toggle f): Das Bit "b" in der Datenspeicherstelle "f' wird invertiert.
  • - CALL (Subroutine Call): Dies ist eine Zweizyklen-Anweisung. Subroutinenaufruf innerhalb einer 8K-Seite. Zuerst wird die Return-Adresse (PC + 1) auf den Stack gepusht. Der 13-Bit-Wert wird in die PC-Bits < 12 : 0> geladen. Dann werden die oberen acht Bit des PC in den PCLATH (program counter high holding latch) kopiert.
  • - CLRF (Clear f and Clear d): Die Inhalte der Datenspeicherstelle "f" werden auf 0 gesetzt. Falls "d" gleich "0" ist, werden die Inhalte sowohl der Datenspeicherstelle "f" und des W-Registers beide auf "0" gesetzt. Falls "d" gleich "1" ist, werden die Inhalte der Datenspeicherstelle "f' auf "0" gesetzt.
  • - CLRWDT (Clear Watchdog Timer): Der Watchdog-Timer (WDT) und der Prescaler des WDT werden zurückgesetzt. Die CPU-Statusbits TO (time-out) und PD (power-down) werden gesetzt.
  • - COMF (Complement f): Die Inhalte der Datenspeicherstelle "f" werden komplementiert. Falls "d" gleich "0" ist, wird das Ergebnis in W gespeichert. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f' gespeichert.
  • - CPFSEQ (Compare f with W, skip if f = W): Falls die Inhalte der Datenspeicherstelle "f" gleich den Inhalten des W-Registers sind, wird die nächste Anweisung, die während der Ausführung der gegenwärtigen Anweisung abgerufen wird, übersprungen (ausgesondert) und ein NOP wird anstattdessen ausgeführt, wodurch dies zu einer Zweizyklen- Anweisung wird.
  • - CPFSGT (Computer f with @, skip if F > W): Falls die Inhalte der Datenspeicherstelle "f" größer als die Inhalte des W-Registers sind, wird die nächste Anweisung, die während der Ausführung der gegenwärtigen Anweisung abgerufen wird, übersprungen (ausgesondert) und ein NOP wird anstattdessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung wird.
  • - CPFSLT (Compare f with W, skip if f < W): Falls die Inhalte der Datenspeicherstelle "f" kleiner sind als die Inhalte des W-Registers, wird die nächste Anweisung, die während der Ausführung der gegenwärtigen Anweisung abgerufen wird, übersprungen (ausgesondert) und ein NOP wird anstattdessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung wird.
  • - DAW (Decimal Adjust W Register): Der 8-Bit-Wert in dem W-Register, der sich aus der vorherigen Addition zweier Variablen, (beide in dem gepackten BCD-(binary coded decimal)-Format) wird angepaßt, und ein korrektes, gepacktes BCD-Ergebnis wird erzeugt. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register und der Datenspeicherstelle "f" abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis nur in der Datenspeicherstelle "f" abgelegt.
  • - DECF (Decrement f): Dekrementiere die Datenspeicherstelle "f". Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - DECFSZ (Decrement f, skip if 0): Die Inhalte der Datenspeicherstelle "f" werden dekrementiert. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt. Falls das Ergebnis gleich "0" ist, wird die nächste Anweisung, die bereits abgerufen wurde, durch Aussondern übersprungen, und NOP wird anstattdessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung gemacht wird.
  • - DCFSNZ (Decrement f, skip if not 0): Die Inhalte der Datenspeicherstelle "f" werden dekrementiert. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f' abgelegt. Falls das Ergebnis nicht "0" ist, wird die nächste Anweisung, die während der Ausführung der gegenwärtigen Anweisung abgerufen wird, ausgesondert. Ein NOP wird anstatt dessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung wird.
  • - GOTO (Unconditional Branch): Dies ist eine Zweizyklen-Anweisung. Sie erlaubt eine nicht mit Bedingungen verbundene Abzweigung irgendwo innerhalb der Grenzen einer 8K-Seite. Der 13-Bit-Immediate-Wert wird in die PC-Bits geladen. Dann werden die oberen acht Bits des PC nach PCLATH geladen.
  • - INCF (Increment 1): Die Inhalte der Datenspeicherstelle "1" werden inkrementiert. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt.
  • - INCFSZ (Increment f, skip if 0): Die Inhalte der Datenspeicherstelle "f" werden inkrementiert. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt. Falls das Ergebnis gleich "0" ist, wird die nächste Anweisung, die während der Ausführung der gegenwärtigen Anweisung abgerufen wird, übersprungen "ausgesondert" und ein NOP wird anstatt dessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung wird.
  • - INFSNZ (Increment f, skip if not 0): Die Inhalte der Datenspeicherstelle "f" werden inkrementiert. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt. Falls das Ergebnis nicht gleich "0" ist, wird die nächste Anweisung, die während der Ausführung der gegenwärtigen Anweisung abgerufen wird, übersprungen, und ein NOP wird anstattdessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung wird.
  • - IORLW (Inclusive OR literal with W): Die Inhalte des W-Registers werden INKLUSIV- ODER-verknüpft mit dem 8-Bit-Literal "k". Das Ergebnis wird in dem W-Register abgelegt.
  • - IORWF (Inclusive OR W with f): Inklusive ODER-Verknüpfung des W-Registers mit der Datenspeicherstelle "f". Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - LCALL (Long Call): Erlaubt einen nicht mit Bedingungen verbundenen Subroutinenaufruf irgendwohin innerhalb des externen 64k-Programmspeicherraums. Die Return-Adresse (PC + 1) wird zunächst auf den Stack gepusht, und dann wird eine 16- Bit-Zieladresse in den PC geladen. Die unteren acht Bits der Zieladresse werden in die Anweisung eingebettet. Die oberen acht Bits des PC werden aus dem PCLATH geladen.
  • - MOVFP (Move f to p): Bewege Daten von der Datenspeicherstelle "f" zu der Datenspeicherstelle "p" (peripheral register file address). Die Stelle "f" kann irgendwo in dem 256-Wort-Datenspeicher sein, während die Stelle von "p" begrenzt ist. Entweder "p" oder "f" können das W-Register sein und sowohl "f" und "p" können indirekt adressiert werden.
  • - MOVLB (Move Literal to BSR): Die Konstante wird in das BSR (bank select register) geladen. Nur die unteren vier Bits des BSR werden physisch 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" zu der Datenspeicherstelle "f". Die Stelle "f" kann irgendwo in dem 256-Byte- Datenspeicherraum sein, während die Stelle von "p" begrenzt ist. Entweder "p" oder "f" können das W-Register sein.
  • - MOVWF (Move W to f): Bewege Daten von dem W-Register zu der Datenspeicherstelle "f". Die Stelle "f" kann irgendwo in dem 256-Wort-Datenspeicherraum sein.
  • - NEGW (Negate W): Die Inhalte des W-Registers werden unter Benutzung eines Zweierkomplimentes negiert. Falls "d" gleich "0" ist, wird das Ergebnis in dem W- Register und der Datenspeicherstelle "f" abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis nur in der Datenspeicherstelle "f' abgelegt.
  • - NOP (no operation): Kein Betrieb.
  • - RETFIE (Return from Interrupt): Dies ist eine Zweizyklen-Anweisung, die von dem Interrupt zurückkehrt. Der Stack wird gepoppt und TOS (top of the stack) wird in PT abgelegt. Interrupts werden durch Löschen eines GLINTD-(global interrupt disable)-Bit freigegeben.
  • - RETLW (Return Literal to W): Dies ist eine Zweizyklen-Anweisung. Das W-Register wird mit dem 8-Bit-Literal "k" geladen. Das PC wird aus dem TOS (der Return-Adresse) geladen. Der High-Address-Latch (PCLATH) verbleibt unverändert.
  • - RETURN (Return from Subroutine): Dies ist eine Zweizyklen-Anweisung, die von der Subroutine zurückkehrt. Der Stack wird gepoppt, und der TOS wird in den PC geladen.
  • - RLCF (Rotate Left f through Carry): Die Inhalte der Datenspeicherstelle "f" werden durch das Carry-Flag um ein Bit nach links gedreht. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" = "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" rückgespeichert.
  • - RLNCF (Rotate Left f (no carry)): Die Inhalte der Datenspeicherstelle "f" werden um ein Bit nach links gedreht. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1 ", wird das Ergebnis in der Datenspeicherstelle "f rückgespeichert.
  • - RRCF (Rotate Right f through Carry): Die Inhalte der Datenspeicherstelle "f" werden durch das Carry-Flag um ein Bit nach rechts gedreht. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis an der Datenspeicherstelle "f" abgelegt.
  • - RMCF (Rotate Right f (no carry)): Die Inhalte der Datenspeicherstelle "f" werden um ein Bit nach rechts gedreht. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" abgelegt.
  • - SETF (Set f and Set d): Falls "d" gleich "0" ist, werden sowohl die Datenspeicherstelle "f" als auch das W-Register an die höchste Stelle des Allzweckdateiregisters, das als statischer RAM implementiert ist, gesetzt. Falls "d" gleich "1" ist, wird nur die Datenspeicherstelle "f" an jene Stelle gesetzt.
  • - SLEEP: Das Power-Down Status Bit ( ) wird gelöscht, das Time-Out-Status Bit ( ) wird gesetzt, und der Watch Dog Timer (WDT) und sein Prescaler werden gelöscht. Der Prozessor wird hierbei in den SLEEP-Modus versetzt, wobei der Oszillator gestoppt ist.
  • - SUBLW (Subtract W from literal): Die Inhalte des W-Registers werden von den 8-Bit- Literal "k" subtrahiert. Das Ergebnis wird in dem W-Register abgelegt.
  • - SUBWF (Subtract W from f): Subtrahiere (Zweier-Komplementverfahren) das W- Register von der Datenspeicherstelle "f". Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f' rückgespeichert.
  • - SUBWFB (Subtract W from f with Borrow): Subtrahiere (Zweier-Komplementverfahren) das W-Register und das Carry-Flag (Übertrag) von der Datenspeicherstelle "f". Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" gleich "1" ist, wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • - SWAPF (Swap f): Die oberen und die unteren Nibbles der Datenspeicherstelle "f" werden ausgetauscht. Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register abgelegt. Falls "d" gleich "1" ist, wird das Ergebnis an der Datenspeicherstelle "f" abgelegt.
  • - TABLRD (Table Read): Ist eine Zweizyklen-Anweisung, und unter gewissen Umständen, kann sie sogar eine Dreizyklen-Anweisung darstellen. Zunächst wird entweder das Low Byte (falls t gleich 0, wobei T das Table Byte Select und T gleich 0 die Ausführung einer Operation an dem Lower Byte darstellt) oder das High Byte (falls T gleich 1, was die Ausführung einer Operation an dem oberen Byte bedeutet) des Table- Latch (TBLAT) in die Registerdatei "f" bewegt. Dann werden die Inhalte der Programmspeicherstelle, auf die der 16-Bit-Table-Pointer (TBLPTR) zeigt, in den 16- Bit-TBLAT geladen.
  • - TABLWT (Table Write): Dies ist eine Zweizyklen-Anweisung; sie kann jedoch auch hinsichtlich ihre Länge viele Zyklen umfassen, falls auf dem chipintegrierten EPROM- Programmspeicher 17 zugegriffen wird. Zunächst werden die Inhalte des Dateiregisters "f" in das Low Byte (falls t gelich 0) oder High Byte (falls t gleich 1) des TBLAT geladen. Falls der TABLPTR auf eine externe Programmspeicherstelle weist, wird der Inhalt des TBLAT an jene Stelle geschrieben, und die Anweisung dauert zwei Zyklen. Falls TBLPTR auf eine interne EPROM-Stelle weist, die Global Write Protection Fuse (FGLWP) jedoch gesetzt ist, findet kein Schreibvorgang statt, und die Anweisung wird in zwei Zyklen ausgeführt. Falls TBLPTR auf eine interne EPROM-Stelle zeigt und der Schutz nicht gesetzt ist, wird eine EPROM-Schreib-(Programm)-Sequenz initiiert, die beendet wird, wenn ein Interrupt empfangen wird. Wenn das GLINTD-Bit gesetzt ist, wird der Interrupt den TABLWT vervollständigen, jedoch keine Interrupt-Sequenz wird eingeleitet werden. Falls GLINTD gleich 0 ist, dann wird der Interrupt, der dem TABLWT folgt, eingeleitet. Falls FGLWP programmiert ist, werden alle TABLWT- Anweisungen zwei Zyklen lang sein, unabhängig von den Betriebsmodi oder Adressen.
  • - TLRD (Table Latch Read): Lies Daten von dem High Byte (t = 1) oder Low Byte (t = 0) des 16-Bit-TBLAT in das Dateiregister "f". Der TBLAT bleibt unverändert. Diese Anweisung wird in Verbindung mit TABLRD gebraucht, um Daten vom Programmspeicher in den Datenspeicher zu übertragen.
  • - TLWT (Table Latch Write): Daten aus dem Dateiregister "f" werden in das Low Byte (t = 0) oder das High Byte (t = 1) des 16-Bit-TBLAT geschrieben. Diese Anweisung wird in Verbindung mit TABLWT gebraucht, um Daten von dem Datenspeicher in den Programmspeicher zu übertragen.
  • - TSTFSZ (Test f, skip if 0): Falls die Inhalte der Datenspeicherstelle "f" gleich 0 sind, wird die nächste Anweisung, die während der Ausführung der gegenwärtigen Anweisung abgerufen wird, übersprungen (ausgesondert) und ein NOP wird anstattdessen ausgeführt, wodurch dies zu einer Zweizyklen-Anweisung wird.
  • - XORLW (Exclusive OR literal with W): Die Inhalte des W-Registers werden XOR- verknüpft mit dem 8-Bit-Literal "k". Das Ergebnis wird in dem W-Register abgelegt.
  • - XORWF (Exclusive OR W with F): Exklusive OR-Verknüpfung innerhalb des Inhalts des W-Registers mit der Datenspeicherstelle "f". Falls "d" gleich "0" ist, wird das Ergebnis in dem W-Register gespeichert. Falls "d" gleich "1", wird das Ergebnis in der Datenspeicherstelle "f" gespeichert.
  • Von den oben aufgeführten Anweisungen sind die folgenden Datenbewegungsanweisungen: MOVFP, MOVLB, MOVPF, MOVWF, TABLRD, TABLWT, TLRD und TLWT; die folgenden sind arithmetische und logische Anweisungen: 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 sind Programmsteueranweisungen: CALL, CPFSEQ, CPFSGT, CPFSLT, DECFSZ, DCFSNZ, GOTO, INCFSZ, INFSNZ, LCALL, RETFIE, RETLW, RETURN, und TSTFSZ; die folgenden sind Bit-Behandlungsanweisungen: BCF, BSF, BTFSC, BTFSS, und BTG; und die folgenden sind spezielle Steueranweisungen: CLRWDT, NOP, und SLEEP.
  • Der Teil des Mikrokontrollers, der die zentrale Verarbeitungseinheit darstellt, umfaßt eine Anzahl von wesentlichen Hardware-Elementen. Die indirekten Adressierungsregister bestehen aus zwei Registerstellen, die nicht physisch implementiert sind, sondern nur gebraucht werden, um die indirekte Adressierung eines Datenspeicherraums 34 zu implementieren. Zwei Dateiselektregister 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 die Anweisungen TABLWT und TABLRD angewiesen, Daten zwischen dem Programmspeicher 17 und dem Datenspeicherraum zu übertragen. Der Tabellenzeiger dient als 16-Bit-Adresse des Datenwortes innerhalb des Programmspeichers. Der Table-Latch (TBLAT) ist ein 16-Bit- Latch, der aus einem TBLATH und TBLATL besteht, dem High- und dem Low-Byte des Latches. Der TBLAT wird als vorübergehender Halte-Latch während der Datenübertragung zwischen dem Programm und dem Datenspeicher gebraucht; und wird nicht in einen der beiden Speicher abgebildet.
  • Des weiteren ist Teil der Mikrokontroller-CPU-Hardware das Programmzähler-(PC)- Modul 30. Der PC selbst ist ein 16-Bit-Register mit einem PCL (Low Byte) 51, das in dem Datenspeicher abgebildet ist und lesbar und beschreibbar wie jedes andere Register auch ist, und mit einem großen PCH (High Byte) 52, welches sowohl in dem Daten- als auch dem Programmspeicher nicht abgebildet ist, und daher nicht direkt adressierbar ist. Der PCLATH (PC High Latch) 54 ist ein 8-Bit-Register, das in den Datenspeicher abgebildet ist, der als Halte-Latch für das High Byte des PCs dient und durch den der PCH gelesen oder beschrieben werden kann. Der PC wird nach jedem Anweisungsabruf während der Phase Q1 inkrementiert, außer er wird durch GOTO-, CALL-, LCALL-, RETURN-, RETLW- oder RETFIE- Anweisungen oder durch eine Interrupt Response oder durch eine Anweisung eines Destination Write an ein PCL modifiziert. "Skips" (Überspringungen) sind einer zweifachen Inkrementierung des PC äquivalent.
  • Die CPU-Hardware umfaßt ebenso einen Stack 37, der als 16-WortX 16-Bit organisiert ist, der nicht Teil von entweder dem Daten- oder dem Programmspeicherraum ist. Der PC wird auf den Stack gepusht, falls CALL- oder LCALL-Anweisungen ausgeführt werden, oder falls ein Interrupt eine Verzweigung zu einem entsprechenden Interruptvektor erzeugt. Der Stack wird in den PC gepoppt, falls eine RETURN-, RETLW- oder RETFIE-Anweisung ausgeführt wird. Der TOS (Top of the Stack) ist auf andere Art nicht adressierbar. Ein Read-Only-Status-Bit wird gebraucht, um einen Stack-Overflow Fehler anzuzeigen.
  • Eine Interrupt-Logik wird in der Form von Interrupt-Sources vorgesehen, die in die Interrupt- Vektoren abgebildet werden. Wenn ein Interrupt auftritt, wird der aktuelle PC-Wert auf den Stack gepusht, und der Vektor, der der Interrupt-Source entspricht, wird in den PC geladen. Die Peripheriegeräte 57 benutzen alle denselben Interrupt-Vektor, und wenn mehrere Peripheriesources freigegeben sind, werden die Prioritäten durch Software bestimmt. Die externen Interrupts INT und RT 58 und 59 können positiv oder negativ flankengetriggert sein, was auch durch Software auswählbar ist.
  • Eine arithmetische und logische Einheit (ALU) 62 der Mikrokontroller-CPU führt arithmetische und logische Operationen in einem einzelnen Operanden oder in zwei Operanden aus. Alle Einzeloperandenanweisungen wirken entweder auf das W-Register 47 oder ein Datei-Register. Zweioperandenanweisungen haben das W-Register als einem Operand und das andere als entweder ein File-Register oder ein 8-Bit-Immediate-Konstante.
  • Eine prinzipielle Unterscheidung zwischen Mikrokontrollern im allgemeinen und anderen Prozessoren ist die Verfügbarkeit spezieller Schaltungen bei ersteren, um den Bedürfnissen von Echtzeitanwendungen zu genügen. Eines von diesen Merkmalen des Mikrokontrollers 10, das die Systemverläßlichkeit maximieren, kostenintensive externe Komponenten eliminieren, energiesparende Betriebsmodi bereitstellen und einen Code-Schutz anbieten soll, ist das Power-On-Detection-Schema der vorliegenden Erfindung. Eine Dual-Timer-Anordnung wird gebraucht, um genügend Zeit für die Energieversorgung zur Verfügung zu stellen, und zu ermöglichen, daß der Takt stabilisiert wird, bevor der Mikrokontroller den Reset-Zustand verlassen darf, wodurch sichergestellt ist, daß (i) der Energiepegel in einem passenden Betriebsbereich ist und (ii) der Takt für eine passende Ausführung durch den Mikrokontroller stabil ist.
  • Wie in Fig. 8 gezeigt ist, wird ein chipintegrierter Watch-Dog-Timer (WDT) 65 in Modul 15 (Fig. 1) gebraucht, um zu ermöglichen, daß der Mikrokontroller eine Software-Fehlfunktion überlebt. Der WDT 65 selbst ist ein asynchroner 8-Bit-Ripple-Zähler mit einem 8-Bit- Prescaler, der ebenfalls ein asynchroner Ripple-Zähler ist, und der zur Steigerung der Verläßlichkeit seinen eigenen internen RC-Oszillator betreibt. Der WDT ist nicht lesbar oder beschreibbar, und ist nicht in den Daten- oder Programmspeicherraum abgebildet. Ein Paar von EPROM-Sicherungen, FWDT1 und FWDT0 (Konfigurierungs-Bits) ist an adressierbaren Stellen im EPROM-Speicher 17 abgebildet, um bis zu vier Betriebsoptionen (Modi) für den WDT bereitzustellen, die dessen Periode (Frequenz) oder (als einfacher Timer) dessen Anweisungszyklenzeit betreffen. Die EPROM-Sicherungen werden weiter unten diskutiert. Vorzugsweise kann der WDT nur durch die EPROM-Sicherungen geschlossen werden. Der WDT und sein Prescaler werden zurückgesetzt, und das Time-Out-Bit ( ) wird auf 1 gesetzt, falls eine CLRWDT-Anweisung ausgeführt wird, oder eine SLEEP-Anweisung wird ausgeführt, oder ein Power-On-Reset tritt auf. Normalerweise ist das User-Programm ausgelegt, um den WDT-Timer auf einem regulären Intervall zu löschen, tut er dies jedoch nicht, wird der WDT überfließen und den Mikrokontrollerschritt zurücksetzen. Falls jedoch die Sicherungen ausgelegt sind, um den WDT als einfachen Timer zu konfigurieren, inkrementiert der WDT auf dem internen OSC/4-Takt mit einem Prescaler von 256 (das heißt, er inkrementiert bei einer OSC-Frequenz/1024-Rate), und das -Bit wird bei einem Overflow gelöscht, wobei der Chip nicht zurückgesetzt wird. In dieser Betriebsart wird der WDT während des SLEEP gestoppt.
  • Entsprechend einem Aspekt der Erfindung stellen zwei Timer-Schaltungen die gewünschten Verzögerungen beim Einschalten des Mikrokontrollers bereit. Eine von diesen ist ein Oszillator-Einschalt-Timer (OST) 76 (Fig. 8), der den Mikrokontroller in einem Reset- Zustand hält, bis der Kristalloszillator des Taktgenerators (im Modul 15, Fig. 1) für den Mikrokontroller stabil ist. Der andere von diesen zwei Timern ist ein Power-Up-Timer (PWRT) 69, der eine feste Verzögerung - beispielsweise 80 Millisekunden (Ms) nominal - nur beim Einschalten zur Verfügung stellt, um den Mikrokontroller in dem Reset-Zustand zu halten, bis die Energieversorgung stabil wird. Der WDT 65 und sein Prescaler sind physisch das gleiche wie der PWRT 69, sie unterscheiden sich nur in den Rollen, die sie spielen, und in der Outside-Reset-Bedienung. Da die OST- und PWRT-Timer 67 und 69 chipintegriert sind, sind externe Reset-Schaltungen normalerweise nicht erforderlich.
  • Ein Reset der gesamten Mikrokontroller-Beschaltung wird auf folgende Art vollzogen. Der Oszillatorpuffer wird aktiviert, so daß der Oszillator erneut gestartet wird, wenn er aus dem SLEEP durch Reset erwacht. Der SLEEP-Betriebszustand des Gerätes, der nachstehend noch eingehender beschrieben wird, ist ein Power-Down-Modus sehr geringen Stromes, der den Energieverbrauch des Gerätes während inaktiver Perioden bei einer speziellen Anwendung bedeutend verringert. Das Aufwachen aus dem SLEEP wird durch einen externen Reset oder durch einen Time-Out des Watchdog-Timers oder durch einen Interrupt bewirkt. Weitermachend mit der Reset-Sequenz, wird der PC auf seine niedrigste Adresse zurückgesetzt, und alle Register werden zurückgesetzt. Der WDT und sein Prescaler werden gelöscht. Der interne Taktgenerator wird in dem Q1-Zustand gehalten, und, falls die externe Ausführung ausgewählt ist, wird der ALE-Output low gehalten, während die - und - Outputs high betrieben werden (an Port E, Fig. 1). Schließlich werden die I/O-Ports B, C und D als Inputs konfiguriert.
  • Der Reset wird durch das Auftreten eines von drei Vorkommnissen bewirken. Ein Power-on- Reset wird bei der Detektion eines VDD-Anstiegs (beispielsweise im Bereich von 1,2 V bis 2,0 V) stattfinden. Ein anderes mögliches Ereignis ist ein externer Reset, der mit einem "low"-Pegel an dem -Input (70, Fig. 1), auftritt. Das dritte Ereignis ist ein WDT-Reset, der auftritt, wenn der Watchdog-Timer einen Time-Out vollzieht. Diese drei Ereignisse werden in der oberen Hälfte der Fig. 8 dargestellt, und führen jeweilige Inputs dem ODER- Gatter 71 zu. Sobald das Gerät in den Reset-Zustand gebracht ist, wird dieser Zustand so lange beibehalten, bis entweder (i) der -Input 70 gleich "low" ist, oder (ii) der - Input "high" wird, der PWRT 69 jedoch aktiv (d. h. es wurde kein Time-Out vollzogen) ist, oder (iii) der Ost 67 aktiv ist (d. h., es wurde kein Time-Out vollzogen).
  • Die erste von den letzteren drei Bedingungen ist ein durchgeführter externer Reset, und die zweite und dritte sind Resets, die durchgeführt werden, wenn entweder der PWRT-Timer oder der OST-Timer aktiv sind. Folglich beginnt bei Abwesenheit eines durchgeführten externen Resets, das Gerät eine Ausführung, solange es nicht davon abgehalten wird, indem es in dem Reset gehalten wird, weil jeder der beiden Timer noch keinen Time-Out vollzogen hat. Die Time-Out-Perioden für die zwei Timer werden erfindungsgemäß ausreichend lang ausgewählt, damit sich die dem Gerät zugeführte Energie und die Taktfrequenz stabilisieren können, jedoch nicht so, daß die Ausführung von Anweisungen oder Programmen durch den Prozessor ungebührlich verzögert werden würde.
  • Wie weiter in Fig. 8 und auch den Start-Up-Timer-Diagramm von Fig. 9 zu entnehmen ist, implementiert der OST-Timer 67 eine 1024-Oszillator-Periodenverzögerung, die durch einen 10-Bit-Ripple-Zähler bereitgestellt wird, und zwar sowohl beim Einschalten als auch beim Aufwachen aus dem SLEEP. Beim Einschalten beginnt die Verzögerung mit der steigenden Flanke von , wohingegen beim Aufwachen aus SLEEP der Time-Out ab dem Auftreten des Aufweckereignisses gezählt wird. Der OST-Timer beginnt das Oszillatorsignal am OSC1- Pin 12 zu zählen, wenn die Amplitude an jenem Pin eine vorbestimmte akzeptierbare Grenze erreicht. Dies wird mittels eines Aktivierungsinputs an Gate 72 bei der Detektierung der steigenden Flanke von MCLR oder des Aufwachens aus SLEEP ermöglicht, vorausgesetzt, daß der Oszillator entweder im XT- oder im LF-Betriebsmodus ist, der einen Kristalloszillator oder Resonator benutzt. Der Time-Out ermöglicht es, daß der Kristalloszillator (oder Resonator) sich stabilisiert, bevor der Mikrokontroller aus dem Reset-Zustand geholt wird. Die Schaltung funktioniert mit Kristallen beliebiger Frequenz. Man beachte, daß dieser Time- Out in den EC- oder RC-Oszillatormoden nicht vollzogen wird, weil kein Kristall oder ein anderer eine Stabilisierung benötigender Oszillationsmodus nach dem Einschalten benutzt wird.
  • Der PWRT-Timer 69 implementiert nur beim Einschalten eine feste Verzögerung. Die Verzögerung wird durch einen 10-Bit-Ripple-Zähler mit einem Input-Takt aus einem chipintegrierten RC-Oszillator 74 bereitgestellt. Dieser Time-Out wird ab der steigenden Flanke des gezählt, um der VDD-Versorgung zu ermöglichen, ein akzeptables Niveau zu erreichen, bevor das Gerät aus dem Reset-Zustand geholt wird, was in Fig. 9 gezeigt ist. Ein interner Power-On-Reset-Puls (POR, in der oberen Hälfte der Fig. 8) wird erzeugt, wenn ein VDD-Anstieg während des anfänglichen Einschaltens des Chips (beispielsweise nominell 1,2 V bis 2,0 V) detektiert wird. Das POR-Signal setzt interne Register zurück und aktiviert des weiteren PWRT 69, damit dieser seine Verzögerung durch einen Input an Gate 75 beginnt. Ein derartiger Betrieb des PWRT-Timers tritt nur beim Einschalten des Gerätes auf, weil ein Aufwachen aus SLEEP normalerweise stattfindet, ohne daß dies Auswirkungen auf die VDD-Energieversorgung hätte.
  • Die PWRT- und OST-Timer stellen ein angemessenes Power-On-Reset ohne externe (d. h. nicht chipintegrierte) Komponenten sicher, indem sie den -Pin 70 praktisch an VDD anschließen. Wenn VDD hochfährt, wird POR erzeugt, und wird als 1 innerhalb des Chips detektiert, und sowohl OST als auch PWRT beginnen mit dem Time-Out. Falls die Anstriegszeit von VDD so langsam ist, daß am Ende des PWRT-Time-Outs VDD kein akzeptierbares Niveau erreicht hat, muß an dem -Pin ein externer RC-Delay hinzugefügt werden.
  • Das duale Timer-Schema stellt sicher, daß die dem Gerät zugeführte Energie sich in einem angemessenen Betriebsbereich befindet, und daß der Takt stabil ist, bevor das Gerät in der Lage ist, ein Programm auszuführen.
  • Das Gerät 10 kann in den energiesparenden SLEEP-Modus (oder Power-Down) versetzt werden, wann immer ein statischer Zustand angemessen ist, indem alle chipintegrierten Taktgeber gestoppt sind. In diesen Modus wird eingetreten bei Ausführung einer SLEEP- Anweisung, die den Oszillator herunterfährt, das -Bit setzt und das -Bit, den WDT- Timer und dessen Prescaler löscht. In dem XT- oder LF-Modus des Oszillators sind sowohl OSC1- und OSC2-Pins in den Hochimpedanzzustand gesetzt. In dem EC- oder RC-Modus ist der OSC1-Pin in einen Hochimpedanzzustand gesetzt, während der OSC2-Pin niedrig betrieben wird. Entsprechend werden der internen Logik keine Takte vorgegeben, auch dann nicht, wenn ein externer Takt an dem OSC1-Pin anliegt. Der Chip verbleibt dann in einem vollkommen statischen Zustand, mit einigen nachstehend aufgeführten Ausnahmen:
  • (1) Falls der WDT aktiviert ist, läuft er weiter und weckt daher den Chip bei einem Time- Out auf.
  • (2) Signalflanken an dem RT-Pin (Port A, Fig. 1) inkrementieren den RTCC-(Realtime Clock/Counter)-Modulprescaler 77 (einen asynchronen Ripple-Zähler), falls eine externe Taktquelle für den RTCC ausgewählt ist. Ohne einen externen Takt inkrementiert der RTCC nicht.
  • (3) Jedes externe Interrupt-Ereignis weckt das Gerät auf, falls das entsprechende Interrupt-Maskenbild aktiviert war, als der SLEEP-Modus begann. Falls das GLINTD- (Global Interrupt Disable)-Bit gleich "0" (ausgeschaltet) ist, springt das Gerät beim Aufwachen zu dem korrespondierenden Interrupt-Vektor, wohingegen es ansonsten aufwacht und die Ausführung von Anweisungen oder eines Programms wiederaufnimmt, ohne auf den Interrupt zu antworten (d. h., nicht zu dem Interrupt- Vektor verzweigt).
  • (4) Jedes periphere Element, das unabhängig von dem internen Takt arbeitet, kann seinen Zustand wegen externer Vorkommnisse ändern. Beispielsweise verschiebt das serielle Portaufnahme-Schieberegister Daten im synchronen Slave-(External Clock)-Modus.
  • Zusätzlich zu dem chipintegrierten Oszillator wird jede stromziehende Schaltung in dem SLEEP-Modus abgeschaltet, einschließlich des gesamten EPROM-Programmspeichers und der EPROM-Sicherungen. Die einzigen aktiv bleibenden Sicherungen sind die WDT- Sicherungen (FWDT0 und FWDT1). Das Gerät kann aus dem SLEEP-Modus nur durch eines der folgenden Vorkommnisse aufgeweckt werden:
  • (1) dem Einbringen eines Power-On-Reset durch ein Zurückfahren von VDD auf Null und ein Wiederhochfahren auf Betriebsniveau.
  • (2) dem Zuführen eines "low"-Niveaus an den -Pin.
  • (3) ein WDT-Time-Out, wobei WDT aktiviert ist.
  • (4) verschiedene Interrupts.
  • Entsprechend einem weiteren Aspekt der Erfindung kann der Code oder das Programm, das in dem Programmspeicher-EPROM enthalten ist, geschützt (sicher gemacht) vor Raubkopien oder unberechtigter Veränderung werden, wenn das Gerät in dem codegeschützten Mikrokontroller-Modus ist, indem ausgewählte Konfigurierungssicherungen gesprengt werden. Insbesondere wird der sichere Mikrokontroller-Modus durch das Sprengen eines Paares von mit FPMM1 und FPMM0 bezeichneten Konfigurierungssicherungen von dem "1"-Zustand zu dem "0"-Zustand erreicht. Diese und andere Konfigurierungssicherungen des Mikrokontrollers sind EPROM-Bits, die, wenn sie mit Read "0" programmiert sind, den Zustand des "Gesprengtwerdens" darstellen, oder offen, wenn sie unprogrammiert auf Read "1" gelassen werden, wo sie den "gelöschten" oder geschlossenen Zustand darstellen.
  • In dem Mikrokontroller der vorliegenden Erfindung ermöglichen Konfigurierungssicherungen, daß ein Benutzer zwischen Optionen wie beispielsweise den Betriebsmodi durch bloßes Auswählen des passenden Zustandes auswählen kann. Diese Sicherungen sind in dem chipintegrierten Programmspeicher 17 (Fig. 1) abgebildet, um das Programmieren zu vereinfachen, wodurch es auch möglich wird, den Wert (Zustand) jeder Sicherung zu lesen. Diese Sicherungsstellen sind jedoch nur in den Mikrokontroller- und geschützten Mikrokontroller-Modi zugänglich, um gelesen oder beschrieben zu werden. In den Mikroprozessor- und erweiternden Mikrokontroller-Modi ist dieser Abschnitt des Programmspeichers extern (wie in Fig. 5 gezeigt) abgebildet, wodurch die Sicherungsstellen unzugänglich werden. Jeder Sicherung wird eine Programmspeicher-Adreßstelle zugeordnet. Um eine Sicherung zu "sprengen" (programmieren), wird die Adresse jener Sicherung unter Verwendung einer TABLWT-Anweisung beschrieben. Für Konfigurierungssicherungen, die in dem Mikrokontroller der Erfindung zur Anwendung kommen, sind die Sicherungen (EPROM-Bits) angeordnet, ohne Rücksicht auf die Daten, die in die Sicherungsadreßstelle geschrieben sind, gesprengt zu werden. Das heißt, die Daten sind immateriell - die bloße Handlung des Schreibens in eine unprogrammierte EPROM-Socherung ist per se ausreichend, um die Sicherung zu sprengen.
  • Nachdem das geeignete Paar von EPROM-Sicherungen gesprengt ist, um den sicheren Mikrokontroller-Modus auszuwählen, liest eine TBLRD-(Read)-Anweisung, die durch den nicht chipintegrierten EPROM (oder irgendwo außerhalb des gesicherten Bereiches des geschützten Programm-EPROMS), der den chipintegrierten Programm-EPROM zu lesen versucht, ausgeführt wird, nur verschlüsselte (durcheinandergewürfelte = scrambled) Daten. Wird jedoch die Anweisung aus einer Adresse weniger als 2K (d. h., von einem chipintegrierten Programm-EPROM) ausgeführt, erscheinen die gelesenen Daten unverschlüsselt. Um einen unbefugten Zutritt zu dem sicheren Bereich zudem zu verhindern, wird jede beliebige TABLWT-(Write)-Anweisung, die von dem nicht chipintegrierten EPROM oder einer anderen Stelle außerhalb des geschützten Bereichs ausgeführt wird und die dem eingebettetem Programm-EPROM zu beschreiben versucht, davon abgehalten, die Zieladresse zu programmieren. Es bleibt notwendig, die Anweisung durch einen Interrupt- Zustand zu beenden, und die Table-Latches werden weiter beschrieben. Wie in dem analogen Readout-Anweisungsfall, wird jedoch eine TABLWT-Anweisung, die von einer Adresse weniger als 2K ausgeführt wird, wirksam, um die adressierte chipintegrierte Programm- EPROM-Stelle trotz des codegeschützten Zustandes jenes Speichers zu programmieren wegen der Natur des gesicherten Mikrokontroller-Moduses, indem eine derartige Anweisung von einer befugten Stelle aus ausgeführt würde.
  • Diese Maßnahmen sind wirksam, um das Lesen, Prüfen oder Programmieren einer beliebigen chipintegrierten Programmspeicher-EPROM-Stelle, die geschützt werden soll, von außerhalb des geschützten Bereiches zu verhindern.
  • Der Mikrokontroller der Erfindung weist insgesamt acht Konfigurierungssicherungen auf, einschließlich der FPMM0- und FBMM1-Sicherungen, die oben für die Auswahl des gesamten Betriebsmoduses geschrieben wurden. Beispielshalber wird der sicherere Mikrokontroller-Modus durch die Programmierung sowohl des Letzteren (d. h. beide werden zu dem "0"-Zustand "gesprengt"); ein weiterer Mikrokontroller-Modus wird durch das umgekehrte des Letzteren ausgewählt; und ein Mikrokontroller-Modus wird ausgewählt, indem man beide Sicherungen unprogrammiert läßt. Die anderen sechs EPROM- Konfigurierungssicherungen beinhalten ein Paar von Sicherungen, das mit FOSC0 und FOSC1 bezeichnet ist, das programmiert werden kann oder unprogrammiert gelassen werden kann, in jeder beliebigen der vier verschiedenen Kombinationen zur Auswahl der entsprechenden gewünschten der vier verschiedenen Oszillator-Moden EC, RC, XT und LF, die bereits diskutiert wurden; ein Paar von mit FWDT0 und FWDT1 bezeichneten Sicherungen, die ähnlich programmiert oder nicht programmiert in einer beliebigen der vier verschiedenen Kombinationen zur Auswahl der entsprechenden gewünschten der vier verschiedenen Watchdog-Timer-(WDT)-Betriebsoptionen oder Modi, wie oben diskutiert; eine Globalschreibschutz-Sicherung FGLWP, die programmiert werden kann, um eine Programmierung insgesamt zu verhindern (d. h., ein Sprengen dieser Sicherung würde Beschreibungen des chipintegrierten Progamm-EPROMS, des nicht chipintegrierten EPROMS und aller Konfigurierungssicherungen verhindern); und schließlich eine Schreibschutz-Sicherung FOPTWP, um die Veränderung von irgendeiner der Konfigurierungssicherungen zu verhindern. Die TABLWT-Anweisung ist implementiert, um immer einen "Short Write" (beispielsweise nur zwei Zyklen) auszuführen, wenn der Globalschreibschutz aktiviert ist.
  • Ein Feld von High-Speed-Peripheriegeräten ist auf dem Chip 10 integriert zu Zwecken einer Echtzeit-Berechnung berechnungsintensiver Anwendungen. Um die CPU-Aufgaben soweit wie möglich zu entlasten, sind die Peripheriegeräte 57 (Fig. 1) hochintelligent und besitzen ihre eigenen Interrupts und Fehlerbehandlungen. Das Modul 80 beinhaltet drei 16-Bit- Timer/Zähler (TMR1, TMR2 und TMR 3), von denen einer in zwei 8-Bits-Timer aufgeteilt werden kann; zwei High-Speed-Captures als effiziente Schnittstelle mit Shaft-Codierern und anderen High-Speed-Puls-Leistungsquellen; und zwei Breitenmodulations-Outputs (PWM) für High-Speed-Pulse mit bis zu 10 Bit Auflösung, um eine Motorsteuerung direkt oder durch Gleichstromsteuerspannungen zu ermöglichen. Zusätzlich sind unter den Peripheriegeräten bis zu vier externe und einige interne Interrupt-Quellen, sowie zahlreiche I/O-Pins, von denen die meisten als Inputs oder Outputs durch Software konfigurierbar sind.
  • Alle peripheren Register sind in den Datenspeicherraum 34 abgebildet, wobei ein Banking- Schema benutzt wird, bei dem ein Abschnitt des Datenspeichers mit einer begrenzten Anzahl von ausgewählten Adressen gebankt wird. Dies erlaubt die Unterbringung einer großen Anzahl von Registern ohne einer Vergeudung der Kapazität des Allzweckdaten-RAM. Ein Bankauswahlregister (BSR) 82 wählt die gegenwärtig aktive "periphere Bank" aus. Obwohl periphere Register verwandter Funktionalität in einer Bank gruppiert sein können, ist es typischerweise notwendig, von Bank zu Bank zu schalten, um alle peripheren Geräte, die mit einer einzelnen Aufgabe verbunden sind, zu adressieren, was genau den Zweck der MOVLB- Anweisung (move literal value to BSR) entspricht.
  • Das Gerät 10 weist fünf digitale I/O-Ports auf, die mit A, B, C, D, und E (Fig. 1) bezeichnet sind und die zusammen 33 Port-Pins aufweisen von denen die meisten ein assoziiertes Datendirektions-Register-Bit (DDR) aufweisen, um den assoziierten Port-Pin als Input (DDR- Bit = 1) oder als Output (DDR-Bit = 0) zu konfigurieren. Die meisten der Port-Pins sind mit dem System-Bus oder peripheren Funktionen multiplexiert. Die Ports C, D und E beispielsweise multiplexen mit den letzteren (AD< 15 : 0> , ALE, und ). Alle fünf dieser Ports und ihre assoziierten DDR-Register sind in den Datenspeicher 34 abgebildet. Steuerbits in den entsprechenden peripheren Registern konfigurieren die Pins als entweder Port-Pins oder als periphere Inputs/Outputs, und wenn ein Port-Pin für eine alternative Funktion ausgewählt ist, wird seine Zieladresse durch die periphere Logik bestimmt, die das DDR-Bit in den gewünschten Zustand zwingt.
  • Der Port A ist ein 6-Bit-Port in einer der gebankten Adressen, weist kein mit ihm assoziiertes Datendirektions-Register auf und ist mit peripheren Funktionen multiplexiert, einschließlich der externen Interrupt-Inputs an den Pins RA0/INT und RA1/RT. Der Port B ist ein 8 Bit breiter bidirektionaler Port, der ebenfalls in einer der Banks im Datenspeicher 34 abgebildet ist. Ein Schreiben in seine abgebildete Adresse schreibt in den Port-Latch und ein Lesen der Adresse liest die Port-Pins. Die meisten der Pins sind mit peripheren Funktionen, wie beispielsweise Capture, PWM und externem Takt multiplexiert. Der Port B ist implementiert, um ein "interrupt on change" dadurch bereitzustellen, daß ein Interrupt erzeugt wird, wenn der Port-Input (unter Verwendung seines Output-Daten-Latches als Vergleichs-Latch um eine Erzeugung eines hohen Inputs bei einer Fehlanpassung zwischen dem Pin und dem Latch zu veranlassen) sich ändert, und der Interrupt kann den Chip 10 aus dem SLEEP-Modus aufwecken.
  • Die Ports C, D und E sind in eine weitere Bank des Datenspeichers abgebildet. Die Ports C und D sind 8 Bit breite bidirektionale Ports, während der Port E ein 3 Bit breiter bidirektionaler Port ist.
  • Der serielle Port 83 ist dafür gedacht, um entweder in einem asynchronen Vollduplex-Modus oder in einem getakteten synchronen Halbduplex-Modus zu arbeiten, um einen universellen Synchron-Asynchron-Empfänger-Sender (USART) bereitzustellen. In den asynchronen Modus wird der Takt intern hergeleitet, während in dem synchronen Modus der Takt entweder intern oder extern sein kann. Ein eingebauter 8-Bit-Baudraten-Generator (BRG) ist vorzugsweise für die interne Takterzeugung in dieser Anwendung eingesetzt. Der BGR ist in einem gebankten Raum im Datenspeicher 34 mit einem Register, das lesbar und beschreibbar ist, abgebildet.
  • Das RTCC-Modul 77 ist einer von mehreren Timer-Timern in dem Mikrokontroller, einschließend TMR 1, TMR2 und TRM3 des Moduls 80. Der RTCC beinhaltet vorzugsweise eine 16-Bit-Timer/Zähler, High- und Low-Bites, einen 8-Bit-Prescaler und eine Quelle für ein externes Taktsignal an den RT-Pin. Die 8-Bit-Timer/Timer TRM1 und TRM2 werden als Zeitbasen für die PWM-Outputs des Moduls 80 gebraucht, und der 16-Bit-Timer T3 ist für eine Capture-Funktion eingesetzt.
  • Entsprechend einem Aspekt der Erfindung ist eine vereinfachte Autoprogrammierung durch die Verwendung eines Schemas bereitgestellt, in dem eine Anweisung gebraucht wird, um den Programmspeicher des Mikrokontrollers zu programmieren, der mit einem autoinkremendierenden Pointer und einem chipintegrierten ROM zur Speicherung des Programmes ausgestattet ist. Der Mikrokontroller wird unter Verwendung der TABLWT- Anweisung programmiert, wobei der Table-Pointer zu der internen EPROM-Stelle des Programmspeichers 17 weist. Folglich kann ein Benutzer eine EPROM-Stelle programmieren, während Code, sogar aus dem internen EPROM, ausgeführt wird. Zwei "Programmier- und Verifizier"-Routinen sind an Adreßstellen in dem Programmspeicher bereitgestellt. Eines der zwei Programme ist eine "universelle Programmier-/Verifizier"- Routine, die die flexiblere der beiden darstellt und es dem Nutzer ermöglicht, jede beliebige Adresse zu laden, eine Stelle zu programmieren, eine Stelle zu verifizieren oder zu der nächsten Stelle zu inkrementieren, und zwar mit variierender Programmierpulsbreite. Das andere Programm ist eine "Auto-Programmier-/Verifizier"-Routine, ein einfaches, aber striktes Programmierverfahren, in dem der Mikrokontroller 2K-Stellen sequenziell von zwei externen 2K · 8-EPROMS liest und seinen eigenen internen Speicher programmiert. Sie sind in dem chipintegrierten Programmspeicherraum abgebildet, aber, um sie unlöschbar zu machen, sind die beiden Programme im ROM eher als im EPROM.
  • Um eine dieser beiden Programmier-Routinen auszuführen, wird der Prüf-Pin 85 (Fig. 1) nach dem Einschalten high gehalten, während der MCLR-Pin 70 low gehalten wird, und dann wird der -Pin von 0 auf 1 (VCC oder VPP) angehoben. Die Programmausführung beginnt in den PC (Programm-Zähler) 30, worauf der Reset folgt, und das Programm zieht den Port B sofort, um eine Verzweigungsadresse zu bestimmen. Das Programm kann eine "universelle Progammier-/Verifizier"-Routine oder eine "Auto-Programmier-/Verifizier"-Rountines sein. Wenn der Prüf-Pin 85 high ist, sind der Power-On-Reset und die Oszillator-Einschalt-Timer (PWRT und OST, Fig. 8) deaktiviert. Der universelle Progammier-/Verifizier-Modus wird für die gesamte Merkmalspalette anwendende Benutzer verwendet, ist jedoch von keinem besonderen Interesse mit Blick auf die vorliegende Erfindung oder deren Implementierung und wird daher nicht eingehender beschrieben werden.
  • Der Mikrokontroller 10 verwendet einen intelligenten Quick-Puls-Algorithmus, der sowohl bei VCC (min), wie auch bei VCC (max) eine Programm-Verifizierung durchführt. Die Verifizierung bei VCC (min) garantiert einen guten "erase margin", und die Verifizierung bei VCC (max)garantiert einen guten "program margin". Wie in Fig. 10 gezeigt ist, beginnt der Programmier-Algorithmus mit dem Laden einer neuen Adresse aus dem Speicher, wobei der Pulszähler bei 0 (Block 90) ist, die Adresse wird als Blank (Block 91) verifiziert, und die Blank-Überprüfung (Verifizierung) wird entweder bestanden oder nicht bestanden (Entscheidungsblock 93). Wird sie bestanden, werden neue Daten geladen (94), und dann programmiert unter Verwendung eines 100 Mikrosekunden-Pulses mit einer Inkrementierung des Pulszählers (95). VCC wird dann bei VCC (max) gesetzt und die Stelle für die korrekten Daten wird verifiziert (96). Falls diese Verifizierung bestanden wird (98), wird ein 3X- Pulszähler (dreifach) angewandt, um den Program-Margin (100) zu erhöhen, und VCC wird bei VCC (min) gesetzt, um die Stelle (101) zu verifizieren. Falls die Verifikation bei VCC (min) bestanden wird (102), kehrt der Algorithmus zum Ausgangspunkt zurück, und eine neue Adresse wird geladen (90).
  • Ein Versagen bei jeder beliebiger der oben aufgeführten bestanden/nicht-bestanden- Entscheidungsschritte (91, 102) des Programmier-Algorithmuses ergibt eine passende Fehlermeldung oder passendes Flag und eine Rückkehr an den Ausgangspunkt, außer in dem Fall eines Versagens der Verifizierung bei VCC (max) 98 und einem zusätzlichen Feststellen, daß der Pulszähler nicht größer als 25 ist (103). In diesem Fall kehrt das Programm zu dem Zählerschritt der Pulsinkrementierung zurück (95), und VCC wird bei VCC (max) erneut gesetzt, um die Stelle für die korrekten Daten zu verifizieren (96), gefolgt durch eine bestanden/nicht bestanden-Entscheidung für jene Verifizierung (98).
  • In dem Autoprogrammier-Modus liest der Mikrokontroller von zwei externen 2K · 8- EPROMS und programmiert sich selbst mittels einer Anweisung und eines autoinkrementierenden Zeigers, der von der Anweisung verwendet wird, um den Programmspeichern durch Schrittinkrementierung durch aufeinanderfolgende Adreßstellen zur Speicherung aufeinanderfolgender Programmschritte zu benutzen. Der Mikrokontroller umfaßt einen chipintegrierten hart-kodierten (d. h. masken- oder fabrikprogrammierten) Speicher, wie beispielsweise einen ROM, der die Anweisung für die Auto-Programmierung sowie andere darin zu speichernde Codes enthält. Fig. 1 ist ein vereinfachtes Schaltungsdiagramm für den Auto-Programmierer, und Fig. 12 ist ein Timer-Diagramm, das die Abfolge illustriert, in der VCC, VPP, Test und andere Signale angewandt werden (oder auftreten). Der zu programmierende Mikrokontroller 10 wird in den Auto-Programmierer eingesteckt (operativ schnittstellenartig mit ihm verbunden), der der Gesamtgestaltung von Fig. 11 entspricht. Die zwei externen 2K · 8-EPROMS 110, 111, die mit dem gewünschten Code zu programmieren sind, werden in jeweilige Einführungen des Auto-Programmierers ebenfalls eingeschoben (operativ schnittstellenartig damit verbunden). Das VCC-Einschalten wird aktiviert und man läßt eine Stabilisierung desselben zu, wie in dem VC-Abschnitt des Zeitgabe-Diagramms (Fig. 12) gezeigt ist. Wenn VCC stabil ist, wird in den Auto- Programmier-Modus eingetreten, indem zuerst der Prüf-Pin auf 1 angehoben wird (high, Prüf- Abschnitt des Zeitgabe-Diagramms). Dann wird der VCC/ -Pin auf VPP (z. B. 12,5 bis 13,5 V, nominell 13,0 V, VPP/ -Bereich des Zeitgabe-Diagramms) angehoben, was den Mikrokontroller aus dem Reset bringt, und wodurch die Ausführung der Auto-Programmier- Routine begonnen wird.
  • In der Auto-Programmier-Routine liest der Mikrokontroller die zwei EPROMS, jedes Mal ein Wort, und programmiert die entsprechende Stelle in seinem chipintegrierten 2K · 16 EPROM- Programmspeicher 17 unter Verwendung eines autoinkrementierenden Zeigers an einer Adreßstelle bei Port B (RB< 7 : 0> ), und den Pins RC4-RC7 des Ports C (siehe entsprechende Abschnitte des Timer-Diagramms, Fig. 12). Wenn der gesamte chipintegrierte EPROM erfolgreich programmiert wurde, liest der Mikrokontroller 10 die Schalteranfangswerte 115 (Fig. 11) für die Konfigurierungssicherungsinformation und programmiert seine Sicherungen entsprechend jener Konfigurierung. Eine sichtbare Anzeige ist vorgesehen, so daß der Benutzer auf eine Fehlerabwesenheit oder einen Fehler bei der Programmierung aufmerksam gemacht wird, wofür ein Paar von Licht aussendenden Dioden (LEDs) 117 und 118 an den Pins RC0 und RC1 des Ports C verwendet werden. Die grüne LED 117 und die rote LED 118 sind beide eingeschaltet (erleuchtet), während des Programmierens. Am Ende des Programmierens verbleibt nur eine LED angeschaltet; die Grüne, falls beim Programmieren kein Fehler aufgetreten ist, und die Rote, falls ein Fehler aufgetreten ist.
  • Das vorstehend beschriebene Schema ermöglicht, daß der Mikrokontroller (oder Mikroprocessor) seinen eigenen Programmspeicher auf einfache Weise programmiert, wobei ein Zeiger durch eine Anweisung auf den Programmspeicher weist.
  • Auf alle Prüfmodi des Mikrokontrollers kann über einen Prüf-Pin 85, Port A und Port B zugegriffen werden. Der Prüf-Pin ist ein Schmitt-Trigger-Input, der weder einen Pull-Up noch einen Pull-Down aufweist und der in Anwendungen low gehalten werden muß. VPP muß bei nominellen 12 V gehalten werden, während der TABLWT ausgeführt wird, falls eine Programmierung gewünscht ist. Der Port A wird für spezielle EPROM-Prüf-Modi verwendet, und der Port B wird für eine CPU-Prüfung benutzt.
  • Ein Mikrokontroller, der einen kleinen Pin-Count aufweist, kann unzureichend sein, um 16- Bit-Anweisungen bei voller Geschwindigkeit auszuführen. Der Mikrokontroller der Erfindung weist einen Block mit einem chipintegrierten Programmspeicher 17 auf, der als Prüf-EPROM bezeichnet ist, der für das Prüfen der Fabrik reserviert ist. Der Prüf-EPROM wird vor dem Prüfen mit dem gewünschten Prüfcode programmiert. Der Prüf-EPROM wird mit einer Reihe von kleinen Subroutinen, eine für jede Anweisung in dem Mikrokontroller-Anweisungssatz, und einer Steuerprüf-Routine programmiert, die Port B liest und in PC low setzt. Die CPU ist ausgelegt, daß sie an jenem Punkt zu der Adresse der zu prüfenden Anweisungs-Subroutine springt. Ein PC läßt den PC weiterhin zu dem Prüf-EPROM weisen, und wenn die Prüfung für die spezielle Anweisungs-Subroutine vollständig ist, liest das Steuerprogramm (die Steuer-Routine) erneut den Port B für den nächsten Wert von PC low, so daß letztendlich alle Anweisungen in dem Gerät geprüft werden. Ein Prüfmodus-Register (TSDMD1), wie in Fig. 13 dargestellt, stellt Mittel bereit, um verschiedene Konfigurierungen des Chips 10 ohne Sprengen der EPROM-Sicherungen durchzuführen. Dies ist ein weiterer wichtiger Aspekt der Erfindung, indem die EPROM-Sicherungen durch Prüf-Latches, wie in der Tabelle der Fig. 14 angezeigt, emuliert werden. Die Bedeutung der Bits in dem TSTMD1-Register ist identisch mit dem Code-Schutz und dem Konfigurierungssicherungen, die vorher beschrieben wurden, außer daß ihr Sinn umgekehrt ist, d. h., eine Sicherung = 0, entspricht einem Bit, das auf dieser Stufe = 1 ist. Das TSDMI-Register ist gedacht und angeordnet, daß auf es im Prüfmodus oder im Interrogations-Modus nur zum Lesen/Schreiben zugegriffen werden kann. Ebenfalls steuern die Konfigurierungs-Bits in TSTMDI die Konfigurierung nur, wenn das TSDMUX-Bit (Fig. 14) gleich 0 ist. Falls TSTMUX = 1 ist, wird der Zustand des Mikrokontrollers durch die Sicherungen für diese Bits festgelegt. Die Codeschutz-Bits werden unabhängig von dem TSTMUX-Bit. Falls die Sicherungen für diese Bits gelöscht werden, kann der Prüf-Latch die Sicherungen unabhängig vom Zustand des TSTMUX-Bits überspringen. Falls die Sicherungen gesprengt werden, können sie nicht übersprungen werden.
  • Das Prüfmodus-Register ist in allen Modi lesbar und es spiegelt im Normalmodus den Wert der Sicherungen wieder. TSTMD 1 wird im Reset-Zustand gehalten, falls es nicht im Immulations- oder Prüf-Modi ist, in welchem die externen Programm- und WDT- Sicherungen gesprengt und alle anderen Sicherungen als gelöscht festgelegt sind.
  • Wiewohl gewisse Aspekte der Erfindung in Verbindung mit einer bevorzugten Ausführungsform eines Mikrokontrollers beschrieben wurden, ist aus der vorhergehenden Beschreibung für einen Fachmann augenscheinlich, daß Abwandlungen und Modifikationen der bevorzugten Ausführungsform implementiert werden können, ohne vom Umfang der Erfindung abzuweichen. Es ist deshalb angestrebt, daß die vorliegende Erfindung nur in dem Maße beschränkt werden soll, wie sie durch die nachstehenden Ansprüche und die Regelungen und Prinzipien des anwendbaren Rechtes eingeschränkbar ist.

Claims (5)

1. Auf einem Halbleiterchip hergestellter Mikrokontroller (IO) zur Ausführung von Anweisungen zur Steuerung externer Geräte, umfassend:
einen chipintegrierten programmierbaren Speicher (17), der nichtflüchtige Speicherzellen aufweist, die adressierbare Stellen des programmierbaren Speichers belegen, und
Mittel, einschließend eine Vielzahl von Konfigurierungssicherungen, die adressierbare Stellen des programmierbaren Speichers (17) umfassen, zur Konfigurierung des Mikrokontrollers (10) in irgendeiner einer Vielzahl von Betriebskonfigurierungen, dadurch gekennzeichnet, daß der Mikrokontroller umfaßt:
Prüfmittel zur Aktivierung des Prüfens des Betriebs des Mikrokontrollers in mindestens einigen der Betriebskonfigurierungen und beinhaltend eine Vielzahl von Prüf-Latches, die Bits in einem Prüfmodus-Register (TSTMD1) umfassen, das beschrieben und erneut beschrieben werden kann, um die Konfigurierungssicherungen zu emulieren, um eine Konfigurierung des Mikrokontrollers ohne eine Programmierung der Konfigurierungssicherungen zu ermöglichen, und Mittel (TSTMUX) zum Abhalten der Prüf-Latches von einer Steuerung der Mikrokontrollerkonfigurierung bei einer Beendigung des Prüfens.
2. Mikrokontroller nach Anspruch 1, wobei der Mikrokontroller Codeschutz- Sicherungen (FPMM1, FGLWP) an adressierbaren Stellen des programmierbaren Speichers (17) umfaßt, wobei Prüf-Latches des Prüfmodus-Registers in der Lage sind, die Codeschutz-Sicherungen unabhängig von den Mitteln zum Abhalten der Prüf Latches zu überspringen, falls die Codeschutz-Sicherungen gelöscht sind, und wobei Prüf-Latches des Prüfmodus-Registers nicht in der Lage sind, die Codeschutz- Sicherungen zu überspringen, wenn die Codeschutz-Sicherungen programmiert sind.
3. Mikrokontroller nach Anspruch 1 oder Anspruch 2, wobei die Prüfmittel weiter einen programmierten Speicher (Prüf-EPROM) umfassen, der einen Programmcode zur Ausführung einer Reihe von Subroutinen zum Prüfen der Anweisungen des Mikrokontrollers in Erwiderung auf einen Input-Programm-Zählerwert enthält.
4. Verfahren des Prüfens eines Mikrokontrollers (10), der auf einem Halbleiterchip hergestellt wird und einen chipintegrierten programmierbaren Speicher (17) aufweist, der Konfigurierungssicherungen enthält, die nichtflüchtige Speicherzellen aufweisen, die adressierbare Stellen des programmierbaren Speichers besetzen, wobei der Mikrokontroller in irgendeiner einer Vielzahl von Betriebskonfigurierungen durch das Programmieren von ausgewählten Sicherungen der Konfigurierungssicherungen konfigurierbar ist, dadurch gekennzeichnet, daß das Verfahren aufweist: das Setzen von Latches, um die Konfigurierungssicherungen zu emulieren, um die Mikrokontrollerkonfigurierung zu steuern, wobei die Latches Bits in einem Prüfmodus-Register (TSTMD1) umfassen, das beschrieben und erneut beschrieben werden kann, um die Konfigurierungssicherungen zu emulieren, um die Konfigurierung des Mikrokontrollers ohne Programmierung der Konfigurierungssicherungen zu ermöglichen, wobei das Verfahren umfaßt:
(i) das Setzen eines Bits in dem Prüfmodus-Register,
(ii) das Lesen und Schreiben in die Bits in dem Prüfmodus-Register, um die Konfigurierungssicherungen zu emulieren,
(iii) das Ausführen einer Reihe von Prüfungen für mindestens einige der Konfigurierungen und
(iv) das Setzen von Mitteln (TSTMUX) zum Abhalten von Prüfmodus-Bits von der Steuerung der Mikrokontrollerkonfigurierung nach einer solchen Prüfung.
5. Verfahren nach Anspruch 4, wobei der Schritt der Ausführung einer Reihe von Prüfungen die Ausführung einer Reihe von Subroutinen umfaßt, die in den Mikrokontroller programmiert sind, um mindestens einige der Betriebsanweisungen des Mikrokontrollers als Erwiderung auf einen Input-Programm-Zählerwert zu prüfen.
DE69231227T 1991-11-12 1992-11-12 Mikrokontroller mit schmelzsicherungs-emulierenden speichern und testverfahren Expired - Fee Related DE69231227T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US79096991A 1991-11-12 1991-11-12
PCT/US1992/009466 WO1993010501A1 (en) 1991-11-12 1992-11-12 Microcontroller with fuse-emulating latches

Publications (2)

Publication Number Publication Date
DE69231227D1 DE69231227D1 (de) 2000-08-10
DE69231227T2 true DE69231227T2 (de) 2001-03-01

Family

ID=25152281

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69231227T Expired - Fee Related DE69231227T2 (de) 1991-11-12 1992-11-12 Mikrokontroller mit schmelzsicherungs-emulierenden speichern und testverfahren

Country Status (4)

Country Link
US (1) US5455937A (de)
EP (1) EP0612422B1 (de)
DE (1) DE69231227T2 (de)
WO (1) WO1993010501A1 (de)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3727670B2 (ja) * 1994-04-28 2005-12-14 富士通株式会社 マイクロコントローラ
US5737212A (en) * 1995-12-04 1998-04-07 Industrial Technology Research Institute Flag setting circuit for microcontroller
US5694067A (en) * 1996-05-24 1997-12-02 Microchip Technology Incorporated Microcontroller having a minimal number of external components
US6339413B1 (en) * 1996-06-28 2002-01-15 Microchip Technology Incorporated Microcontroller with internal clock for liquid crystal display
US5889679A (en) * 1997-07-15 1999-03-30 Integrated Device Technology, Inc. Fuse array control for smart function enable
US6115814A (en) * 1997-11-14 2000-09-05 Compaq Computer Corporation Memory paging scheme for 8051 class microcontrollers
US6163492A (en) * 1998-10-23 2000-12-19 Mosel Vitelic, Inc. Programmable latches that include non-volatile programmable elements
US6708268B1 (en) 1999-03-26 2004-03-16 Microchip Technology Incorporated Microcontroller instruction set
JP4125475B2 (ja) * 2000-12-12 2008-07-30 株式会社東芝 Rtl生成システム、rtl生成方法、rtl生成プログラム及び半導体装置の製造方法
US6882583B2 (en) * 2003-04-30 2005-04-19 International Business Machines Corporation Method and apparatus for implementing DRAM redundancy fuse latches using SRAM
KR100897857B1 (ko) 2003-10-23 2009-05-15 마이크로칩 테크놀로지 인코포레이티드 마이크로컨트롤러 명령어 셋트
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
US8793426B2 (en) 2009-02-11 2014-07-29 Microchip Technology Incorporated Microcontroller with linear memory access in a banked memory
US10936459B2 (en) 2018-12-07 2021-03-02 Microsoft Technology Licensing, Llc Flexible microcontroller support for device testing and manufacturing

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4527234A (en) * 1982-08-02 1985-07-02 Texas Instruments Incorporated Emulator device including a semiconductor substrate having the emulated device embodied in the same semiconductor substrate
US4691316A (en) * 1985-02-14 1987-09-01 Support Technologies, Inc. ROM emulator for diagnostic tester
US4857774A (en) * 1986-09-19 1989-08-15 Actel Corporation Testing apparatus and diagnostic method for use with programmable interconnect architecture
US5068823A (en) * 1988-07-11 1991-11-26 Star Semiconductor Corporation Programmable integrated circuit using topological and parametric data to selectively connect and configure different high level functional blocks thereof
US5003507A (en) * 1988-09-06 1991-03-26 Simon Johnson EPROM emulator for selectively simulating a variety of different paging EPROMs in a test circuit
US5101490A (en) * 1989-01-10 1992-03-31 Bull Hn Information Systems Inc. Peripheral device controller with an EEPROM with microinstructions for a RAM control store
US5138706A (en) * 1989-02-21 1992-08-11 Compaq Computer Corporation Password protected enhancement configuration register for addressing an increased number of adapter circuit boards with target machine emulation capabilities
US5031152A (en) * 1989-09-29 1991-07-09 Sgs-Thomson Microelectronics, Inc. Test circuit for non-volatile storage cell
FR2656939B1 (fr) * 1990-01-09 1992-04-03 Sgs Thomson Microelectronics Verrous de securite pour circuit integre.

Also Published As

Publication number Publication date
EP0612422A1 (de) 1994-08-31
US5455937A (en) 1995-10-03
EP0612422A4 (en) 1996-05-22
EP0612422B1 (de) 2000-07-05
WO1993010501A1 (en) 1993-05-27
DE69231227D1 (de) 2000-08-10

Similar Documents

Publication Publication Date Title
DE69231230T2 (de) Einschaltverzoegerung fuer mikrokontroller
DE69230642T2 (de) Automatischer programmierungs-mikrokontroller mit gespeichertem befehl zur programm-steuerung von externem speicher und verfahren
DE69032342T2 (de) Mikroprozessor und Verfahren zur Aufstellung seiner Peripheriefunktionen
DE69231227T2 (de) Mikrokontroller mit schmelzsicherungs-emulierenden speichern und testverfahren
DE68920216T2 (de) Karte für integrierten Schaltkreis mit geringem Stromverbrauch.
DE3876780T2 (de) Mikrorechner mit eingebauter chipauswahl und programmierbarer busdehnung.
DE69527210T2 (de) Datenverarbeitungsschaltungen und -schnittstellen
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.
DE69714472T2 (de) Verfahren zum überprüfen eines integrierten speichers mit hilfe einer integrierten dma-schaltung
DE4307226C2 (de) Verfahren und Einrichtung zum automatischen Steuern des Energieverbrauches einer integrierten Schaltung in einem Computersystem
DE68927907T2 (de) Einchipmikrorechner
DE2416609C2 (de) Datenverarbeitungsanlage mit einer zentralen Verarbeitungseinheit und Multiprogrammierung mit mehreren Programmunterbrechungs-Prioritätsstufen
DE4418892C2 (de) Mikrocomputer
DE2524046C2 (de) Elektronische Datenverarbeitungsanlage
DE69301535T2 (de) Integrierte Schaltung mit Mikroprozessor, Speicher und internen Konfigurierbaren Peripherie
DE69525129T2 (de) Verfahren und Datenprozessor zum durchsichtigem Betrieb in einem Hintergrundmodus
DE2755616A1 (de) Asymmetrischer multiprozessor
DE102016109892B4 (de) Datenverarbeitungsvorrichtung und Verfahren zum Einsparen von Leistung in einer Datenverarbeitungsvorrichtung
DE60021827T2 (de) Mikrokontrollerarchitektur mit mikrocodierten Peripheriegeräten
DE3280476T2 (de) Mikrorechnersystem für digitale Datenverarbeitung
DE102005060714B4 (de) Datenverarbeitungsvorrichtung, Speicherkarte, Verfahren zum Betreiben einer Datenverarbeitungsvorrichtung und Herstellungsverfahren für eine Datenverarbeitungsvorrichtung
DE69524493T2 (de) Microcontroller mit niedrigem Leistungsverbrauch
DE3650703T2 (de) Mikroprozessor mit einer Blockübertragungsinstruktion
DE69526553T2 (de) Datenprozessor mit Betriebsarten, die durch mindestens ein Maskenoptionsbit gewählt werden und Verfahren dafür

Legal Events

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