ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Masz problem? Zapytaj na forum elektroda.pl
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 12:22:35 +0100
Witam
Rozpoczynam moja przygode z AVR i mam problem z przerwaniami. Robie
ksiazkowo SIGNAL(SIG_OVERFLOW0) {...}, ustawiam tryb pracy timera, wlaczam
przerwania i przy pierwszym wywolaniu przerwania program idzie w krzaki.
SIGNAL(__vector_default) tez nie daje informacji, co dzieje sie z procesorem
i dlaczego przerwania nie dzialaja poprawnie. Wyglada na to, ze procek ma
niewlasciwy poczatkowy wekor przerwan. Probowalem ustawiac fusebity na rozne
sposoby i nic nie pomaga. Moze ktos mial podobny problem z ATMega16L ???
Pozdrawiam
Tomek
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 12:32:12 +0100
A dodałeś
#include <avr/signal.h>
#include <avr/interrupt.h>
?
Użytkownik "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl> napisał w wiadomości
news:cna3ot$hvo$1_at_nospam_nemesis.news.tpi.pl...
Witam
Rozpoczynam moja przygode z AVR i mam problem z przerwaniami. Robie
ksiazkowo SIGNAL(SIG_OVERFLOW0) {...}, ustawiam tryb pracy timera, wlaczam
przerwania i przy pierwszym wywolaniu przerwania program idzie w krzaki.
SIGNAL(__vector_default) tez nie daje informacji, co dzieje sie z
procesorem
i dlaczego przerwania nie dzialaja poprawnie. Wyglada na to, ze procek ma
niewlasciwy poczatkowy wekor przerwan. Probowalem ustawiac fusebity na
rozne
sposoby i nic nie pomaga. Moze ktos mial podobny problem z ATMega16L ???
Pozdrawiam
Tomek
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 12:37:40 +0100
A dodałeś
#include <avr/signal.h>
#include <avr/interrupt.h>
?
Tak
Program kompiluje sie bez ostrzezen. Jesli nie uzywam przerwan wszystko jest
OK. Deasemblowalem binarke i tez wydaje sie byc OK.
Podejrzewam, ze cos z fusebitami jest nie tak i przy wywolaniu przerwania
program skacze mi w zly obszar pamieci.
Nie mam doswiadczenia z AVR i pytam, bo moze szukam nie tam gdzie trzeba.
Pozdrawiam
Tomek
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 14:08:55 +0100
Podejrzewam, ze cos z fusebitami jest nie tak i przy wywolaniu przerwania
program skacze mi w zly obszar pamieci.
Jesteś pewien, że błąd występuje przy wywołaniu tego przerwania? A może po
restarcie skacze odrazu w zly obszar? Działo by sie tak przy zaprogramowanym
fusie Boot Reset, wtedy po restarcie program skacze pod adres Boot Loadera.
Być może masz też żle ustawione fusy zegara.
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 14:44:29 +0100
Jesteś pewien, że błąd występuje przy wywołaniu tego przerwania? A może po
restarcie skacze odrazu w zly obszar?
To jest mozliwe. Program inicjuje sie dobrze, bo USART dziala poprawnie.
Kombinowalem i z zaprogramowanym i niezaprogramowanym fusie BOOTRST i nie
dziala
Być może masz też żle ustawione fusy zegara.
A maja one znaczenie?? Procek dziala na kwarcu 7.316 MHz. Generator dziala
poprawnie, bo USART generuje wlasciwa transmisje.
Pozdrawiam
Tomek
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 15:12:19 +0100
No to sam już nie wiem. Jedyne co mi jeszcze przychodzi do głowy to może nie
ten procesor w makefilu.
Może podeślij trochę kodu do obejrzenia.
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 15:29:33 +0100
Może podeślij trochę kodu do obejrzenia.
Nie mam go teraz pod reka. Jesli dzis nie uruchomie przerwac, jutro rzuce
kodem
Pozdrawiam
Tomek
From: "Arek Karas" <arkkarREMOVE_at_nospam_2com.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Mon, 15 Nov 2004 20:47:22 +0100
Użytkownik "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl> napisał w wiadomości
news:cna4l6$nb9$1_at_nospam_nemesis.news.tpi.pl...
A dodałeś
#include <avr/signal.h>
#include <avr/interrupt.h>
?
Tak
Program kompiluje sie bez ostrzezen. Jesli nie uzywam przerwan wszystko
jest
OK. Deasemblowalem binarke i tez wydaje sie byc OK.
Podejrzewam, ze cos z fusebitami jest nie tak i przy wywolaniu przerwania
program skacze mi w zly obszar pamieci.
Nie mam doswiadczenia z AVR i pytam, bo moze szukam nie tam gdzie trzeba.
Moze to problem ze stosem ?
Jak duzo RAM-u wykorzystujesz ?
O ile mi wiadomo, avr-gcc umieszcza stos na koncu pamieci RAM procesora.
Jesli program uzywa duzo RAM-u to na stos pozostaje niewiele.
Pozdr
AK
From: Aeddin <aeddin_at_nospam_op.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 08:25:52 +0100
Dnia 2004-11-15 20:47, Arek Karas wrote:
Użytkownik "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl> napisał w
wiadomości news:cna4l6$nb9$1_at_nospam_nemesis.news.tpi.pl...
[ciach]
Moze to problem ze stosem ?
Jak duzo RAM-u wykorzystujesz ?
O ile mi wiadomo, avr-gcc umieszcza stos na koncu pamieci RAM procesora.
Jesli program uzywa duzo RAM-u to na stos pozostaje niewiele.
[ciach]
Sądzę że to faktycznie za mało miejsca na stos. U mnie występował ten
sam problem, ale po zadeklarowaniu stosu wszystko zaczeło działać.
W moim programie dla ATMega8515 (piszę w avrgcc) zrobiłem to tak:
SPH = RAMEND >> 8;
SPL = RAMEND & 0xff;
Pozdrawiam
--
Aeddin
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 11:56:52 +0100
/* Kod programu
Pomozcie w znalezieniu bledu. Moze cos jeszcze trzeba ustawic. Fusebit
BOOTRST jest niezaprogramowany.
*/
#define __AVR_ATmega16__
#include <string.h>
#include "avr/eeprom.h"
#include "avr/io.h"
#include "avr/signal.h"
#include "avr/interrupt.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
BYTE a = 'a';
BYTE b = ' ' ;
BYTE c = 'c';
int count = 0;
void rs_init()
{
outp(0, UBRRH );
outp(47, UBRRL);
outp(BV(RXEN)|BV(TXEN), UCSRB);
//outp(BV(RXCIE)|BV(TXCIE)|BV(URSEL)|BV(UCSZ0)|BV(UCSZ1), UCSRC);
outp((BV(URSEL)|BV(UCSZ0)|BV(UCSZ1)) ,UCSRC);;
}
void rs_putch(BYTE c)
{
outp(c, UDR);
loop_until_bit_is_set(UCSRA,TXC);
sbi(UCSRA, TXC);
}
void rs_puts(char *str)
{
while (*str != 0)
{
rs_putch(*str);
str++;
}
}
BYTE rs_getch()
{
BYTE c = 0;
loop_until_bit_is_set(UCSRA, RXC);
c = inp(UDR);
return c;
}
SIGNAL(SIG_OVERFLOW0)
{
count++;
if(count > 100)
{
count = 0;
if(a < 'w') a++;
else a = '0';
}
}
SIGNAL(__vector_default)
{
rs_putch('d');
b = 'd';
}
int main()
{
outp((1<<TOIE0), TIMSK); /* enables the T/C0 overflow interrupt in the
T/C interrupt mask register for */
outp(0, TCNT0); /* start value of T/C0 */
outp(5, TCCR0); /* prescale ck/1024 */
rs_init();
rs_puts("\n\rBefore sei");
sei();
rs_puts("\n\rReset");
for(;;)
{
if(a != c)
{
rs_puts("\n\ra = ");
c = a;
rs_putch(a);
}
if(b != ' ' )
{
rs_puts("\n\rb = ");
rs_putch(b);
b = ' ' ;
}
}
return 0;
}
/*
A moze ktos moglby na szybko przepuscic przez avr-gcc i sprawdzic u siebie
czy toto dziala.
Jest moze jakis prosty symulator dla AVR pod linuxy??
Pozdrawiam
Tomek
*/
From: "max" <max441_at_nospam_wp.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 12:42:29 +0100
Błędu żadnego nie ma. Sprawdziłem i działa zarówno na symulatorze (AVR
Studio) jak i na rzeczywistym procku.
Napisz dokładnie jakie fusy ustawiłeś i na czym to testujesz.
Pozdrawiam,
Piotrek.
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog
Date: Tue, 16 Nov 2004 12:49:10 +0100
Błędu żadnego nie ma. Sprawdziłem i działa zarówno na symulatorze (AVR
Studio) jak i na rzeczywistym procku.
Dzieki.
Napisz dokładnie jakie fusy ustawiłeś i na czym to testujesz.
Z fusow ustawione mam jedynie SPIEN i CKOPT. Testuje na wlasnej plytce
uruchomieniowej. Na niej mam mostek+stabilizator+ATMega16L + kwarc + MAX232
+ goldpiny do IO.
Kiedys do goldpinow przylutowalem kilka kabelkow transformatorowka i
fusebity mi sie zresetowaly. Moze cos w procku uwalilem??
Pozdrawiam
Tomek
From: "Tomasz Sliwa" <tomsliwaXXX_at_nospam_XXXsys.net.pl>
Subject: Re: ATMega16L - problem z przerwaniami - avr-gcc + ponyprog - DZIALA
Date: Wed, 17 Nov 2004 11:06:01 +0100
Witam
Zadzialalo. Zgodnie z sugestiami max'a sprawdzilem Makefile.
moj Makefile wygladal tak ( zly makefile):
all:
avr-gcc -g -O3 -Wall -Wa -o librs.elf librs.c
avr-objcopy -I elf32-avr -O ihex librs.elf librs.hex
A powinien przynajmniej tak:
all:
avr-gcc -g -Os -Wall -Wa -mmcu=atmega16 -o librs.elf librs.c
avr-objcopy -I elf32-avr -O ihex librs.elf librs.hex
Nie ustawialem a Makefile'u opcji mmcu tylko rodzaj procesora ustalalem w
kodzie dyrektywa #define __ATmega16_ co bylo bledem i kompilowalo sie bez
bledow a dzialalo zle.
Dodatkowo zle w moim oryginalnym Makefile'u dzialala opcja O3. Pomogla
zamiana na Os.
Dzieki wszytkim za pomoc, a w szczegolnosci MAX'owi
Pozdrawiam
Tomek