avr - problem z sei

Jun 21, 2005 3 Replies

Mam problem z instrukcj± sei w AVR Studio 3 i 4. Zrobi³em programik w asemblerze przesy³aj±cy, jeden za drugim, bajty przez UART. Ustawi³em bity TXEN i TXCIE (+sei)



Po przetransmitowaniu bajtu i wej¶ciu do przerwania:



0x0009 - USART0 - TX USART0

bit "I" (ustawiony przez sei) zostaje wyzerowany. Jak zaradziæ tej samowoli ?



Co siê stanie je¶li po wyzerowaniu "I" zajdzie potrzeba obs³u¿enia przerwania np. INT0 ? Je¶li przerwanie INT0 nadejdzie w momencie, kiedy I=0 to chyba nie zostanie obs³u¿one ?



Jak sobie z tym poradziæ ? Jak uniemo¿liwiæ zerowanie "I" po wej¶ciu do przerwania pod adres 0x0009 (j.w.) ?



Przecie¿, je¶li ju¿ koniecznie musi co¶ zerowaæ, to mo¿e wystarczy zablokowaæ tylko przerwanie od UART ?


Jawnie odblokowac przerwania?

Nie zostanie, ale zostanie zapamietane, ze bylo i obsluzone zostanie zaraz po odblokowaniu przerwan (lub wyjsciu z aktualnej procedury obslugi przerwan).

A musisz sobie z tym radzic?

Niekoniecznie. Zauwaz, ze w AVRach ze sprzetowym stosem kilka jednoczesnych przerwan przepelniloby stos.

To nie jest samowola tylko działanie rozmyślne. Po odebraniu przerwania możesz od razu je odblokować, ewentualnie blokując w międzyczasie przerwania mniej ważne, niż to, które obsługujesz. W ten sposób sam tworzysz coś w rodzaju priorytetu przerwań.

Dziêkujê za odpowiedzi. Nie wpisa³em reti na koñcu procedury przerwania i dlatego "I" pozostawa³ wyzerowany. Teraz dopisa³em reti i jest dobrze.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required