Hardware Reference
In-Depth Information
IDLEIF
Dieses Flag zeigt an, dass keine Bus-Aktivität vorliegt, wenn es 1 ist. Damit sollte der
Suspendiert-Zustand des Geräts eingeleitet werden. Entgegen der sonst angewende-
ten Praxis wird in der Beispielsoftware dieses Ereignis nicht mit einem Interrupt
detektiert, sondern dieses Bit wird in der Hauptprogrammschleife regelmäßig abge-
fragt (polling).
STALLIF
Wenn dieses Bit 1 wird, hat die Serial Interface Engine des Geräts einen STALL-
Handshake mit dem Host abgewickelt. Dieser Interrupt muss unbedingt bearbeitet
werden, wie in Abschnitt 5.8 noch gezeigt wird.
SOFIF
Immer wenn ein neuer Frame beginnt, erscheint mit diesem Flag eine Meldung. Im
Beispielgerät wird diese Information nicht ausgewertet.
5.3.2 Besonderheiten bei Interrupts
Die Angelegenheit wird noch komplizierter, als sie bereits ist, weil das Derivat
PIC18F4550 über einige tückische Eigenheiten verfügt, die dem Entwickler Umsicht
abverlangen. Wenn man irgendeinen Interrupt aktiviert hat, darf man nicht den
Befehl MOVFF verwenden, um irgendein Interrupt Control Register zu modifizie-
ren [DataSheet: 9.0]. Die Methode des fast interrupt saving mithilfe des Befehls
RETFIE FAST darf nicht angewendet werden, wenn sowohl high als auch low prio-
rity Interrupts aktiviert sind [DataSheet: 10.3.1.6, A3Errata: 4]. Wenn man sich
nicht an die Einschränkungen hält, sind in beiden Fällen die Folgen unabsehbar.
Für den letztgenannten Fall bedeutet das, dass innerhalb der Interrupt Service Rou-
tine des high priority interupts die Registerinhalte von WREG, STATUS und BSR
nicht über den fast return stack gerettet werden können, sondern zu Beginn der
Interrupt Service Routine zwischengespeichert und beim Verlassen wiederherge-
stellt werden müssen. Da im normalen Stack lediglich die Rücksprungadresse in das
vom Interrupt unterbrochene Programmsegment abgelegt wird, muss der Entwick-
ler penibel darauf achten, dass er den Inhalt aller Register, die in der Interrupt Ser-
vice Routine verwendet werden, zwischenspeichert, um sie wiederherstellen zu kön-
nen. Für die low priority interrupts reichen die bereits genannten drei Register.
; Low priority interrupt routine
LowInt
movff STATUS,STATUS_LOW
;save STATUS register
movff WREG,WREG_LOW
;save working register
movff BSR,BSR_LOW
;save BSR register
Search WWH ::




Custom Search