www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM: AT91SAM7s Interrupts Verstaendnisproblem


Autor: romanua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Kann mir jemand bitte erklaeren, was bei AT91SAM7s "external interrupt
lines" bedeuten?

Ich dachte, dass es etwas mit den durch Pins ausgeloeten Interrupts
haben soll. Aber wenn ich das Datenblatt richtig verstehe, haben die
"external interrupts" nichts mit PIO zu tun.

Danke.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der PIO-Controller kann selbst einen Interrupt auslösen, sobald sich ein
Pin ändert. Die "external interrupts" sind wohl dazu da, das ganze
etwas schneller zu machen, weil man dann in der ISR nicht erst
nachschauen muß, welcher Pin den Int ausgelöst hat. Man müsste sogar
einen FIQ damit auslösen können, was das ganze nochmal schneller
macht.

Der Frank ohne "bye"

Autor: romanua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank, danke fuer die Hilfe.

Meinst du, dass es Pins gibt, die direkt als "interrupt sources"
eingestellt werden koennen?

Welche ist die richtige Seite im Datenblatt dazu? Im Kapitel zum
Advanced Interrupt Controller finde ich nichts.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
11.3 PIO Controller A Multiplexing
IRQ0,1 und FIQ sind dann Deine Pins.
Und beim AIC steht doch auch was über die IOs.
11.4 Peripheral Identifiers

Autor: romanua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Frank,

Danke fuer die Erklaerung, es hat geholfen.

I moecht Dich noch fragen, ob ich die Sache richtig sehe:

Fast Interrupts unterscheiden sich von normalen Interrupts durch
R8_fig-R12_fig, die im FIQ Modus als R8-R12 dienen und die man nicht
absichern muss. Das spart Zeit und dadurch - FAST Interrupt.

In etwa so, oder es gibt noch Punkte warum FIQ schneller als IRQ ist?


Noch eine Frage zu Fast Forcing.

Wenn ein normaler Interrupt ausgeloest wird, kann ich die Adresse des
Handlers in AIC_IVR finden, wenn ein schneller Interrupt(FIQ) dann
steht die Adresse des Handlers in AIC_FVR.

Wo lese ich die Adresse des Handlers wenn ein  Fast geforcter Interrupt
ausgeloest wird? Das Datenblatt sagt AIC_FVR zeigt immer AIC_SVR0, egal
welche Quelle es war. Ist es dann AIC_IVR?

Wenn "ja", wird PC mit 0x18(wie bei IRQ) oder mit 0x1C(wie bei FIQ)
beladen?

Gruss,
r.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In etwa so, oder es gibt noch Punkte warum FIQ schneller als IRQ ist?

Nein, das sehe ich eigentlich auch so. Wenn man den FIQ-handler in
Assembler schreibt, braucht man u.U. sonst keine Register zu sichern.

>Ist es dann AIC_IVR?

Ich glaube nicht, allerdings hab ich mit FIQs oder fast forcing noch
nichts gemacht. So wie ich das sehe liegt der Sinn von fast forcing
darin, wenn man EINE Interruptquelle besonders schnell behandeln will,
also z.B. wenn Du einen Timerinterrupt besonders schnell machen willst,
dann schreib die Adresse des Handlers direkt in AIC_SVR0 und mach ihn
fast forcing. Es macht doch wenig Sinn, einen Interrupt als fast
forcing zu deklarieren, wenige Takte beim sichern der Register zu
gewinnen und dann wieder zu verschwenden, weil man erstmal schauen
muss, welcher Interrupt denn nun behandelt werden muß. Da kann man auch
gleich beim normalen IRQ bleiben. Bei FF wird der PC mit 0x1C geladen,
wie beim normalen FIQ. Der AIC aktiviert die nFIQ Leitung zum Core.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"In etwa so"

Ja.

"oder es gibt noch Punkte warum FIQ schneller als IRQ ist?"

Indirekt. Normale IRQs werden mitunter "nested" betrieben, d.h. höher
priorisierte IRQs kommen auch innerhalb einer Interrupt-Routine durch.
Die nicht ganz durchdachte Interrupt-Technik der ARMs erfordert dafür
signifikanten Verwaltungsaufwand. Entfällt dann beim FIQ.

"Wo lese ich die Adresse des Handlers wenn ein  Fast geforcter
Interrupt ausgeloest wird?"

Seitens der CPU sind keinerlei Interrupts oder Exceptions vektorisiert,
weder IRQ noch FIQ. Üblich ist freilich, dass der erste Befehl des IRQ
den Vektor aus dem Interrupt-Controller in den PC lädt, der FIQ-Code
jedoch entweder direkt bei 0x1C beginnt (weshalb das ja die letzte
Adresse in der Sprungleiste ist), oder dort schlicht der Sprung zur
FIQ-Routine steht. Zwar kann man evtl. auch für FIQs einen
Interrupt-Controller verwenden, aber das entspricht nicht ganz dem Sinn
der Sache, üblicherweise gibt's für FIQs nur eine einzige Ursache.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.