Zitat von
Elko:
Code:
static void T1_isr (void) interrupt 3
Eine Interrupt Service Routine ist eine statische (static) Routine, die keinen Rückgabewert hat (void), und einem bestimmten logischen Interrupt zugeordnet ist (interrupt 3). Die Nummer entspricht in der Regel einem Index auf eine Tabelle von Interruptvektoren (Funktionsadressen an die bei Auftreten eines Interrupts gesprungen wird), je nach Architektur gibts da unterschiedliche Tabellen, manche trennen Software- und Hardware-Interrupts (Software-Interrupts werden durch bestimmte Prozessoranweisungen ausgelöst, Hardware-Interrupts durch entsprechende Ereignisse innerhalb des Prozessors oder Signale von aussen an bestimmten Pins), aber ansonsten gibts da nicht viel zu berichten. Die Besonderheiten werden hier vom C-Compiler erledigt der durch das Schlüsselwort "interrupt" halt weiss, dass das keine normale Routine ist.
Wichtig ist halt normalerweise:
Eine ISR darf keine Register verändern (ausser wenn das explizit gewünscht wird, siehe Interrupts in DOS), wenn die Hardware also nicht selber die Register sichert, muss der Programmierer sich darum kümmern. In der Regel werden dazu alle relevanten Registerinhalte einfach auf den Stack gepackt und am Ende der ISR wieder zurückgeholt. Alternative Konzepte verwenden eine Art Bankswitching um Register zwischen "Normal" und "Interrupt" zu trennen.
Der Rest ist eigentlich relativ trivial, je nach Plattform muss man nur wissen welche Interrupts wie benutzbar sind und ggf. noch auf die Prioritäten schauen (manche Architekturen erlauben Interrupts mit unterschiedlicher Priorität, ein Interrupt einer bestimmten Priorität kann dann nur von Interrupts höherer Priorität unterbrochen werden).
Zitat von
Elko:
Code:
{ TL1 = 0xC0; // L-Register laden insgesamt: 0xF831
TH1 = 0x07; // H-Register laden
// ... Quelltext
}
Und das ist nun nichts spezifisches für eine ISR, da wird irgendein 16-Bit-Register mit zwei 8-Bit-Werten gefüllt. Ist das zufällig etwas für Atmel?
Zitat von
Elko:
PS: Das ist eine Timer-ISR, wenn ich mich nicht täusche
Das kann so gut wie alles mögliche sein, was es nun wirklich ist, ergibt sich erst aus der Kombination von Hardwaredokumentation (Prozessorhandbuch) und komplettem Source