Hallo, ich hab eine kleine Anwendung mit einem UART am ATMega16 gemacht. Leider springt er beim SIG_UART_RECV-Interrupt nicht in die entsprechende ISR. Kann mir jemand sagen was an meinem Code falsch ist? #include <avr/io.h> #include <inttypes.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <delayms.c> #ifndef F_CPU #define F_CPU 16000000 /* Oszillator-Frequenz in Hz */ #endif #define UART_BAUD_RATE 9600 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU)/((UART_BAUD_RATE)*16L)-1) //globals volatile uint8_t command[4]; volatile uint8_t sreg_temp; volatile uint8_t bytecountSen; SIGNAL(SIG_UART_TRANS) //ISR for transmitting via serial Interface { if (bytecountSen==3) //bytes 0 bis 2 sind gesendet, also die 3 byte des Befehls bytecountSen==0; else { //while (!(UCSRA & (1<<UDRE))); //warten bis Senden moeglich UDR = command[bytecountSen]; //der hier erzeugte Interrupt zird getsartet nachdem bytecountSen++; //dies ISR abgearbeitet ist. } } SIGNAL(SIG_UART_RECV) //§§§ Hier springt derATMega leider nicht hinein wenn ich ein Zeichen //schick (via Br@y++ Terminal) { uint8_t data; PORTC = 0xFF; data = UDR; switch (data) { case 'a': {ToggleBit(PORTC,PC0); break;} case 'b': {ToggleBit(PORTC,PC1); break;} case 'c': {ToggleBit(PORTC,PC2); break;} case 'd': {ToggleBit(PORTC,PC3); break;} default : {PORTC = 0x00;} } } int main(void) { //uint8_t i; //Initialization UART UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8); UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU); UCSRB |= (1<<RXEN) | (1<<TXEN); //enable RxD & TxD UCSRB |= (1<<RXCIE) | (1<<TXCIE); //enable interrupts //command generation command[0] = 0xff; command[1] = 0x01; command[2] = 0x34; command[3] = 0x00; sei(); DDRC = 0xFF; //PortC = Ausgang PORTC = 0x00; //PortC = alles auf Null (LEDs leuchten nicht) //main loop for(;;) { ommand[2] = 0x32; //50 bytecountSen = 1; UDR = command[0]; delayms(300); command[2] = 0x7F; //127 bytecountSen = 1; UDR = command[0]; delayms(300); } } danke fuer hinweise!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.