Computers

Verwendung von Interrupts in Pic- und dsPic-Mikrocontrollern

Autor: Laura McKinney
Erstelldatum: 5 April 2021
Aktualisierungsdatum: 17 November 2024
Anonim
MPLAB X - PICKit3 - Erste schritte
Video: MPLAB X - PICKit3 - Erste schritte

Inhalt

Der Autor schloss sein letztes Ingenieurjahrsprojekt mit den dsPic-Mikrocontrollern ab und erhielt umfassende Einblicke in diese Geräte.

Interrupts bilden das Rückgrat der Codierungsmethode in Mikrocontrollern, und ihr umfassendes Verständnis ist für Programmierer von entscheidender Bedeutung, die bereit sind, Codes auf Expertenebene zu erstellen. Dieses Tutorial enthält alle wichtigen Informationen, die Pic-Programmierer benötigen, um Interrupts in ihren Mikrocontroller-Codes und -Anwendungen zu verwenden.

Die Mikrocontroller-Codes der dsPic30f-Serie sowie die Entwicklungs-IDE MplabX des Microchips werden verwendet, um dieses Lernprogramm hier zu demonstrieren. Die gleiche Methode gilt jedoch für alle Pic-Mikrocontroller sowie für Mikrocontroller anderer Hersteller.

Benutzern wird empfohlen, relevante Datenblätter zu konsultieren, um genaue Register- und Bitnamen zu erhalten.


Was ist ein Interrupt in einem MicroController?

Interrupt kann im Allgemeinen als eine Funktion definiert werden, die beim Auftreten eines vordefinierten, fest verknüpften Ereignisses in einem Mikrocontroller und nicht durch einen normalen Funktionsaufruf ausgelöst wird.

Diese Funktion wird normalerweise als Interrupt Service Routine bezeichnet.

Alle Interrupts haben ihre Einzigartigkeit:

  1. Vektor unterbrechen.
  2. Vordefiniertes fest verknüpftes Ereignis.
  3. Interrupt-Aktivierungsbits im Interrupt-Aktivierungsregister.
  4. Interrupt-Flag-Bits im Interrupt-Flag-Register.
  5. Priorität unterbrechen.

Vektor unterbrechen

Alle Interrupts werden durch eine bestimmte definiert Interruptvektor das ist nur für diesen Interrupt einzigartig.

Festgebundenes Ereignis

Der Interrupt-Vektor ist anschließend fest mit dem Auftreten von a verbunden vordefiniertes Ereignis in einem Mikrocontroller für:

  • Empfangen von Daten im UART-Datenpuffer.
  • Daten auf dem CAN-Bus empfangen.
  • Vergleichen Sie die Übereinstimmung der PWM-Registerwerte.
  • Abschluss der ADC-Konvertierung.
  • Viele weitere je nach Typ, Familie und Modell des Mikrocontrollers.

In einer Tabelle am Ende dieses Artikels sind einige Beispiele für diese fest verknüpften Interrupt-auslösenden Ereignisse aufgeführt.


Interrupt Enable Bit

Dieses Bit wird verwendet, um den Interrupt zu aktivieren. Ein Interrupt wird aktiviert, wenn dieses Bit auf Eins gesetzt ist, und deaktiviert, wenn dieser Bot auf Null gesetzt ist.

Flag-Bit unterbrechen

Immer wenn ein mit dem Interrupt verbundenes Ereignis auftritt, wird das Interrupt-Flag überprüft. Wenn der Interrupt 0 ist, wird der Interrupt ausgelöst. Wenn das Interrupt-Flag nicht auf Null gesetzt ist, wird der Interrupt nicht ausgelöst.

Priorität unterbrechen

Wenn mehr als ein Interrupt codiert werden soll, muss entschieden werden, welcher zuerst bedient wird, falls für beide ein Triggerereignis auftritt. Ein Interrupt-Prioritätsbit im Interrupt-Prioritätssteuerregister gibt die Priorität für den jeweiligen Interrupt an. Interrupt mit der höchsten Priorität, d. H. Sechs wird zuerst bedient.

Wie funktionieren Interrupts in MicroControllern?

Interrupts werden ausgelöst, wenn eines der Ereignisse auftritt, mit denen sie fest verknüpft sind, z. B. die oben erläuterten. Sie arbeiten in der folgenden Reihenfolge:

  1. Ein mit einem Interrupt verbundenes Ereignis tritt auf.
  2. Der Controller wird auf das Auftreten dieses Ereignisses aufmerksam und überprüft das Interrupt-Flag.
  3. Wenn ein Triggerereignis für mehr als einen Interrupt empfangen wird, wird die Interruptpriorität überprüft.
  4. Wenn das Interrupt-Flag gelöscht ist, wird es automatisch gesetzt und der Programmzähler bewegt sich zum jeweiligen Interrupt-Vektor mit der höchsten Priorität im Code.
  5. Der Code in der jeweiligen Interrupt-Funktion wird unterhalb des Interrupt-Vektors ausgeführt.
  6. Nachdem die Ausführung der Interrupt-Serviceroutine abgeschlossen ist, wird beim Verlassen der Routine ein Interrupt-Flag gelöscht.
  7. Das Mikrocontroller-Programm wird an derselben Stelle fortgesetzt, an der es gesprungen ist, um in die Interrupt-Serviceroutine einzutreten.
  8. Der Interrupt wird erneut ausgeführt, wenn das Ereignis erneut auftritt.

