Hy zusammen,
Ich versuche gerade den "UART mit Interrupt" vom ATMega32M1 zu laufen zu
bekommen,
Aber ich bekomme da nur murks raus. Hterm zeigt nur \0\0\0 usw.
Das einzige was mir aufgefallen ist wenn ich ein 0x55 sende, gekomme ich
auf dem Terminal \0\0\0\0\0
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 | #define F_CPU 8000000UL
|
5 | #define BAUD 9600
|
6 |
|
7 |
|
8 | ISR(LIN_TC_vect){
|
9 |
|
10 | DATA_INT_RX = LINDAT ;
|
11 | }
|
12 |
|
13 |
|
14 | /************************************************************************/
|
15 | /* UART-Init */
|
16 | /************************************************************************/
|
17 |
|
18 | void UART_Init( void)
|
19 | {
|
20 | //LIN/UART / Enable || Full Duplex
|
21 | LINCR |= ((1<<LENA)|(1<<LCMD2)|(1<<LCMD1)|(1<<LCMD0));
|
22 |
|
23 | LINBTR |=((1<<LBT5));//Default(32)
|
24 | LINBRRH = ((F_CPU/(LINBTR*BAUD))-1)>>8;
|
25 | LINBRRL = ((F_CPU/(LINBTR*BAUD))-1);
|
26 |
|
27 | //Enable TX & RX
|
28 | LINSIR |= ((1<<LTXOK)|(1<<LRXOK));
|
29 |
|
30 | //Enable RX interrupt
|
31 | LINENIR |= ((1<<LENRXOK));
|
32 | }
|
33 |
|
34 |
|
35 | /************************************************************************/
|
36 | /* UART - Transmit Funktion */
|
37 | /************************************************************************/
|
38 |
|
39 | int uart_transmit (char byte_data) {
|
40 |
|
41 | while((LINSIR & (1 << LBUSY)));
|
42 | LINDAT = byte_data;
|
43 | return 0;
|
44 | }
|
45 |
|
46 |
|
47 | /************************************************************************/
|
48 | /* UART - Receive Funktion */
|
49 | /************************************************************************/
|
50 |
|
51 | char uart_receive(void) {
|
52 |
|
53 | while((LINSIR & (1 << LBUSY)));// Wait while the UART is busy.
|
54 | return DATA_INT_RX;
|
55 | }
|
56 |
|
57 |
|
58 | int main(void)
|
59 | {
|
60 | unsigned char DATA = 0x55;
|
61 |
|
62 | DDRC |= (1<<PC7);
|
63 | PORTC |= (1<<PC7);
|
64 |
|
65 | UART_Init();
|
66 |
|
67 | sei();
|
68 | uart_transmit('T');
|
69 | uart_transmit('E');
|
70 | uart_transmit('S');
|
71 | uart_transmit('T');
|
72 |
|
73 | while(1)
|
74 | {
|
75 | DATA = uart_receive();
|
76 | uart_transmit(DATA);
|
77 | }
|
78 | return 0;
|
79 | }
|
Hoffe Ihr könnt mir da weiter Helfen.
mfg
Rolf