Свежие обсуждения
Микроконтроллеры

Интересный вход в прерывание у ПИКа

1 4

Тут просматривал исходник от 84-го.
Там увидел такую конструкцию:

ORG 0x04 ; interrupt vector location

ISR

bcf INTCON,GIE ; disable all interrupts
btfsc INTCON,GIE ; assure interrupts are disabled
goto ISR

Это какая-то особенность 84-го?
У всех современных, он сбрасывается аппаратно, при переходе по вектору прерывания. А уж, что б проверять, как-то даже не задумывался...

 

Может это защита от случайного попадания на ветку? При ресете например....А так - фигня какая-то..

 

rfc:
А так - фигня какая-то
Вот и я говорю: "Фигня!" А Фурманов утверждает, что - ножницы.

А может у кого даташит на 84а завалялся?
По ходу обнаружил, что там какие-то RAM используются, на которые 628 ругается.

 

Какой рам? Нет там никаких рам.

8.9.1 INT INTERRUPT
External interrupt on RBO/INT pin is edge triggered: either rising if INTEDG bit (0PTI0N_REG<6>) is set, or falling, if INTEDG bit is clear. When a valid edge appears on the RBO/INT pin, the INTF bit (INTCON<1>) is set. This interrupt can be disabled by clearing control bit INTE (INTCON<4>). Flag bit INT= must be cleared in software via the interrupt service routine before re-enabling this interrupt. The INT interrupt can wake the processor from SLEEP (Section 8.12) only if the INTE bit was set prior to going into SLEEP. The status of the GIE bit decides whether the processor branches to the interrupt vector following wake-up.
--------
Флаг опускать софтово, нерусским по белому

 

Vladikas:
Нет там никаких рам
А это что?

нерусским по белому
Дык, где?

Флаг опускать софтово
Я, конечно, плоховато басурманский знаю, но по-моему тут речь идёт о флаге INTF, означающим, что произошло событие для прерывания. Его и надо сбрасывать софтово, как и все остальные подобные флаги.

 

Gregory: Его и надо сбрасывать софтово, как и все остальные подобные флаги.
Я про то же. Поднимается он аппаратно. Видимо не о том подумал. Вопрос был про бит GIE? Что он сбрасывается аппаратно. Надо почитать... Тока уже с утра

А откуда эта картинка? Ведь нет же ОЗУ (RAM) в пиках вообще, всё через регистры... Или я сплю и вижу сон, как будто я пишу чушь на нашем форуме... С утра будет видно сон это был или не сон...

 

Откуда исходник? Может двоечник писал? Или может компилятор какой-нибудь кривой из Си накомпилячил из соображения "хуже не будет"?
Сбрасывать GIE, если и так прерывания в самом прерывании запрещены аппаратно - это что-то из области перестраховок. Или может логика работы такая? Может быть по выходе из прерывания прерывания должны запрещаться по задумке программиста? Что-то типа одноразового прерывания.
Но чтобы проверять бит сразу после его сброса - это круто! А вдруг не сбросился? Этакий непослушный бит.

 

вероятно ДонАмброзио программу писал
GIE - глобальное рарешение прерываний
если проц без разрешения вошёл в прерывание - значит прошёл "глюк"(скачёк питания...) - в таких условиях проверить состояние бита "святое" - стандартная процедура

 

Vladikas: А откуда эта картинка? Ведь нет же ОЗУ (RAM) в пиках вообще, всё через регистры
Как это нет RAM? А где данные хранятся?

AnSi: GIE - глобальное рарешение прерываний
если проц без разрешения вошёл в прерывание - значит прошёл "глюк"(скачёк питания...) - в таких условиях проверить состояние бита "святое" - стандартная процедура

Проверить - да, выйти, если ложный вход - да, но сбрасывать, а если не сбросился - зациклиться - это, по моему, перебор.

 

rfc: а если не сбросился - зациклиться
если не сбросился GIE, то всё равно вернётся в прерывание - флаги прерываний не сброшены