Hallo allemaal,
Ik krijg de USART van een atmega88 niet werkend.
De compiler mekkert over de schrijfwijze van de ontvangst interrupt.

Dit is de code


void vInitUart(unsigned int uBrr){	          //atmega88
	UBRR0L = uBrr;
	UBRR0H = (uBrr >> 8);			//baudrate
	UCSR0C = _BV(UCSZ01) | _BV(UCSZ00);	// 8 data bits in a frame
	UCSR0B = _BV(TXEN0) | _BV(RXEN0) |_BV(RXCIE0);	
}


ISR(USART0_RX_vect){
	cText = UDR0;
	bGNewData = 1;
	ToggleTP();
}

In AVRstudio4 heb ik al de atmega88 en de atmega88p bij de configuratie ingegeven,
Het mag niet baten.

Wat doe ik fout?

Probeer het eens zonder die '0':


ISR(USART_RX_vect){
	cText = UDR0;
	bGNewData = 1;
	ToggleTP();
}

@pros; Bedankt dit is'm. Ik had al van alles geprobeerd.
Op naar de volgende...

Gaf de compiler geen foutmelding in de goede richting?

Jawel, een warning dat er een mismatch in de interrupt aanroep zat.
Alleen wat is dan de juiste benaming? Ik had al behoorlijk wat tijd gespendeerd met het zoeken van code op internet. Er worden meerdere benamingen gebruikt voor deze ISR. Voor de atmega88 kon ik hem niet vinden. Of ik las er overheen.

In de application note 094 over de migratie van mega8 naar mega88 kun je hem achteraf wel uit de vergelijkingstabel halen denk ik. Alleen staat het er niet expliciet bij dat de vector benaming ook zo letterlijk in de ISR aanroep terugkomt.

De correcte benamingen van registers, interrupt-vectors, enz. kan je terugvinden in de include-files.
Voor de ATmega88 is dat bij mij /usr/local/avr/include/avr/iomx8.h
Er is ook nog een iom88.h, maar daar staan enkel zaken in die specifiek zijn voor de '88 en dus verschillen van de '168 en de '328.

Ok, k'zal eens kijken of ik ze daar ook kan vinden.
Kan me in de toekomst heel wat zoekwerk schelen.
Bedankt.