Hallo,
normalerweise (das heißt: höchstwahrscheinlich auch bei ARM so, habe ich aber nicht nachgeschlagen) wird das Interruptflag automatisch zurückgesetzt, wenn die CPU in eine ISR springt. Damit sind, während die CPU den Interrupt behandelt, alle Interrupts deaktiviert. Dieses Flag wird beim Verlassen der ISR auch automatisch wieder zurückgesetzt.
Eine ISR darf niemals Interrupts aktivieren, ohne ihren eigenen Interrupt vorher explizit abgeschaltet zu haben! (Nested Interrupts braucht man normalerweise nicht, das heißt also: Eine ISR sollte niemals Interrupts erlauben! Auch nicht am Ende!)
Wenn dein IRQ schneller feuert, als du ihn verarbeiten kannst, dann dauert deine ISR zu lange und du solltest dein Design überdenken. Je nach Komplexität der Hardware liest die ISR nur die Daten aus der Hardware, bereitet sie etwas auf (z.B. Skalierung, LUT), schreibt die Daten in einen globalen Puffer und weist das übergeordnete System (z.B. verantwortlicher Treiber, Kernel, Hauptprogramm) darauf hin, dass ein Interrupt stattgefunden hat. In einer ISR sollte nichts stattfinden, was länger als ein paar hundert Takte dauert.
Du darfst es natürlich auch anders machen, solltest dann aber verdammt gut begründen können, warum du es anders machen möchtest.
Gruß,
Svenska