Hallo, wenn ich einen Puffer, wo UART-Daten geschrieben werden, auslesen will, muss bei der LPC-Programmierung die Interrupts ausschalten wie bei den AVR's oder ist das nicht nötig? Danke
Ich meine, muss man vorher den UART-Interrupt ausschalten und dann auslesen und danach wieder einschalten, damit auch nicht gleichzeitig gelesen und geschrieben wird oder ist das nicht nötig? wie ich das in einige LPC UART-Beispiel-Code gesehen habe.
Leute, was ist denn los? also entweder ist meine Frage zu blöd oder zu kompleziert. Weiss kein Mensch was darüber?
Du braucht den Interrupt nicht auszuschalten. Der UART arbeitet vollduplex. MfG Mark
Wäre ja mal ganz schön, wenn du erzählen würdest um welche µC- Architektur es sich handelt. LPC 8051er oder LPC ARM? Oder gar noch etwas ganz anderes?
Kommt drauf an welchen Puffer du meinst: Den FIFO der UART selbst (wie Mark evtl. vermutete) oder einen Puffer im Speicher, der in einer Interrupt-Routine gefüllt wird. Bei letzterem Fall wird es meist notwendig sein, kurzzeitig die Interrupts entweder insgesamt oder nur den UART-Interrupt abzuschalten. Es gibt wohl eine Methode, die ohne auskommt, aber einfacher wird's dadurch letztlich auch nicht. Das zugrunde liegende Problem ist unabhängig von der Prozessorarchitektur.
@Frank N.: Sorry, das hätte ich noch angeben müssen, es geht um einen LPC2368 ARM7TDMI @Andreas Kaiser: >Bei letzterem Fall wird es meist notwendig sein, kurzzeitig die >Interrupts entweder insgesamt oder nur den UART-Interrupt abzuschalten Ich meine in einem Puffer im Speicher der in einer Interrupt-Routine gefüllt wird. Interrupts abschalten und starten so?
1 | void ClrInt(unsigned int IntNumber) |
2 | {
|
3 | VICIntEnClr = 1 << IntNumber; |
4 | }
|
5 | |
6 | void StartInt(unsigned int IntNumber) |
7 | {
|
8 | VICIntEnable = 1 << IntNumber; |
9 | }
|
Oder muss man es anderes machen? Danke
So kann man es machen. Man sollte dabei allerdings das Zeitverhalten von CPU und Interrupt-Controller im Auge behalten. Denn es kann ein paar Takte dauern bis sich eine solche Maskierung durchgängig auswirkt, d.h. es kann bereits ein Interrupt im Anmarsch sein, der dann noch kurz nach dieser Maskierung aktiv wird. Und es wird dann von der Version von Core und Interrupt-Controller abhängen, ob dafür der UART- oder ein möglicher Default-Vector (spurious interrupt) greift. Einfacher ist es folglich, wenn man den Interrupt in der CPU abschaltet.
>Einfacher ist es folglich, wenn man den Interrupt in der CPU abschaltet.
Wie macht man das denn?
Indem man die Doku der Library des Compilers seiner Wahl durchliest. Oder, wenn die nichts hergibt, in bischen auf www.gidf.de herumschnüffelt.
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.