Printf über uART 128 Resettet

Gast #411260
Lesenswert?

Habe ein eigenartiges Problem bei meinen 128 iger.

wenn ich mit printf("hallo");
an die Uart sende stürt er beim zweiten senden ab resettet sich.

in der main am anfang mache ich folgendes

fdevopen (uart_putchar, NULL);
int baud;
baud=cpuclock/((4800*16L)-1);
cli();
init_rs232(baud);
sei();
printf("test1");


dann initialisiere ich meine zwei UARTS.

void init_rs232(unsigned int baud)
{
UBRR1H= (unsigned char)(baud>>8);
UBRR1L = (unsigned char) baud;


UCSR1B= ((1<<RXCIE)|(1<<RXEN) | (1<<TXEN));
CSR0C = ((0<<UMSEL) |(0<<UPM1) |(0<<UPM0)
|(0<<USBS)|(1<<UCSZ1)|  (1<<UCSZ0));

}

int uart_putchar (char c)
{
        //Warten solange bis Zeichen gesendet wurde
  loop_until_bit_is_set(UCSR1A, UDRE);
  UDR1 = c;
  return (0);
}


Das test 1 wird übertragen aber alles danach stürtz mir der 128 iger
ab.

Habe ich einen fehler drin???
Gast #411264
Lesenswert?

Ja habe ich

SIGNAL(SIG_UART1_RECV)
{
pcbuffer = UDR1;
if(pcgoflag==1)
{
if(pcbuffer!=13)
{
frompc[pt]=pcbuffer;
pt++;
}
else
{
frompc[pt]='\0';
pt=0;
auswerten_pckommando(&frompc[0]);
}
}
}

Ich habe es jetzt anders gemacht

so

void send_UART(char *s)
{
 while (*s)
    {   /* so lange *s != '\0' also ungleich dem
"String-Endezeichen" */
      loop_until_bit_is_set(UCSR1A, UDRE);
 UDR1=(*s);
        s++;
    }


}

so gehts auf jeden fall prima.

Danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren