Vermutlich daran, dass du eine UART-Lib verwendest, die mit einem Puffer und Interrupt gesteuertem Senden arbeitet (Fleury?).Zitat von Kampi
Hallo Forum,
ich will gerade die Interrupts von meinem AT90USBKey verwenden und habe mir Testweise ein Programm geschrieben, was mir eine Meldung ausgibt wenn ein Interrupt aktiviert wurde.
Im Moment löse ich die Interrupts über den verbauten Joystick aus, aber nach einer bestimmten Anzahl an Interrupts reagiert der Mikrocontroller nicht mehr. Die Anzahl ist dabei aber immer Unterschiedlich...
Weiß jemand woran das liegen kann?
Mein Code ist folgender;
Danke für die Hilfe!Code:/* * Interrupt.c * * Created: 20.02.2014 07:15:06 * Author: Daniel.KAmpert */ #include <stdlib.h> #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "uart.h" void Setup(void); ISR(INT4_vect) { uart_puts("INT4 Interrupt!\n\r"); } ISR(INT5_vect) { uart_puts("INT5 Interrupt!\n\r"); } int main() { Setup(); for (;;) { } } void Setup(void) { // UART initialisieren uart_init(UART_BAUD_SELECT(57600, 8000000)); // IO als Ausgang einstellen DDRE &= (0<<DDE4) & (0<<DDE5); // Pull-up Widerstände einschalten PORTE |= (1<<PE4) | (1<<PE5); // Interrupt bei fallender Flanke EICRB = (1<<ISC41) | (0<<ISC40) | (1<<ISC41) | (0<<ISC40); // Interrupts aktivieren EIMSK = (1<<INT4) | (1<<INT5); // Globale Interrupts freigeben sei(); }
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Vermutlich daran, dass du eine UART-Lib verwendest, die mit einem Puffer und Interrupt gesteuertem Senden arbeitet (Fleury?).Zitat von Kampi
MfG
Stefan
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Was passiert, wenn im Puffer nicht mehr genug Platz für den zu sendenden String ist? Dann wartet die Lib bis wieder Platz ist. Da du aber aus einem Interrupt heraus sendest, sind Interrupts zu diesem Zeitpunkt deaktiviert.
Keine Interrupts -> kein Senden aus dem Puffer -> kein Platz im Puffer wird frei -> Warten für immer
MfG
Stefan
Hey,
mmh super. Dann muss ich mir mal eine Lösung basteln...eventuell ohne Interrupt, weil das Senden sowieso nicht Zeitkritisch ist.
Hab es gestern dann auch mal mit einer LED verwenden. Da klappt es problemlos, von daher scheint das wirklich das Problem zu sein.
Vielen Dank für die Hilfe
Schaut ruhig mal auf meiner Homepage vorbei :
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Lesezeichen