PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Interrupt´s beim AT90S2313 verursachen Probleme



Lorenz
10.08.2006, 16:07
Hallo,

habe da ein kleines Problem:
Ich habe ein Programm für den ATmel AT90S2313 in Bascom geschrieben. In dem Programm werden sowohl Timer0 Interrupts als auch die externen Interrupts INT0 und INT1 benutzt. Das Problem ist nun, dass die externen Interrupts wunderbar funktionieren aber der Timer0 Interrupt nicht anspricht, sprich nicht ausgeführt wird. Deaktiviere ich die Interrupts INT0 und INT1, dann funktioniert der Timer0 Interrupt wie gewünscht. Aber alle zusammen klappen leider irgendwie nicht!

Villeicht kann mir jemand von Euch einen Tipp geben? Villeicht stelle ich mich auch nur zu dumm an? Hier mal die entsprechenden Codeschnipsel:



$regfile = "2313def.dat"
$crystal = 1000000

Ddrb = &B11111111 'Ports Definieren alle Ausgang
Ddrd = &B11110011 'PinD.2 und Pind.3 Eingang sonst Ausgang

Portb = &B00000000 'Ausgänge Low setzen
Portd = &B00000000

Sreg.7 = 1 'Interrupts Global freigeben

Tccr0 = &B00000101 'Timer0 = Systemtakt / 1024
Timsk = &B00000010 'Timer0 Overflow Interrupt einschalten

Gimsk = &B11000000 'Interrupt INT0 und INT1 einschalten
Mcucr = &B00000101 'Interrupt INT0 und INT1 bei fallender oder steigender Flanke


On Timer0 Int_blinken 'Interrupt Routinen Deklarieren
On Int0 Int_vorwaerts
On Int1 Int_rueckwaerts


Do 'Hauptprogramm
Loop


Int_blinken: 'Timer0 Overflow Interrupt Routine
Toggle Portb.0
Return


Int_vorwaerts: 'Interrupt0 Routine
Toggle Portb.1
Return


Int_rueckwaerts: 'Interrupt1 Routine
Toggle Portb.2
Return

-tomas-
10.08.2006, 18:16
Hast Du den HWSTACK erhöht??

An interrupt needs 32 bytes!!!!!!

Lorenz
10.08.2006, 20:02
Vielen Dank Thomas für deinen Tipp!
Habe den HWStack vorsichtshalber mal auf 64 bytes erhöht und siehe da es funktioniert nun super!
Danke noch mal, an so was habe ich als relativer neuling nicht gedacht...:-)

Lorenz

-tomas-
12.08.2006, 14:48
Nun ja, dass es mit 64Byte HWSTACK läuft hast Du nur der Tatsache zu verdanken, dass in den 3 ISR vor dem RETI kein SEI steht...
Also immer schön aufpassen.