Interrupts ausschalten bei LPC's

Gast #827736
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.
#828199
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.
Gast #828338
@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
#828381
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.