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


von Tilman W. (tilman)


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
}

von Rufus Τ. F. (rufus) Benutzerseite


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).

von Tilman W. (tilman)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Tilman W. (tilman)


Lesenswert?

Ach so, verstehe.

von Stephan (Gast)


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.

von Tilman W. (tilman)


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.

von Stephan (Gast)


Lesenswert?

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

von Johnny (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.