mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ISR auslösen bei Empfang von bestimmtem Zeichen.


Autor: Tilman W. (tilman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Experten,
kann mir jemand sagen, ob es möglich ist, bei einem M16C62 , 
programmiert in C++ mit HEW4, einen Interrupt auszulösen, sobald ein 
BESTIMMTES ZEICHEN empfangen wird ? Im Moment wird in meinem Programm 
ein DMA-Interrupt ausgelöst, wenn eine BESTIMMTE ANZAHL von Zeichen 
empfangen wurde... (tcr0 = 0x7).
Ist es möglich beim Empfang z.B. eines Enter-Zeichens einen Interrupt 
auszulösen ?
Danke für jede Hilfe.
Tilman

so sieht die Inititlaisierung des DMA und des Counters i.M. aus:

void Readinit(void)
{
dm0sl = 0x0D;      // DMA0 trigger select UART2 RECEIVE
dm0con = 0x2B;      // Repeat ransfer
sar0 = (unsigned long)&u2rb;   // source=adress of uart2 transmit buffer
dar0 = (unsigned long)&tpacket[0];  // destination register to beginning
tcr0 = 0x07;    // set transfer counter to transfer 7 bytes
dm0ic = 0x04;    // set interrupt priority for DMA int to 4
}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wäre ein spezielles Feature der Hardware-UART Deines Controllers. Ob 
das geht oder nicht hängt nicht vom verwendeten Compiler ab, sondern 
eben von der UART selbst.

Ein Blick ins Datenblatt/Programmierhandbuch sollte Aufklärung bringen 
(ich kann Dir inhaltlich nicht weiterhelfen, da ich Deinen Controller 
nicht kenne).

Autor: Tilman W. (tilman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Trotzdem Danke, ich werd mal das Datenblatt checken, sind ja nur 600 
Seiten :-))

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Datenblatt hat sicherlich ein Inhaltsverzeichnis, und die Funktion 
der Hardware-UART wird in einem entsprechend benannten Abschnitt des 
Datenblatts beschrieben sein.
Die 600 Seiten musst Du daher gar nicht alle durchlesen.

Autor: Tilman W. (tilman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so, verstehe.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sollte die UART nicht bei jedem empfangenen Zeichen einen Int auslösen 
???
Eine Hardware UART arbeitet eigentlich so.
Du brauchst doch dann nur das Zeichen vergleichen.
Wenn ja Int sonst RETI und fertig.

Autor: Tilman W. (tilman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, natürlich; ich habe das jetzt auch so gemacht. Nur dachte ich noch 
heute Vormittag, dass dieses Procedere Speicher- und Rechenzeit fressen 
würde - wenn es direkt gegangen wäre, wäre es halt sehr nett gewesen, 
aber so geht es jetzt auch.
Danke.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weis ja nicht wie schnell Deine Kiste ist, aber 5 oder 6 Befehle Zeit 
hat man doch immer übrig....

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für eine sehr Stromsparende Implementierung wäre sowas schon nicht zu 
verachten. Dann bräuchte man die CPU erst hochzufahren, wenn das 
richtige Zeichen von der UART empfangen wurde.
Aber ich habe sowas auch noch nie gesehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.