Generowanie przerwań programowo w AVRach

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Z gF3%ry przepraszam za nowy temat a nie kontynuacjEA% poprzedniego, ale
B3%atwiej dostrzec.

Czy jet moBF%liwoB6%c w AVR'ach wygenerowania przerwaF1% programowo? Np mam=
y
przewranie od poadajacego zbocza INT0. Zostanie obsluzone jak pojawi
sie zbocze na wejsciu, ale czy moBF%na wygenerowaE6% takie przerwanie
programowo?
MyB6%laB3%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 generowaE6%
przerwanie?

Re: Generowanie przerwań programowo w AVR ach
W dniu 22.07.2011 06:09, slawek7 pisze:
Quoted text here. Click to load it
A musi to być "przerwanie" ? Nie wystarczy Koledze po prostu skoczyć do
obsługi tego przerwania.

Quoted text here. Click to load it

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

Re: Generowanie przerwań programowo w AVRach
SkoczyE6% moBF%e i moBF%na ale jak to sie robi w WinAvr?

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


Re: Generowanie przerwań programowo w AVR ach
Quoted text here. Click to load it

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

Re: Generowanie przerwań programowo w AVRach
DziEA%kujEA%, dziaB3%a. Nie wiem jak na to wpadB3%eB6%.

Przy okazji zapytam siEA% o cos co mnie zaskoczyB3%o.
SpotkaB3%em takB1% deklaracje funkcji
memcopy(void *, const void *, size_t) : void *;

Dlaczego tam jest na koF1%cy dwukropek?
SzukaB3%em w opisie standardu C i nie znalazB3%em takiego opisu.

Re: Generowanie przerwań programowo w AVRach

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


Site Timeline