UART empfaengt nix

Gast #269286
Lesenswert?
• ▲
▼
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.