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?
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
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.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
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.