Wozu werden Interrupt Transfers verwendet?
zur Übertragung von kleinen Datenmengen, die zu nicht genau bestimmbaren Zeitpunkten verfügbar sind
Universal_Serial_Bus
Universal_Serial_Bus

==== Interrupt-Transfer ====
Interrupt-Transfers dienen zur Übertragung von kleinen Datenmengen, die zu nicht genau bestimmbaren Zeitpunkten verfügbar sind. Im Endpoint Descriptor teilt das Gerät mit, in welchen maximalen Zeitabständen es nach neuen Daten gefragt werden möchte. Das kleinstmögliche Abfrageintervall beträgt bei Low Speed 10 ms, bei Full Speed 1 ms und bei Hi-Speed bis zu drei Abfragen in 125 µs. Bei Low Speed können pro Abfrage bis zu 64 Bits, bei Full Speed bis zu 64 Byte und bei Hi-Speed bis zu 1024 Byte übertragen werden. Daraus ergeben sich maximale Datenraten von 0,8 kB/s bei Low Speed, 64 kB/s bei Full Speed und 24576 kB/s bei Hi-Speed. Die Daten sind mit einer Prüfsumme (CRC16) gesichert und werden bei Übertragungsfehlern bis zu dreimal durch die Hardware wiederholt. Geräte der HID-Klasse (Human Interface Device), zum Beispiel Tastaturen, Mäuse und Joysticks, übertragen die Daten über den Interrupt-Transfer.
Universal_Serial_Bus Arm_Cortex-M3 Interrupt
Universal_Serial_Bus

==== Bulk-Transfer ====
Bulk-Transfers sind für große und nicht zeitkritische Datenmengen gedacht, wie beispielsweise das Lesen oder Schreiben von Dateien auf einer USB-Festplatte. Diese Transfers sind niedrig priorisiert und werden vom Controller durchgeführt, wenn alle isochronen und Interrupt-Transfers abgeschlossen sind und noch Datenrate übrig ist. Bulk-Transfers sind durch eine Prüfsumme (CRC16) gesichert und werden durch die Hardware bis zu dreimal wiederholt. Low-Speed-Geräte können diese Transferart nicht benutzen. Full-Speed-Geräte benutzen Puffer-Größen von 8, 16, 32 oder 64 Byte. Hi-Speed-Geräte verwenden immer einen 512 Byte großen Puffer. Arm_Cortex-M3

== Vectored Interrupt Controller ==
Mit der Implementierung des NVIC verwendet der Cortex-M3 eine echte Vektortabelle, d. h. dort stehen Sprungadressen (Vektoren) statt der zuvor bei ARM-basierten Controllern üblichen vollständigen Befehle. Über sein direktes Interface zum Core können diese Vektoren (Adressen) sehr schnell geladen und angesprungen werden.
Der Interruptcontroller ist beim Cortex-M3 sehr eng mit dem Kern verbunden. Der Prozessor sichert den Kontext automatisch. Weitere Besonderheiten wie „Late Arriving Interrupt“ und „Tail Chaining“, bei dem eine POP/PUSH-Sequenz eingespart wird (vgl. ARM7), ergeben ein sehr effizientes Interruptsystem.
Allgemein kann jedem Interrupt eine Priorität zugewiesen werden, d. h. die Priorität wird nicht über die Position in der Vektortabelle fest vorgegeben. Die Prioritäten können in Gruppen organisiert werden. Interrupts in verschiedenen Gruppen können sich gegenseitig unterbrechen, innerhalb einer Gruppe unterbricht ein Interrupt höherer Priorität keinen niederpriorigen. Das ist wichtig, um Deadlocks bei gemeinsam verwendeter Hardware zu vermeiden. Interrupt

=== Maskierbarer Interrupt ===
Erscheint an diesem meistens mit NMI bezeichnete Pin ein Signal (Vcc) während Interrupts  aktuell nicht maskiert sind (bei x86 ist dann das Interrupt-Flag (IF)  gesetzt), so maskiert die CPU alle maskierbaren I. und liest die Nummer des angeforderten Interrupts vom Systembus (Intel64-Hardware unterscheidet 256 Interrupt-Nummern). Dort muss der Anforderer die Nummer vor der Anforderung anlegen. Die CPU konsultiert damit dann die Interrupt-Vektortabelle und entnimmt dieser die Adresse der zugehörigen Interrupt-Service-Routine. Diese gehört zur Treibersoftware der auslösenden Hardware. Diese Routine muss bei Ausführung zuerst den gesamten gefährdeten Verarbeitungskontext, also die Prozessorregister, die sie benutzen wird, sichern. Anschließend erfolgt die eigentliche Behandlung des Interrupts und schließlich die Rückspeicherung des Kontextes und Rücksprung hinter die Anweisung, die zuletzt vor der Behandlung des Interrupts ausgeführt wurde. Beim Rücksprung erfolgt auch die Demaskierung der Interrupts. Dafür gibt es eine besondere Interrupt-Return-Anweisung aus dem CPU-Befehlssatz, die anstelle der normalen Return-Anweisung verwendet wird. Der Ablauf entspricht technisch insgesamt dem eines normalen Unterprogramm-Aufrufs mit ergänzender Behandlung der Interrupt-Maskierung. 