AVR - przerwania??

Feb 03, 2005 6 Replies

Napisałem oto coś takiego w asemblerku:



.INCLUDE "2313def.inc" .DEF tmp=r17



.org 0



rjmp RESET ;Reset reti ;External Interrupt 0 reti ;External Interrupt 1 reti ;T/C1 Capture Event reti ;T/C1 Compare Match reti ;T/C1 Overflow rjmp PRZEP ;T/C0 Overflow reti ;UART Rx Complete reti ;UART Data Register Empty reti ;UART Tx Complete reti ;Analog Comparator


;.CSEG



RESET: ldi tmp,0b00000010 out timsk,tmp sei ldi tmp,0b11111110 out tcnt0,tmp ldi tmp,0b00000001 out tccr0,tmp LOOP: nop rjmp LOOP



PRZEP: ldi tmp,0b01100100 out tccr0,tmp reti



I wszystko by było fajnie ale po przepełnieniu licznika T0 wchodzę w przerwanie ale po wykonaniu kodu zawartego w "PRZEP" reti nie powoduje mi powrotu do miejsca wystąpienia przerwania (pętli LOOP) tylko wykonywanie kodu zaczyna się od pierwszedo rozkazu (skocz do RESET). Co jest nie tak?? Testowane w AVRStudio i w "realu".


Pewnego dnia Szczepan przemówił ludzkim głosem:

Zapomniałeś stos zainicjować.

Tak na szybko:

Co poeta mia³ tu na my¶li? Dobrym zwyczajem jest skasowaæ flagê przerwania (tu: TOV0) bezpo¶rednio przed w³±czeniem przerwania. TG

Dnia Fri, 04 Feb 2005 01:00:32 +0100, Zbych napisał(a):

No tak, teraz działa. :]

Dnia Fri, 4 Feb 2005 01:03:19 +0100, Tomasz Gumny napisał(a):

Poeta miał na myśli dokładnie to co napisał - chciał sie pobawić.

A skąd się taki "dobry zwyczaj" bierze? Bo z moich obserwacji w AVRStudio ta flaga zawsze jest kasowane w momencie wystąpienia przerwania. Niewidziałem potrzeby dubowania tego.

Lepiej ¿eby Poeta nie ustawia³ jedynek w niezdefiniowanych miejscach:

To siê nie rymuje ani w AT90S2313, ani w ATtiny2313.

Ano st±d, ¿e czasem flaga przerwania mo¿e siê ustawiæ przy ustawianiu konfiguracji i pierwsze przerwanie przyjdzie natychmiast po SEI (u Poety jeszcze przed ustawieniem tcnt0/tccr0). TG

Dnia Fri, 4 Feb 2005 13:37:59 +0100, Tomasz Gumny napisał(a):

Teraz widzę swój błąd. Wkleiłem nie tem kod co trzeba. Miało być: ldi tmp,0b01100100 out tcnt0,tmp

Takie są początki w asm ;-)

Teraz rozumiem Twoją uwagę.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required