ATmega, RXC interrupt

Beregnyei Balazs bereg at impulzus.sch.bme.hu
Sat Dec 25 23:33:36 CET 2004


Sziasztok,

Miert "fagy le" az AVR egyetlen byte fogadasatol is, ha be van kapcsolva az RXC 
interrupt? Az interrupt rutinban semmi mast nem csinalok, csak kiolvasom az 
UDR-t. ATmega32-n es 128-on is probaltam. A TXC interrupt (es altalaban semmi 
mas) nem csinal ilyet, ertetlenul allok a jelenseg elott... Gcc-vel forditok, 
es igy nez ki egy minimalis kod:

#define __AVR_ATmega32__
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/io.h>

unsigned char c;

INTERRUPT(SIG_UART_RECV)
{
     c = UDR;
}

int main()
{
     unsigned int i;

     sei();
     UBRRH = 0; UBRRL = 103;     // 9600 baud
     UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); // | (1 << TXCIE);
     UCSRC = (1<<URSEL) | (1 << USBS) | (3 << UCSZ0);

     DDRD = 0x80;		// LED

     while(1)
     {
         PORTD = 0x80;		// villogtat
         for (i=0; i<65500; i++);
         PORTD = 0;
         for (i=0; i<65500; i++);
     }
}

A fenti program addig villogtatja a LED-et, amig soros porton nem kuldok 
egy akarmilyen karaktert: ekkor leall a villogas.
Az interrupt rutin meg sem hivodik (LED-del tesztelve).
A folyamatos reset lehetosege is kizarva.
Igy forditom le:  avr-gcc -Wall -O1 -mmcu=atmega32 *.c

Kaptam egy ASM forrast, ami teljesen ugyanezt csinalja, es az jol mukodik,
nem all le a LED villogasa. Hiaba nezem a Gcc altal generalt ASM fajlt, 
nem latom a kulonbseget, ami miatt fagy...

Elore is kosz a tippeket, udv,

BB




More information about the Elektro mailing list