Hallo zusammen,
ich bin dabei mir eine Seriell to SPI Platine zu basteln. Leider habe
ich schon Probleme beim empfangen der seriellen Daten über die
Schnittstelle des STK500.
Hier erst mal der Code:
1 | #include <stdlib.h>
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | #define FOSC 8000000//14745600 //Clock Speed
|
6 | #define BAUD 9600
|
7 | #define UBRR ((FOSC / (BAUD * 16L)) - 1)
|
8 |
|
9 | volatile unsigned char data;
|
10 |
|
11 |
|
12 | int main(void)
|
13 | {
|
14 | /* PD1 als Ausgang */
|
15 | DDRD = 0x02;
|
16 |
|
17 | /* Aktivieren des Empfängers und des Daten leer-Interrupts */
|
18 | UCSR0B = (1<<RXCIE0) | (1<<RXEN0);
|
19 |
|
20 | /* baud rate*/
|
21 | UBRR0H = (unsigned char) (UBRR>>8);
|
22 | UBRR0L = (unsigned char) UBRR;
|
23 |
|
24 | /* frame format: 8data, 1stop bit*/
|
25 | UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
|
26 |
|
27 | sei();
|
28 |
|
29 |
|
30 | while(1)
|
31 | {
|
32 | ;
|
33 | }
|
34 |
|
35 | }
|
36 |
|
37 |
|
38 | ISR(USART_RX_vect)
|
39 | {
|
40 | data = UDR0;
|
41 | }
|
Es werden einfach keine Daten empfangen. Die Hardware und die
Verbindungen sind in Ordnung, habe sie gerade mit einer anderen UART
Software getestet. Was merkwürdig ist, wenn ich das TXEN0 und das UDRIE0
Bit im UCSR0B Register setze und den UDRE Interrupt wie folgt in das
obige Programm einsetze, funktioniert auch der Datenempfang.
1 | ISR(USART_UDRE_vect)
|
2 | {
|
3 | UDR0 = 'h';
|
4 | }
|
Kann mir jemand sagen warum das so ist?