Renesas’ MCU-Familie RA nutzt viele, teils verbesserte Peripherals, die bereits in den H8- oder M16-C-Familien eingesetzt wurden. Sie haben sich über Jahre bewährt, wobei einige davon die Leistung einer Anwendung verbessern oder ihre Leistungsaufnahme verringern.
Peripheriekomponenten in Mikrocontrollern bilden die Schnittstellen zu Systemkomponenten außerhalb des Controllers. Im Fall der RA-Familie von Renesas-MCUs können sie aber zusätzlich eingesetzt und kombiniert werden, um viele der Low-Level-Aufgaben in einer typischen Mikrocontroller-Anwendung zu automatisieren. Eine der interessantesten – aber am wenigsten verstandenen – Peripheriekomponenten in einem typischen RA-Mikrocontroller ist wahrscheinlich der Data Operations Circuit (DOC). Dieser kann bei Echtzeitanwendungen erhebliche Leistungsvorteile bieten, da er die CPU von einfachen Aufgaben entlastet. Dies verbessert die Reaktionszeit und reduziert die Leistungsaufnahme. Das ist insbesondere dann der Fall, wenn der DOC in Verbindung mit einigen der anderen erweiterten Funktionen der RA-Familie zum Einsatz kommt.
Das Herzstück des DOC ist eine einfache ALU (arithmetische Logikeinheit). Diese ALU führt nur drei grundlegende Funktionen aus: Sie kann einen 16-bit-Datenvergleich, eine 16-bit-Addition oder eine 16-bit-Subtraktion durchführen und dann einen Interrupt aufgrund einer bestimmten Ausgangsbedingung erzeugen. Diese Funktionen lassen sich alle ohne Intervention der CPU ausführen. Dies erfolgt durch die automatische Übertragung der vom DOC zu verarbeitenden Daten mittels DMAC (DMA-Controller) oder eines DTC (Data Transfer Controller). Siehe hierzu Bild 1.
Beim 16-bit-Vergleichsmodus wird ein anfänglicher Referenzwert in den DOC geladen. Die zu vergleichenden 16-bit-Daten werden dann geladen und in Hardware mit dem Referenzwert verglichen. Der DOC lässt sich so programmieren, dass er bei einem Treffer (true) oder einem Fehler (false) einen Interrupt erzeugt.
Im 16-bit-Additionsmodus wird ein anfänglicher 16-bit-Wert in den DOC geladen. Anschließend werden ein oder mehrere zusätzliche 16-Bit-Werte in den DOC geladen und zu dem ursprünglichen Wert addiert. Sobald alle erforderlichen Werte geladen sind, wird der Zähler auf Überlauf geprüft und gegebenenfalls ein Interrupt ausgelöst. Mit diesem einfachen Mechanismus lässt sich feststellen, ob ein bestimmter Schwellenwert überschritten wurde. Dies ist beispielsweise ideal für die automatische Pegelmessung mittels ADC.
Im 16-bit-Subtraktionsmodus wird ein erster 16-bit-Wert in den DOC geladen. Anschließend werden weitere 16-bit-Werte (abermals einer oder mehrere) in den DOC geladen und vom ursprünglichen Wert subtrahiert. Wenn alle erforderlichen Werte geladen sind, wird der Zählerstand auf Unterlauf geprüft und gegebenenfalls ein Interrupt erzeugt. Dieser einfache Mechanismus ermöglicht es wiederum festzustellen, ob ein bestimmter Schwellenwert überschritten worden ist.
Die wahre Stärke des DOC liegt jedoch darin, dass diese drei einfachen Funktionen genutzt werden können, um Entscheidungen zu treffen, wie das System arbeiten soll. Das bedeutet, dass direkt in die Hardware des Mikrocontrollers eingegriffen werden kann, sodass die Hardware entscheidet, wie auf bestimmte Eingangsdaten reagiert werden soll.
Wird der DOC mit Peripheriekomponenten wie dem DMAC oder dem DTC kombiniert, kann die Datenübertragung an den DOC automatisiert werden. Damit lässt sich ein System realisieren, das in der Lage ist, Entscheidungen auf der Grundlage von Daten aus nahezu jeder Quelle zu treffen. Dies kann ohne CPU-Interventionen erfolgen, selbst wenn die CPU im Ruhezustand ist. Damit kann viel schneller reagiert werden. Es muss nicht mehr darauf gewartet werden, bis die CPU unterbrochen wird, um dann auf das Ereignis zu reagieren.
Es gibt viele Beispiele für den Einsatz eines DOC. Ein Beispiel ist ein A/D-Wandler (ADC) in einem Pegelmesssystem, um automatisch zu erkennen, wenn der Pegel einen programmierten Schwellenwert überschreitet. Die Verwendung des DOC für derartige Funktionen hat viele Vorteile. So könnte die CPU beispielsweise für andere Aufgaben mit hoher Priorität vorbehalten sein und nur durch einen DOC-Interrupt alarmiert werden, wenn eine bestimmte Eingangsbedingung vorliegt. Die CPU lässt sich aber auch in den Sleep-Modus versetzen, um die Leistungsaufnahme zu verringern. Sie wird erst wieder durch einen Interrupt geweckt, wenn der DOC einen gültigen Alarmzustand erkennt.
Der DOC ist in allen Mikrocontrollern der RA-Familie verfügbar. Renesas hat den DOC kontinuierlich weiterentwickelt. Die neuesten Versionen bieten zusätzliche Funktionen, mit denen noch komplexere Entscheidungen anhand von Daten getroffen werden können.
Im Folgenden geht es um den bereits erwähnten DTC. Dabei handelt es sich um eine Peripheriekomponente, die einen einfachen, aber äußerst flexiblen Mechanismus zur Datenübertragung zwischen Peripherie und Speicher bietet. Ein DTC ist ebenfalls auf allen Bausteinen der RA-Mikrocontrollerfamilie verfügbar.
Der DTC nutzt für die Datenübertragung einen einfachen programmierbaren Controller, der seine Konfigurationsinformationen in einer Tabelle im SRAM speichert. Dies verringert den Platzbedarf für diese Aufgabe erheblich gegenüber der Verwendung eines großen, dedizierten Hardware-Blocks, wie er typischerweise beim DMAC zum Einsatz kommt. Die Programmierbarkeit wiederum bietet ein viel höheres Maß an Flexibilität im Vergleich zur Verwendung eines DMAC. Da die Konfigurationstabelle, die die Übertragung beschreibt, im SRAM gespeichert wird, ist eine nahezu unbegrenzte Anzahl an Kanälen möglich. Die Kanalanzahl ist nur durch den verfügbaren SRAM-Speicher begrenzt.
Bei der RA-Familie kann ein Event (oder Interrupt), das von der CPU, einer Peripheriekomponente oder einem externen Pin ausgelöst wird, mehrere Aktionen auf dem Baustein auslösen. Bild 2 zeigt ein vereinfachtes Diagramm des Interrupt-Controllers. Es veranschaulicht, wie ein Event (Ereignis) mehrere Aktionen auslösen kann. Dazu gehören ein herkömmlicher Interrupt, der den Programmablauf der Anwendung ändert, eine DMAC- oder eine DTC-Übertragung. Es ist auch möglich, mehr als eine dieser Aktionen durch ein einziges Event auszulösen.