Forum: Mikrocontroller und Digitale Elektronik Zeichen im Interrupt empfangen


von Gast (Gast)


Lesenswert?

Guten Tag,

wie lautet die logische Routtine für den Receive eines Zeichens im 
Interrupt?
(Plattform ARM LPC2134)
z.B.:
im main() wrden Interrupte initialisiert, Pins freigegeben use.
und per Interrupt Zeichen empfangen.
funktion im main loop die aus zeichen wartet
?????

Ich habe noch nicht mit Interrupts gearbeitet.
Könnt ihr mir logisches vorgehen darstellen.
Dann will ich versuchen Code auszusetzen.

Vielen Dank im Voraus.

von taugenichts (Gast)


Lesenswert?

>Guten Tag,

Hi,

>wie lautet die logische Routtine für den Receive eines Zeichens im
>Interrupt?

Logische Routine? Ich nehme an, du erhälst Zeichen über die serielle 
Schnittstelle deines µCs?

(Plattform ARM LPC2134)

>Kenne ich (leider) nicht - ist aber zunächst egal.

>z.B.:
>im main() wrden Interrupte initialisiert, Pins freigegeben use.

Gut. Dann wird also auch ein Interrupt aktiviert, der dich über den 
Empfang eines Zeichens informiert!?

>und per Interrupt Zeichen empfangen.

Aha. Dann musst du eine Interrupt-Service-Routine schreiben, die bei 
Auftreten des Interrupts das empfangene Zeichen einliest, speichert und 
evtl. ein Flag setzt, damit deine Main-Routine weiss, dass ein Zeichen 
da ist und verarbeitet werden kann.

>funktion im main loop die aus zeichen wartet

>Ich habe noch nicht mit Interrupts gearbeitet.
>Könnt ihr mir logisches vorgehen darstellen.
>Dann will ich versuchen Code auszusetzen.

Also:

1) Initialisierung (Ports, Interrupts, ...)
2) Interrupt-Service-Routine(n) schreiben, die die Interrupts behandeln
3) Programm schreiben (main)

von Falk B. (falk)


Lesenswert?

Siehe Interrupt

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Danke für diese Infos, die Sache ist nicht ganz leicht.
Ich bin jetzt auf der Stuffe 1: Also Interrupt Initialiesierung 
(Prozessor_Port habe ich schon).

Also in meinem main wird eine Funktion 
aufgerufen(init_interrupt_uart1()),
die den Interrupt initialisieren soll. Über UART1 wird empfangen, also 
muss ich für diesen Interrupt initialisieren.


1) Initialisierung (Ports, Interrupts, ...)
eigenem C-File bearbeitet wirden dann die Register gesetzt:
1
uart1_interrupt_init();
2
{
3
4
//UART1 ist ein non-vectored IRQs spielt das eine Rolle
5
// Disable all interrupts
6
VICIntEnClear = 0xFFFFFFFF; 
7
8
// Enable a UART1-interruppt as IRQ oder besser als FIQ?
9
VICIntSelect =  0x00000000; 
10
11
//UART1 are enabled interrupts  
12
VICIntEnable =  0x00000080;
13
14
// ISR ist die Funktion die ausgeführt wird, wenn der Interrupt auslöst.
15
VICVectAddr0=(unsigned long)ISR;
16
17
//UART1 Priorität auf 0 setzen                        //holds address where UART1 IRQ
18
ICVectCntl0 = 0x00000080;
19
20
}

Habe ich alle notwendigen Interrupts erwischt?
Sind diese richtig gesetzt?

VIELEN DANK!


2) Interrupt-Service-Routine(n) schreiben, die die Interrupts behandeln

3) Programm schreiben (main)
init_interrupt_uart1()

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.