ATmega, RXC interrupt
Fuzesi Arnold
arno at externet.hu
Sun Dec 26 23:19:35 CET 2004
-Mert frame/overrun hiba van?
-Atmega32-re akarsz biztos forditani?
-baudrate jo?
AVR-re hirtelen nem emlekszem, de PIC kezeletlen overrun eseten tuti
'"lefagyott".
(Hiba miatt nem torolte a receive flag-et amiatt allando IT-ben maradt.
Lekezeled a hibakat rendesen? (Probald meg, hatha)
En ezt hasznalom IAR alatt , muxik rendesen.
#ifdef DEBUG
//UART init
UBRRH=0;
UBRRL=12; //9600baud at 1MHz
UCSRA=0x02; //Double speed
// UCSRB=0xD8; //RXC, TXC int. enable ;Rx,Tx enable
// UCSRB=0xD0; //RXC, TXC int. enable ;Rx enable
UCSRB=0x48; //TXC int. enable ;Tx enable
// UCSRB=0xD8; //RXC, TXC int. enable ;Rx,Tx enable
UCSRC=0x80|0x06;//UCSRC gány+8 bit
#endif
#ifdef DEBUG
__interrupt void USART_RXC_handler(void)
{
uchar temp;
if(UCSRA_Bit4) //framing error
{
while(UCSRA_Bit7) temp=UDR;
return;
}
if(UCSRA_Bit3) //overrun error
{
while(UCSRA_Bit7) temp=UDR;
return;
}
temp=UDR;
comm_ibyte0=temp;
comm_newbyte0=1;
}
#endif
Arnold
----- Original Message -----
From: "Beregnyei Balazs" <bereg at impulzus.sch.bme.hu>
To: <elektro at tesla.hu>
Sent: Saturday, December 25, 2004 2:33 PM
Subject: ATmega, RXC interrupt
> 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
>
> -----------------------------------
> Szponzorunk: http://tonerbolt.hu/
More information about the Elektro
mailing list