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.
>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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.