PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ISR-Problem!



taylor22
26.06.2007, 22:22
hallo! kann mir vielleicht jemand weiterhelfen mit folgendem problem: sobald ich eine Taste auf der Tastatur drücke, sollte eigentlich die statusLED rot leuchten, tut sie aber nicht! was ist falsch oder was fehlt?!


#include <avr/io.h>
#include <avr/interrupt.h>

void Init(void);

ISR(USART_RXC_vect){
StatusLED(RED); // diese Funktion funktioniert ansonsten einwandfrei! wenn sie denn einmal aufgerufen würde....
UCSRA&=~(1<<RXC);
}

// Hauptprogramm
int main(void) {
Init();
StatusLED(GREEN);
UCSRB|=(1<<RXCIE);
UCSRB |= 0x10; // enable receiver
while(1);
return 0;
}

void Init (void)
{
// prepare RS232
UCSRA = 0x00;
UCSRB = 0x00;
UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
UBRRL = 0xCF; // 2400bps @ 8.00MHz
sei();
}

taylor22
27.06.2007, 16:33
hey guys! kommt schon lasst mich bitte nicht im Stich!!

maexlich
30.06.2007, 08:03
Heißt das einmal funktionierts dan nicht mehr?

Bei manchen ISR steht im datenblatt das man sie durch das schreiben einer 1 in das entsprechende Register "zurücksetzen" muss

konte aber eigendlich nichts falsches erkennen bin abber auch nicht der beste was Register angeht 8-[

MFG
maexlich

uwegw
30.06.2007, 10:49
Funktioniert denn das UART, wenn du es pollst?

taylor22
30.06.2007, 13:58
das USART funktioniert sonst einwandfrei!!!! das problem liegt vielmehr darin dass der Interrupt aus irgendeinem Grund nie ausgelöst wird! keine Ahnung wieso!!!!

fluchtpunkt
30.06.2007, 22:12
ISR(USART_RXC_vect){
StatusLED(RED); // diese Funktion funktioniert ansonsten einwandfrei! wenn sie denn einmal aufgerufen würde....
UCSRA&=~(1<<RXC);
}

[quote=Datenblatt Mega32]When interrupt-driven data reception is used, the
receive complete routine must read the received data from UDR in order to clear the RXC Flag
aender das mal testweise. RXC ist naemlich read only.

und schieb das sei(); mal direkt vor das while


vielleicht aendert das was.

taylor22
02.07.2007, 10:16
hab das jetzt mal ausprobiert, doch es funktioniert immer nocht nicht! übrigens: im avr studio funktioniert das UCSRA&=~(1<<RXC); !!!
bin um jeden weiteren Typ froh!!!

Pascal
02.07.2007, 17:54
Gibts bei dir denn das define USART_RXC_vect? Bei meinem WinAVR gibts das nicht, kann aber auch eine ältere Version sein.
Bist du dir sicher, dass die Verkabelung in Ordnung ist und du auch wirklich Zeichen vom PC aus sendest?

izaseba
02.07.2007, 18:14
Hallo,
Du solltest auch den empfangenen Byte aus dem UDR holen,
mach mal uint8_t a = UDR; in Deiner ISR rein auch wenn Du den Wert nicht brauchst.

Gruß Sebastian

taylor22
03.07.2007, 15:04
jungs, danke! hat sich jetzt erledigt und funktioniert endlich :-)