ich habe einen atmega128 und will daten empfangen und senden.
hierzu nutze ich den USART0, leider wird weder der receive-interrupt
ausgelöst noch wird das RXC-bit auf 1 gesetzt.
hier mein code:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include "usart.h"
|
4 | int usart0_rec =0 ;
|
5 |
|
6 | void usart_init0(int baut0_H, int baut0_L) {
|
7 |
|
8 | UCSR0A = 0x00; /* USART operates at normal speed */
|
9 | UCSR0B = ( (1<<RXCIE) | (1<<RXEN)|(1<<TXEN)); /* Enable receiver */
|
10 | UCSR0C = ( (0<<UMSEL) | /* Configure for asynchronous operation */
|
11 | (0<<UPM1) | /* No parity */
|
12 | (0<<UPM0) |
|
13 | (0<<USBS) | /* 1 stopbit */
|
14 | (1<<UCSZ1) | /* 8 data bits */
|
15 | (1<<UCSZ0));
|
16 | UBRR0H=baut0_H;
|
17 | UBRR0L=baut0_L;
|
18 | }
|
19 |
|
20 | void usart_put0(int data0) {
|
21 | while (!(UCSR0A & 0x20));
|
22 | UDR0=data0;
|
23 | }
|
24 | int usart_get0(void){
|
25 | return usart0_rec;
|
26 | //return UDR0;
|
27 | }
|
28 | SIGNAL(USART0_RX_vect){
|
29 | usart0_rec=UDR0;
|
30 | }
|
der atmega läuft auf 16MHz und das senden funktioniert fehlerfrei.
hier noch die fuses:
Atmel AVR ATmega128 is found.
Fuse Low Byte = 0xe0
Fuse High Byte = 0x99
Fuse Extended Byte = 0xff
Calibration Byte = 0xc5 -- Read Only
Lock Bits = 0xff
BLB12 -> 1
BLB11 -> 1
BLB02 -> 1
BLB01 -> 1
LB2 -> 1
LB1 -> 1
ich hoffe das mir jemand helfen kann alle lösungen aus dem forum haben
mir nicht geholfen.