LPC2138 Interrupt Problem

Gast #256101
Lesenswert?
• ▲
▼
Hallo,

Ich habe ein Problem mit dem Interrupt des LPC2138.

Ich benutze den LPC2138 zusammen mit einem Wiznet NM7010A ETH-Modul
in einem größeren Projekt.

Mein Problem hängt mit der Interruptverarbeitung des LPC2138 zusammen.
Es äussert sich so, dass die Ethernet-Kommunikation minutenlang ohne
Problemem läuft, jedoch hängt sich das ganze System ganz sporadisch auf
.

Ich habe herausgefunden, dass der NM7010A Interrupt, der am EXTINT0 am
LPC2138 angeschlossen ist, dann nicht mehr funktioniert, wenn er in der
Umgebung der Instruction

VICIntEnClear = INT_EXT0;          // disable interrupt

oder einer verwandten Instruktion auftritt. Das äussert sich dann so,
dass der LPC2138 den Interrupt irgendwie schon noch einmal annimmt,
aber anscheinend irgend etwas anders ausführt als er soll (was ich aber
nicht ermitteln kann). Nach einigen hundert Microsekunden wird dann
irgendwie in meine Application zurückgekehrt und verstellt
unkontrolliert das Interface zum MN7010A, sodass dieser den Interrupt
nicht mehr rücksetzen kann.

Ich konnte das mit Hilfe eines Timinganalyzers und der
Instrumentaliserung des Programm zu diesem Zweck, eindeutig dem LPC2138
zuordnen.

Kann es sich jemand erklären wie das zustande kommt, was der LPC2138 in
der unkontrollierten Zeit nach Annahme des besagten Interrupts macht und
hat jemand eine Idee dazu wie man das verhindern kann ?

Ich habe zwar etwas über "Spurious Interrupts" im Datenblatt des
LPC2138 gelesen, weiss aber nicht ob das in diesem Fall zutrifft.
Einen Spurious Interrupt Vector gibt es ja nicht beim LPC2138 im
Gegensatz zu anderen ARM7 Derivaten. Das Sperren des globalen
Interrupts vor dem Sperren des spezifischen Interrupts (und umgekehrt)
habe ich schon probiert, hilft aber nix.

Hat jemand schon ähnliche Erfahrungen gemacht und ggf. eine Lösung
dafür ?

Jeder sachdienliche Hinweis ist willkommen.

Vielen Dank.
Gast #256102
Lesenswert?
• ▲
▼
"Einen Spurious Interrupt Vector gibt es ja nicht beim LPC2138 im
Gegensatz zu anderen ARM7 Derivaten."

Deine Beschreibung passt exakt zu dem erwähnten Thema "Spurious
interrupts" im Philips Manual. Der Prozessor kriegt einen IRQ ab, aber
noch bevor er den VIC fragt, ist dort der betreffende Interrupt schon
abgeschaltet. Folge: der VIC liefert den VicDefVectAddr. Das ist
irgendwie auch der von dir gesuchte Spurious Interrupt Vector.
Gast #256103
Lesenswert?
• ▲
▼
@A.K.

Danke für den Hinweis. Das wusste ich gar nicht dass VicDefVecAdr
sozusagen als Sammelinterrupt auch für Spurious Interrupts fungiert.
Erste Versuche zeigen, dass es anscheined der richtige Hinweis war.
Muss es aber noch weiter untersuchen.

Danke jedenfalls nochmals.
Gast #256104
Lesenswert?
• ▲
▼
Falls nicht ohnehin schon so gemacht: Moeglicherweise ist die
Initialisierung des ext.-Int. als "FIQ" eine Loesung. Im
Exceptions-Vector dann die Adresse der "ext.-Int.-ISR" eintragen.
Keine weitere Quelle als FIQ, nur der Modul-Int. Falls es damit
funktioniert, spart dies die Rechenzeit zur zusaetzlichen Auswertung
der Interruptursache in einer default-ISR.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.