что-то я не понимаю...

Jan 26, 2004 11 Replies

Пpивет, All!


Кто объяснит, в чем я неправ ? Случайно наткнулся, и не могу понять в чем дело. ATmega8, включены прерывания от TMR0, и внешние, по уровню. Обработчики внешних - просто reti. И вот вдруг обнаружилось, что когда на входе внешнего прерывания стабильный "0", то почему-то прекращаются прерывания по переполнению TMR0. А ведь вроде как и не должны. Hа самом деле ситуация нештатная, я сам себе заботливо вырыл ямку - но почему так ?



с уважением Владислав


Hello, Vladislav! You wrote to All on Mon, 26 Jan 2004 17:01:51 +0300:

Ни разу не видел этого чипа, но из общих соображений:

VB> внешние, по уровню. VB> когда на входе внешнего прерывания стабильный "0", то

... кристалл только и занимается входом в во "внешнее" прерывание и выходом из него. Очевидно, у него приоритет больше.

Alexander,Derazhne@adic,kiev,ua (replace commas with dots) Alexander Derazhne

Mon Jan 26 2004 17:01, Vladislav Baliasov wrote to All:

VB> Кто объяснит, в чем я неправ ? Случайно наткнулся, и не могу понять в VB> чем дело. ATmega8, включены прерывания от TMR0, и внешние, по уровню. VB> Обработчики внешних - просто reti. И вот вдруг обнаружилось, что когда на VB> входе внешнего прерывания стабильный "0", то почему-то прекращаются VB> прерывания по переполнению TMR0.

У внешних прерываний выше приоритет. Соответственно, вызывается INTx, отрабатывается reti, выполняется одна команда основной части, опять вызывается INTx и так далее.

VB> я сам себе заботливо вырыл ямку - но почему так?

Читайте УСТАВ - голова болеть не будет :) VLV

"Evil will prevail because good is dumb" (c) Space Balls

Пpивет, Vladimir!

*** 26 Jan 04 17:54, Vladimir Vassilevsky wrote to Vladislav Baliasov:

VB>> стабильный "0", то почему-то прекращаются прерывания по VB>> переполнению TMR0.

VV> У внешних прерываний выше приоритет. Соответственно, вызывается INTx, VV> отрабатывается reti, выполняется одна команда основной части, VV> опять вызывается INTx и так далее.

Hо у основной программы приоритет ведь всяко меньше, чем у любого обработчика ? А, ну я понял мысль - пока есть хоть одно прерывание большего приоритета, прерывание с меньшим никогда не будет обработано, несмотря на вполне успешное выполнение основной задачи. Логично. Я как-то не сообразил...

с уважением Владислав

Mon Jan 26 2004 18:24, Vladislav Baliasov wrote to Vladimir Vassilevsky:

VV>> У внешних прерываний выше приоритет. Соответственно, вызывается INTx, VV>> отрабатывается reti, выполняется одна команда основной части, VV>> опять вызывается INTx и так далее.

VB> Hо у основной программы приоритет ведь всяко меньше, чем у любого VB> обработчика?

Прерывания проверяются процессором в конце выполнения команды. Соответственно, после reti отработается ровно одна команда основной части, после чего опять будет вызвано прерывание с наивысшим приоритетом.

VB> А, ну я понял мысль - пока есть хоть одно прерывание VB> большего приоритета, прерывание с меньшим никогда не будет обработано, VB> несмотря на вполне успешное выполнение основной задачи. Логично. Я как-то VB> не сообразил...

Просто когда-то я наступал на аналогичные грабли с прерыванием от UDRE. VLV

"Evil will prevail because good is dumb" (c) Space Balls

Hello, Vladislav Baliasov !

Вероятно до таймера дело просто не доходит, так как после reti оно сразу опять туда попадает.

С уважением, Дима Орлов.

Привет Vladislav!

Monday January 26 2004 17:01, Vladislav Baliasov wrote to All:

VB> Пpивет, All! VB>

VB>

VB> Кто объяснит, в чем я неправ ? Случайно наткнулся, и не могу понять в VB> чем дело. ATmega8, включены прерывания от TMR0, и внешние, по уровню. VB> Обработчики внешних - просто reti. И вот вдруг обнаружилось, что когда на VB> входе внешнего прерывания стабильный "0", то почему-то прекращаются VB> прерывания по переполнению TMR0. А ведь вроде как и не должны. Hа самом VB> деле ситуация нештатная, я сам себе заботливо вырыл ямку - но почему так ?

Может оно в бесконечное прерываание по инту входит ?

Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28 aka snipped-for-privacy@yahoo.com

formatting link
,
formatting link
, ftp://altor.sytes.net

26-Jan-04 17:01 Vladislav Baliasov wrote to All:

VB> Кто объяснит, в чем я неправ ? Случайно наткнулся, и не могу понять в VB> чем VB> дело. ATmega8, включены прерывания от TMR0, и внешние, по уровню. VB> Обработчики VB> внешних - просто reti. И вот вдруг обнаружилось, что когда на входе VB> внешнего VB> прерывания стабильный "0", то почему-то прекращаются прерывания по VB> переполнению TMR0.

У внешнего прерывания выше приоритет, запрос не снимается вообще. Поэтому основная программа имеет шанс меееееедленно выполняться, а вот до таймерного дело не дойдёт никогда. Всегда будет выигрывать внешнее.

wbr,

Hi Vladimir.

26 Jan 2004, 17:54, Vladimir Vassilevsky writes to Vladislav Baliasov:

VB> входе внешнего пpеpывания стабильный "0", то почему-то пpекpащаются VB> пpеpывания по пеpеполнению TMR0.

VV> У внешних пpеpываний выше пpиоpитет.

Кстати и пpиоpитеты, как в 51-м, очень не помешали бы (там пpеpывание высокого пpиоpитета может пpеpвать обpаботку низкопpиоpитетного).

Dimmy.

Wed Jan 28 2004 10:13, Dimmy Timchenko wrote to Vladimir Vassilevsky:

VB>> входе внешнего пpеpывания стабильный "0", то почему-то пpекpащаются VB>> пpеpывания по пеpеполнению TMR0.

VV>> У внешних пpеpываний выше пpиоpитет.

DT> Кстати и пpиоpитеты, как в 51-м, очень не помешали бы (там пpеpывание DT> высокого пpиоpитета может пpеpвать обpаботку низкопpиоpитетного).

В AVR это можно сделать софтверно: разрешать отработку одних прерываний внутри других прерываний. Я так иногда делаю.

VLV

"Evil will prevail because good is dumb" (c) Space Balls

Hi Vladimir.

28 Jan 2004, 17:51, Vladimir Vassilevsky writes to Dimmy Timchenko:

DT> Кстати и пpиоpитеты, как в 51-м, очень не помешали бы (там пpеpывание DT> высокого пpиоpитета может пpеpвать обpаботку низкопpиоpитетного).

VV> В AVR это можно сделать софтвеpно: pазpешать отpаботку одних VV> пpеpываний внутpи дpугих пpеpываний. Я так иногда делаю.

Я тоже.

Hо пока ты дойдёшь до команды pазpешения пpеpывания, пpойдёт некотоpое вpемя. Впpочем, AVR-ы достаточно быстpы. Да и гибкость у системы пpиоpитетов выше, там ведь тоже можно pазpешить пpеpывания в обpаботчике. :)

Dimmy.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required