Forum: Mikrocontroller und Digitale Elektronik Interrupt Probleme beim LPC2148


von GEO (Gast)


Lesenswert?

Hi, habe beim Arm LPC2148 Interrupt Probleme.
Ich benutze 5 verschiedene Interrupts.
2 zum Impulse zählen. Hier muss ich möglichst viele Impulse zählen
können.
Und dann noch 2 Timerinterrups alle 2 Sekunden und einen SPI Interrupt
der ab und zu zum auslesen eines Bausteins verwendet wird.

Programm ist wie folgt aufgebaut.
Es werden während der 2 Timer jeweils per Interrupt die aufgetretenen
Impulse gezählt.

Bei einer leeren while(1)-Schleife ohne kann ich Impulse mit einer sehr
hohen Frequenz zählen. (jeweils bis ca. 100 kHz)
Bei der fertigen while(1)-Schleife mit Displayausgabe und
Rechenoperationen habe ich jetzt mit den Interrupts Probleme und der
Kontroller hängt sich schon bei kleinen Impulsfrequenzen ( ca.20Hz)
komplett auf.

Sollte ich Priorisierte Interrupts verwenden?
Die Timer und SPI Interrups treten im Vergleich zu den EINT aber sehr
selten auf und sollte nicht das Problem sein.
Sollte der Stack vergrößert werden, weil vielleicht rücksprungadressen
nach dem Interrupt verloren gegangen sind?

An was kann es liegen dass sich der Kontroller mit den Interrupts
aufhängt? Ohne habe ich keine Probleme!

MfG
GEO

von Robert Teufel (Gast)


Lesenswert?

Frage, warum die Pulse nicht mit einem Timer Eingang zaehlen? Die haben
einen Modus mit dem externe Pulse gezaehlt werden koennen. Das sollte
bis in den MHz Bereich moeglich sein.

Mal versuchen die Zaehlinterrupts im VIC auf hoehere Prioritaet zu
legen und die Application Note "Nested Interupts" zu Gemuete fuehren.

http://www.semiconductors.philips.com/acrobat_download/applicationnotes/AN10381_1.pdf

hth (hope that helps) Robert

von GEO (Gast)


Lesenswert?

Habe auch überlegt die Impulse über den Timer zu zählen.
Problem ist aber, dass ich 2 verschiedene Impulsquellen habe, die
zeitgleich und getrennt gezählt werden müssen.
Mit deinem Vorschlag, den ich auch in Erwägung gezogen habe, fehlt mir
aber dann die Zeitreferenz. (oder täusche ich mich)
Werde es mal mit Prioritäten versuchen und die Application note lesen.
vielen Dank für die Tips.

von Robert Teufel (Gast)


Lesenswert?

Da hab ich wohl was uebersehen / nicht richtig verstanden. Die Pulse
sollen nicht nur gezaehlt, sondern auch gemessen werde?  Dann brauchst
Du tatsaechlich den Interrupt. Also vermutlich nimmst Du die Capture
Eingaenge und der Timerstand wird bei der FLanke ins Capture Register
uebernommen, dann in der Interrupt Routine fuer Capture wird der
Timerstand ausgelesen?  Hab ich das jetzt in etwa verstanden?

Was passiert eigentlich in Deiner Anwednung wenn Du einen Puls nicht
mitbekommst? Einfach so aus Neugierde, was ist denn die Anwendung?

Robert

von GEO (Gast)


Lesenswert?

Die Anwendung ist das Messen zweier Umdrehungen.(Motor, einmal bis ca
6000 RPM und einmal bis 1000RPM über Hallimpulse)
Wenn manche Impulse fehlen ist es nicht so schlimm.

Du hast gerade die andere Möglichkeit genannt, die ich nicht verwende.
Ich starte einen Timer (z.B.: 2 Sec) zähle in der Zwischenzeit alle
Interrupts und lese die gezählten Interrupts aus. So hab ich dann alle
Impulse während der 2 Sekunden.

Meine Möglichkeit habe ich genommen, um schon eine kleine Rundung der
Impulse über der Zeit zu haben.
Bei deiner habe ich ja bei jedem Impuls einen anderen Timerstand und
müsste hier dann einige mitteln.

Wäre die Frage, ob deine Möglichkeit stabiler wäre?
Anzahl der Auftretenden Interrups wäre in etwa ja gleich, da die 2
Timerinterrups ja nur alle 2 secunden auftreten.

Probiers heut oder morgen auf jeden Fall mal mit priorisierten
Interrups.

Nochmal Danke für die Hilfe.

von GEO (Gast)


Lesenswert?

Noch eine Frage wg. Priorisierung und dem nested interrupt Problem.
Welche Interrups sollten die höchste Priorität bekommen, wenn jetzt,
wie hier es nicht so eintscheidend ist, wenn einer verloren geht.
Sollte dann der seltenste die höchste Prioritöt bekommen, weil dieser
ja sonst am öftesten unterbrochen würde (wg. nested Interrupt Problem).
Oder genau anders herum?

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
Noch kein Account? Hier anmelden.