Sida 1 av 2
Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 11:01:42
av manw

Problemet är löst, kod finns längre ner i tråden
Sitter och skall försöka få igång interruptdriven läsning av USART i ATtiny2313 och avr-gcc. Inget konstigt i sig (och har gjort detta tidigare på exempelvis PIC16F628 utan problem). Alltså att processorn får ett interrupt när Rx buffern mottagit ett komplett tecken. Försöker göra en interruptrutin enligt:
Kod: Markera allt
SIGNAL (SIG_USART_RECV)
{
// Read input buffer
TransmitByte (ReceiveByte () + 1); // Echo the received character + 1.
}
Har fungerat bra när det gäller externa interrupt/pinnar, men nu får jag hela tiden svaret att jag "stavat fel" på signalnamnet, vid kompileringen. Har kollat/provat olika namn från såväl headerfilerna till kompilatorn, som från avr-gcc manualen och internet, men inget har fungerat.
Själva USARTen i sig fungerar om man använder pollning, men det är ju fel sätt annars... Det här borde vara såpass vanligt att många gjort det tidigare och kanske kan hjäla mig att "stava rätt".
-Datorn fattar inte vad jag menar! ...lite av den nivån är det på denna fråga tyvärr
(kanske finns detta någonstans redan på forumet, men jag lyckas aldrig med någon någotsånär avancerad sökning)
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 11:48:16
av Androiders
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 12:02:37
av manw
Har testad den varianten tidigare, testade igen (med includefiler å allt), men kompilatorn tyckte ändå inte om det

Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 12:31:57
av Androiders
klistra in kod och kompilator output så kan vi kika

Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 12:57:19
av manw
Kod: Markera allt
#include <avr/io.h>
#include <avr/interrupt.h>
/* Prototypes */
void InitUART (unsigned char baudrate);
unsigned char ReceiveByte (void);
void TransmitByte (unsigned char data);
void delay(int msek);
ISR(USART_RXC_vect) // <= Det är detta som skiter sig!
{
// Read input buffer
TransmitByte (ReceiveByte () + 1); // Echo the received character + 1.
}
// This function enabled interrupt.
void int1_init()
{
cli(); /*Disable interrupt*/
sei(); /*Enable interrupt*/
}
/* Main - simple program that recieves a character then
transmits back the next character. An example would be if you send in an A, the chip will return a B */
int main (void){
DDRB = 0xFF; //Sätt till utgång.
PORTB = 0x55; //Alla port B 0-or.
//unsigned char i;
InitUART (207); /* Set the baudrate to 2400 bps using a 8MHz */
int1_init();
while (1)
{
// Just do something...
delay(100);
PORTB |= (1 << PB0);
delay(100);
PORTB &= ~(1 << PB0 );
}
}
/* Initialize UART */
void InitUART (unsigned char baudrate){
/* Set the baud rate */
UBRRL = baudrate;
/* Enable UART receiver and transmitter */
UCSRB = (1 << RXEN) | (1 << TXEN);
/* 8 data bits, 1 stop bit */
UCSRC = (1 << UCSZ1) | (1 << UCSZ0);
}
/* Read and write functions */
unsigned char ReceiveByte (void){
/* Wait for incomming data */
while (!(UCSRA & (1 << RXC)));
/* Return the data */
return UDR;
}
void TransmitByte (unsigned char data){
/* Wait for empty transmit buffer */
while (!(UCSRA & (1 << UDRE)));
/* Start transmittion */
UDR = data;
}
Build:
*../SerialTest.c:13: warning: 'USART_RXC_vect' appears to be a misspelled signal handler
- AVR Studio 4.14
- WinAVR-20080610
- ATtiny2313
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:01:44
av vfr
Nu är det ju iofs en varning du får och inget fel. Men frågan är fortfarande varför och på vilket sätt den tycker att den kanske är fel. Finns just den symbolen definierad någonstans och hur isåfall?
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:13:50
av manw
Har ju testat olika varianter som sagt, men inte heller "UART_RX_vect" som jag hittar i filen "io2313.h" som jag tolkar det inkluderas via "io.h". Provade också att direkt inkludera "io2313.h" i min huvudfil, men det skulle man inte göra tydligen.
EDIT: Nu rullade kompileringen igenom, när jag kompilerade en gång till

skall kolla på målsystemet...
EDIT2: och nu gjorde det inte... något skumt är det

Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:18:52
av speakman
Hur exekveras kompilatorn? Kommer -mmcu=attiny2313 med?
Klistra in hela förfarandet inkl. anropet till kompilatorn så är det lättare att spåna.
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:22:02
av manw
Nu fungerade koden på målsystemet till och med, kompilatorn larmar... ibland... skumt

Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:30:03
av manw
speakman skrev:Hur exekveras kompilatorn? Kommer -mmcu=attiny2313 med?
Klistra in hela förfarandet inkl. anropet till kompilatorn så är det lättare att spåna.
Skall jag vara riktigt ärlig så vet jag inte var man kan se exakt den sträng som skickas från AVR Studio till kompilatorn. Det finns ju en "Project Options" bild där man kan välja kompilator, kompilatorflaggor, och device (attiny2313).
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:30:55
av SvenW
Kollade i headerfilen iotn2313.h
ISR(USART_RXC_vect) finns inte där, men väl
#define USART_RX_vect _VECTOR(7)
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:33:19
av speakman
Från samma ställe där du såg felmeddelandet bör du se när kompilatorn anropas, högst upp. Kollade just på våran installation och där såg man hela kommandoraden. Möjligen hamnar felmeddelanden i en egen flik eller nått, men du bör kunna hitta igen den.
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:37:57
av cykze
Det ska inte vara
USART_RXC_vect
eller
UART_RX_vect
Utan:
USART_RX_vect
Det är iotn2313.h du ska kolla i, inte io2313.h.
edit: lite sen
Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:39:15
av manw
Jupp, på raden under
Kod: Markera allt
avr-gcc.exe -mmcu=attiny2313 -Wl,-Map=SerialTest.map SerialTest.o delay.o -o SerialTest.elf
... så mycket text så jag glömmer att titta vad som står, förutom raden med den gula pluppen

Re: Interruptdriven läsning av USART ATtiny2313 med avr-gcc?
Postat: 21 januari 2009, 13:42:03
av manw
Det ser ut som DEN grejen funkar nu, TACK allihop
