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