- posted
17 years ago
PIC12F629 Interrupts
- posted
17 years ago
- posted
17 years ago
Салют, Михаил!
Да.И так до бесконечности.Поэтому в теле прерывания СLRWDT лучше избегать.
Скачай описание на 12f629.Там будет пример сохранения регистров W,STATUS во время входа в прерывание и восстановления их при выходе.
movwf w_temp swapf status,w bcf status,rp0 movwf status_temp
выполнения прерывания
swapf status_temp,w movwf status swapf w_temp,f swapf w_temp,w
retfie
При этом w_temp должен быть определен как в банке 0 так и в банке 1. Общее правило в принципе такое.Значения регистров,которые могут измениться во время выполнения прерывания, сохраняються в промежуточных регистрах в самом начале прерывания.В конце прерывания значения регистров восстанавливаються. И сбрасывается флаг прерывания.В этом примере речь идет о сохранении W и STATUS. Но если ты что то делаешь в основном теле программы ,например, с EEADR и во время прерывания тоже работаешь с EEADR ,то и его надо сохранять и восста- навливать.
---------------- С уважением.Ю.
- posted
17 years ago
Привет!
Mon Apr 04 2005 02:01, Mikhail Samoilenko wrote to All:
...
MS> Если не сбросить флага прерывания в процессе его обработки MS> (конкретно в моем случае - флага TMR1IE) то что происходит MS> по команде retfie? Снова вызывается вектор прерывания?
Да. Сэмплинг флагов производится в начале каждого цикла и если прерывание действует, то выбиравшаяся в этом же цикле команда уже не исполняется.
MS> Есть какая-нибудь application note по прерываниям?
В "PICmicro Mid-Range MCU Family Reference Manual", есть раздел "Interrupts". Там не очень много информации, но в принципе всё есть.
В чем смысл эксперимента с неснятием флага?
Александр Голов, Москва, snipped-for-privacy@mail.ru
- posted
17 years ago
- posted
17 years ago
Привет!
Sat Apr 09 2005 20:59, Mikhail Samoilenko wrote to Alexander Golov:
...
MS> Hе понял о каком сэмплинге и какой команде речь.
Ядро в конце первого такте каждой команды производит проверку активности флага прерывания и, соответственно, принимает решение о дальнейших действиях. Я думал тебя интересует будет ли вообще исполнять основной код МК (хотя бы по одной команде), или повиснет наглухо.
MS> Хотя в принципе уже разобрался.
MS> Просто в первый раз использую прерывания, а в даташите на 629 MS> про флаги как-то невнятно написано: "The interrupt flag bit(s) must be MS> cleared in software before re-enabling interrupts to avoid GP2/INT MS> recursive interrupts". До того речь шла о прерываниях вообще, а тут - MS> акцент на GP2/INT.
Это просто ошибка. Посмотри в даташитах на другие 14-разрядные, там в сущности тоже самое говорится, но несколько в другом порядке. Видимо когда слова/абзацы двигали, что-то потеряли/лишнего прилепили.
MS> Хотя у меня точно так же зациклился и с TMR1 при MS> неснятом TMR1IF.
Естественно.
Александр Голов, Москва, snipped-for-privacy@mail.ru