Allgemeine Vorgehensweise und Code zum Aufrufen eines Interrupts

Ein Interrupt kann folgendermaßen initialisiert werden:


1) Setzen Sie das Interrupt-Aktivierungsbit

Das Interrupt-Aktivierungsbit für den jeweiligen Interrupt muss zuerst aus dem Interrupt-Aktivierungsregister aktiviert werden, damit der Interrupt aktiviert und das Auftreten des jeweiligen fest verknüpften Ereignisses aktiviert wird, um den Interrupt auszulösen.

2) Setzen Sie das Interrupt-Prioritätsbit

Wenn in einem Code mehrere Interrupts verwendet werden sollen, können ihnen Prioritäten zugewiesen werden, basierend auf ihrer Wichtigkeit in der Anwendung, wobei die Interrupt-Prioritätsbits im Interrupt-Prioritätssteuerregister verwendet werden.

void Interrupt_Init (void) {IEC2bits.PWMIE = 1; IPC2bits.PWMIP = 1; } // Diese Funktion aktiviert das PWM-Interrupt-Aktivierungsbit im Register Interrupt Enable Control 2. // Diese Funktion kann im Hauptteil vor der while (1) -Schleife über einen normalen Funktionsaufruf aufgerufen werden. // Es ist besser, eine Interrupt-Initialisierungsfunktion zu verwenden, wenn mehrere Interrupts aktiviert werden sollen. // Es ist jedoch nicht erforderlich, diese Funktion zu verwenden, da der Befehl auch direkt in die Hauptfunktion geschrieben werden kann. // Die Interrupt-Priorität wird auf 1 (niedrigste) gesetzt.

3) Wählen Sie den jeweiligen Interrupt-Vektor

Wählen Sie den jeweiligen Interrupt-Vektor und platzieren Sie ihn in der Kopfzeile der Interrupt-Funktion oder Serviceroutine unterbrechen. Der folgende Code zeigt, wie aus dem Interrupt-Vektor eine Interrupt-Serviceroutine erstellt wird.

Eine Liste von Interruptvektoren finden Sie in diesem Artikel ebenfalls als Referenz.

void __attribute __ ((Interrupt, auto_psv)) _PWMInterrupt (void) {// dein Code hier IFS2bits.PWMIF = 0; } // Das Tag "_PWMInterrupt" ist der charakteristische Interrupt-Vektor in dieser Funktion. // Wenn Sie dies durch einen anderen Interrupt-Vektor ersetzen, ändert sich auch die Art des Interrupts.

4) Codieren Sie die gewünschte Operation

Die gewünschte Operation kann in der Interrupt-Funktion codiert werden.

5) Deaktivieren Sie das Interrupt-Flag, wenn Sie die Funktion verlassen

Beim Verlassen des Interrupts muss das jeweilige Interrupt-Flag gelöscht werden, damit der Interrupt erneut ausgelöst werden kann.

Arten von Interrupts

Je nach Typ, Familie und Modell können mehr als 50 Arten von Interrupts in Mikrocontrollern vorhanden sein, die von I2C-Interrupts, SPI-Interrupts, Quadraturcodierer-Interrupts und Timer-Interrupts reichen.

Einige der Interrupts in Pic-Mikrocontrollern sind in der folgenden Tabelle aufgeführt, um das Verständnis zu verbessern.

Richtlinientabelle für Interruptvektoren und Interrupt-Triggerereignisse.

Name unterbrechenVektor unterbrechenStimulus auslösen

PWM-Interrupt

_PWMInterrupt

PWM-Vergleichsübereinstimmung zwischen Zeitbasisregister und Zählregister.

ADC-Interrupt

_ADCInterrupt

ADC-Konvertierung abgeschlossen

UART-Empfangsunterbrechung

_U2RXInterrupt

Empfangen von Daten im UART-Empfangsregister

UART-Übertragungsunterbrechung

_U2TXInterrupt

Laden von Daten in das UART-Übertragungsregister

Fehlerunterbrechung

_FLTAInterrupt

Änderung des Logikpegels am FLT-Pin

Externer Interrupt

_INT3Interrupt

Änderung der Logikstufe an den Int0 / 1-Pins

Niederspannungsunterbrechung

_LVDInterrupt

Niederspannung erkennen

Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.

Wir Empfehlen

Seien Sie Sicher, Dass Sie Lesen Möchten

AMD Ryzen 5 2600 gegen Intel Core i7-7700K mit Benchmarks
Computers

AMD Ryzen 5 2600 gegen Intel Core i7-7700K mit Benchmarks

Ich bin nur ein kleiner Typ, der einen normalen Job al Arzthelferin hat. Meine Leiden chaft i t e , PC zu bauen und PC-Hardware zu te ten / zu überprüfen.Hallo aller eit , Will hier. Heute w...
So installieren Sie VirtualBox in Windows 10
Computers

So installieren Sie VirtualBox in Windows 10

Melanie hat einen B in Phy ik und i t in der Graduierten chule für Analytik und Modellierung. ie betreibt auch einen YouTube-Kanal: The Curiou Coder.VirtualBox i t eine oftware für virtuelle...