Zeichen im Interrupt empfangen

Gast #1256697
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.
Gast #1256820
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)
Gast #1256998
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()
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.