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