Forum: Compiler & IDEs UART interrupt AT90CAN128


von Florian M. (skywalker79)


Lesenswert?

Hallo,

ich habe ein Problem damit, bei einem AT90CAN128 die UART Kommunikation 
mit Interrupts zum laufen zu bekommen.
Die Fuse-Bit Falle mit dem 1/8-Teiler habe ich schon beseitigt und das 
normale Versenden von Zeichen über die Schnittstelle klappt.
Nur das Empfangen, bzw. Ausführen der ISR funktioniert nicht.

Der Quellcode zeigt die Initialisierung der UART-Schnittstelle:
1
/*************************************************************/
2
/* void USART0_INIT(unsigned int baud)                       */
3
/*                                                           */
4
/* Initialisiert die UART0-Schnittstelle                     */
5
/*************************************************************/
6
7
void USART0_INIT(unsigned int baud)
8
{
9
  UBRR0H = (unsigned char) (baud>>8);
10
  UBRR0L = (unsigned char) baud;
11
  UCSR0C = (0<<UMSEL0) | (0<<UPM0) | (1<<USBS0) | (3<<UCSZ0);
12
  UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
13
}
14
15
/*************************************************************/
16
/* uint8_t USART0_Receive(void)                              */
17
/*                                                           */
18
/* Empfängt die Daten von der UART0-Schnittstelle            */
19
/*************************************************************/
20
21
uint8_t USART0_Receive(void)  
22
{
23
  while ( !(UCSR0A & (1<<RXC0)) );
24
  return UDR0;
25
}

hier die ISR aus der main.c:
1
/*************************************************************/
2
/* SIGNAL( SIG_UART_RECV )                                   */
3
/*                                                           */
4
/* Löst Interrupt aus, wenn Zeichen empfangen wird           */
5
/*************************************************************/
6
7
ISR(USART0_RX_vect) 
8
{ 
9
  uart_puts("Test" CR);
10
}

Kann mir einer sagen, wo der Fehler liegt?

mit freundlichen Grüßen

von Timmo H. (masterfx)


Lesenswert?

Ist es nicht so, dass man erst das UDR0 auslesen muss bevor man wieder 
was schicken kann?

von Florian M. (skywalker79)


Lesenswert?

Hallo,

so ich habe den Fehler gefunden. Ich habe mir durch den 
Programmieradapter ein Eigentor geschossen.
Dadurch das dieser bei den Versuchen immer angeschlossen war, habe ich 
mir den Pegel vom RxD Signal verfälscht.

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
Noch kein Account? Hier anmelden.