Hallo, ich habe zwar schon ein paar USART-Schnittstellen auf nem AVR programmiert, jedoch funzt mein Receive-Interrupt diesmal nicht, also der Interrupt wird nicht aufgerufen. Hier mal der relevante Code:
1 | #define UBRR_19k2 129 //für Baudrate 19,231k
|
2 | |
3 | int main(void) |
4 | {
|
5 | [...]
|
6 | USART1_init(UBRR_19k2); //USART1 intialisieren |
7 | PORTD &= ~(1<<PD7); |
8 | sei(); |
9 | [...]
|
10 | }
|
11 | |
12 | void USART1_init(unsigned int ubrr1) |
13 | {
|
14 | UBRR1H = (unsigned char) (ubrr1>>8); |
15 | UBRR1L = (unsigned char) ubrr1; |
16 | |
17 | UCSR1C = (1<<UCSZ11) | (1<<UCSZ10); //frame format: 8data, 1stop bit, asynchronous USART, No parity |
18 | UCSR1B = (RXCIE1) | (1<<TXEN1) | (1<<RXEN1); //Enable receiver & transmitter and receiver interrupt |
19 | UCSR1A = (1<<U2X1); //Double speed mode |
20 | }
|
21 | |
22 | |
23 | ISR(USART1_RX_vect) |
24 | {
|
25 | static unsigned char uc_zaehler_RXD_Bytes = 0; |
26 | |
27 | PORTD |= (1<<PD7); |
28 | |
29 | uc_Receive_RX1[uc_zaehler_RXD_Bytes] = UDR1; |
30 | |
31 | if (uc_Receive_RX1[uc_zaehler_RXD_Bytes] == 0x0D) //Ende der Übertragung |
32 | {
|
33 | uc_zaehler_RXD_Bytes = 0; |
34 | f120_Flag.O2_Sensorkommunikation_komplett = 1; |
35 | }
|
36 | else
|
37 | uc_zaehler_RXD_Bytes++; |
38 | }
|
PD7 geht nicht auf high, weswegen ich annheme, dass der Interrupt nicht aufgerufen wird. Ich benutze nen ATmega1284P mit 20MHz