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

Пpивет, All!

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

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

Reply to
Vladislav Baliasov
Loading thread data ...

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

Reply to
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

Reply to
Vladimir Vassilevsky

Пpивет, Vladimir!

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

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

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

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

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

Reply to
Vladislav Baliasov

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

Reply to
Vladimir Vassilevsky

Hello, Vladislav Baliasov !

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

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

Reply to
Dima Orlov

Привет 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

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

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

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

wbr,

Reply to
Oleksandr Redchuk

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.

Reply to
Dimmy Timchenko

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

Reply to
Vladimir Vassilevsky

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.

Reply to
Dimmy Timchenko

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.