RTV forum PL | NewsGroups PL

Jak wygenerować przerwania programowo w AVRach? INT0 i przerwania od Timerów

Generowanie przerwań programowo w AVRach

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wygenerować przerwania programowo w AVRach? INT0 i przerwania od Timerów

slawek7
Guest

Fri Jul 22, 2011 5:45 am   



Z góry przepraszam za nowy temat a nie kontynuację poprzedniego, ale
łatwiej dostrzec.

Czy jet możliwośc w AVR'ach wygenerowania przerwań programowo? Np mamy
przewranie od poadajacego zbocza INT0. Zostanie obsluzone jak pojawi
sie zbocze na wejsciu, ale czy można wygenerować takie przerwanie
programowo?
Myślałem o programowym zerowaniu linii INT0, ale potem trzeba powrocic
do stanu jako wejscie a dodatkowo do tego pinu moga byc podlaczone
uklady ktore moga nie zniesc podania z zewnatrz sygnalu L. A co z
przerwaniami od Timerow?

I jeszcze jedno. Flage przerwania zeruje sie wpisujac 1 do niej. A co
jesli flaga nie byla ustawiona a wpisze sie 1? Czy to moze generować
przerwanie?

Grzegorz Kurczyk
Guest

Fri Jul 22, 2011 5:45 am   



W dniu 22.07.2011 06:09, slawek7 pisze:
Quote:
Z góry przepraszam za nowy temat a nie kontynuację poprzedniego, ale
łatwiej dostrzec.

Czy jet możliwośc w AVR'ach wygenerowania przerwań programowo? Np mamy
przewranie od poadajacego zbocza INT0. Zostanie obsluzone jak pojawi
sie zbocze na wejsciu, ale czy można wygenerować takie przerwanie
programowo?
Myślałem o programowym zerowaniu linii INT0, ale potem trzeba powrocic
do stanu jako wejscie a dodatkowo do tego pinu moga byc podlaczone
uklady ktore moga nie zniesc podania z zewnatrz sygnalu L. A co z
przerwaniami od Timerow?

A musi to być "przerwanie" ? Nie wystarczy Koledze po prostu skoczyć do

obsługi tego przerwania.

Quote:
I jeszcze jedno. Flage przerwania zeruje sie wpisujac 1 do niej. A co
jesli flaga nie byla ustawiona a wpisze sie 1? Czy to moze generować
przerwanie?

Jeśli ma Kolega na myśli główną flagę przerwań (sei/cli) to nie. Ale o
ile mnie pamięć nie myli, to np. ustawienie w rejestrze ADCSRA bitu ADIF
przy ustawionym wcześniej ADIE spowoduje wygenerowanie przerwania.

Pozdrawiam
Grzegorz

Lelek@
Guest

Fri Jul 22, 2011 9:21 am   



"slawek7" <sholojda@wp.pl> wrote in message
news:fec7d625-b48b-42ab-b77e-9b5507c44381@c29g2000yqd.googlegroups.com...
Z góry przepraszam za nowy temat a nie kontynuację poprzedniego, ale
łatwiej dostrzec.

Czy jet możliwośc w AVR'ach wygenerowania przerwań programowo? Np mamy
przewranie od poadajacego zbocza INT0. Zostanie obsluzone jak pojawi
sie zbocze na wejsciu, ale czy można wygenerować takie przerwanie
programowo?

No jasne. W PDF-ie jest gdzieś to opisane. Chyba wystarczy przestawić pin na
out i wpisać mu tam zero przy pomocy sbi/cbi to załatwisz, po czym w
przerwaniu sprawdzisz czy ustawiłeś pin na "out" i go ustawisz ponownie na
"in"

sbi DDRA,1
cbi PORTA,0

a w c

DDRA |= 0b00000010;
PORTA &= (~PORTA) & 0x02;

one ci wygenerują sbi i cbi

slawek7
Guest

Fri Jul 22, 2011 11:07 am   



Skoczyć może i można ale jak to sie robi w WinAvr?

W drugiej czesci chodzilo mi raczej o flagi przyporzadkowane do
konkretnego układu jak TOV1 lub ICF1, INTF1.
Czy ustawienie ktorejs z nich spowoduje przerwanie i skok do jego
obslugi?

Konop
Guest

Fri Jul 22, 2011 4:59 pm   



Quote:
W drugiej czesci chodzilo mi raczej o flagi przyporzadkowane do
konkretnego układu jak TOV1 lub ICF1, INTF1.
Czy ustawienie ktorejs z nich spowoduje przerwanie i skok do jego
obslugi?

A jak nazywa się funkcja, która to przerwanie obsługuje?? Zapewne
deklarujesz coś takiego (przykład dla TIMERA2):

SIGNAL(TIMER2_OVF_vect)

No i jeden rzut oka na plik avr/interrupt.h i już widzisz, co oznacza
SIGNAL i że deklaruje on funkcję:

TIMER2_OVF_vect (void)...

No i wystarczy wywołać tą funkcję:
TIMER2_OVF_vect();

Zwróć tylko uwagę na jedną rzecz. Normalnie przy wywołaniu przerwania
następuje zablokowanie wszystkich przerwań (tak jakby wywołanie cli()).
Po wykonaniu przerwania obsługa ta jest włączana (sei()). W przypadku
ręcznego wywołania funkcji przerwania nie będą blokowane, ale będą
właczane przy wyjściu... .


--
Pozdrawiam
Konop

slawek7
Guest

Sat Jul 23, 2011 10:58 am   



Dziękuję, działa. Nie wiem jak na to wpadłeś.

Przy okazji zapytam się o cos co mnie zaskoczyło.
Spotkałem taką deklaracje funkcji
memcopy(void *, const void *, size_t) : void *;

Dlaczego tam jest na końcy dwukropek?
Szukałem w opisie standardu C i nie znalazłem takiego opisu.

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wygenerować przerwania programowo w AVRach? INT0 i przerwania od Timerów

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map