|
продолжить прерывание, atmega128 winavr |
|
|
|
Feb 9 2011, 14:07
|

Частый гость
 
Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731

|
Добрый день есть некоторый код Код void funс(void){ cli(); ... sei(); } ISR(INT0_vect){ ...} ISR(USART1_RX_vect){ ...} ISR(USART1_TX_vect){ ... func(); ...} ISR(USART1_UDRE_vect){ ... } ... Функцию я вызываю из прерывания, во время её выполнения прерывания нужно запретить. Когда я их снова разрешу, то могут возникнуть любые прерывания, а не продолжалось USART1_TX, так ведь? Вопрос, как сделать так, что бы после разрешения прерываний разрешалось только USART1_TX Спасибо за помощь
|
|
|
|
|
 |
Ответов
|
Feb 10 2011, 15:20
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(_Артём_ @ Feb 10 2011, 17:18)  Разве при переходе на вектор прерывания флаг I не сбрасывается? Тогда CLI(); - лишняя. Мной приведена функция, которую вызывают из обработчика прерывания (в этом случае - флаг I сброшен) и из другого места программы (например, из бесконечного цикла - флаг I установлен), т.е. примерно такая, как у автора вопроса. Код функции таков, что вся функция или её отдельный участок должен работать не прерываясь. Чтобы выполнение кода не прервалось, прерывания нужно запретить (конечно, если вызвана функция из прерывания - флаг I и так сброшен, и делать это не обязательно, но "лишний" раз - не повредит), но вот в конце функции (или её участка) разрешать прерывания нужно не всегда, а только в том случае, если при входе в функцию прерывания были разрешены. Imho, сделать это удобно сохраняя при входе в функцию регистр SREG (из него нам интересен флаг I), а в конце функции(участка кода) - восстановить SREG вместе с флагом I.
|
|
|
|
Сообщений в этой теме
Mikron продолжить прерывание Feb 9 2011, 14:07 Палыч Цитата(Mikron @ Feb 9 2011, 17:07) ...пре... Feb 9 2011, 14:24 Xenia Цитата(Mikron @ Feb 9 2011, 17:07) Функци... Feb 9 2011, 14:48 ILYAUL ЦитатаКогда я их снова разрешу, то могут возникнут... Feb 9 2011, 16:15 Mikron Всем огромное спасибо за помощь)
Что-то я реально ... Feb 9 2011, 21:25 Палыч Цитата(Mikron @ Feb 10 2011, 00:25) ...фу... Feb 10 2011, 07:15 Mikron Цитата(ILYAUL @ Feb 9 2011, 19:15) Да и в... Feb 10 2011, 14:09 ILYAUL Цитата(Mikron @ Feb 10 2011, 17:09) Возни... Feb 10 2011, 18:39  ReAl Цитата(ILYAUL @ Feb 10 2011, 20:39) Кстат... Feb 11 2011, 07:31 _Pasha Ето винавр, проснитесь!
Код#include <util/... Feb 11 2011, 05:07 ILYAUL Цитата(_Pasha @ Feb 11 2011, 08:07) Стал... Feb 11 2011, 11:36  demiurg_spb Цитата(ILYAUL @ Feb 11 2011, 14:36) При п... Feb 11 2011, 11:40   ILYAUL Цитата(demiurg_spb @ Feb 11 2011, 14:40) ... Feb 11 2011, 13:21    Палыч Цитата(ILYAUL @ Feb 11 2011, 16:21) У Вас... Feb 11 2011, 14:57     demiurg_spb Похоже Илья упускает момент буферирования регистра... Feb 11 2011, 15:25      Палыч Цитата(demiurg_spb @ Feb 11 2011, 18:25) ... Feb 11 2011, 15:51       demiurg_spb Цитата(Палыч @ Feb 11 2011, 18:51) А, раз... Feb 12 2011, 08:25      ILYAUL Цитата(demiurg_spb @ Feb 11 2011, 18:25) ... Feb 11 2011, 18:16       Палыч Цитата(ILYAUL @ Feb 11 2011, 21:16) Итог:... Feb 11 2011, 19:01        ILYAUL Цитата(Палыч @ Feb 11 2011, 22:01) Да, US... Feb 11 2011, 21:40         _Pasha Цитата(ILYAUL @ Feb 12 2011, 00:40) Но эт... Feb 11 2011, 22:22          ILYAUL Цитата(_Pasha @ Feb 12 2011, 01:22) Эта а... Feb 12 2011, 11:17           _Pasha Цитата(ILYAUL @ Feb 12 2011, 15:17) Вот и... Feb 12 2011, 11:43           demiurg_spb Цитата(ILYAUL @ Feb 12 2011, 14:17) Давай... Feb 12 2011, 13:05            ILYAUL Цитата(demiurg_spb @ Feb 12 2011, 16:05) ... Feb 13 2011, 04:45  _Pasha Цитата(ILYAUL @ Feb 11 2011, 14:36) Причё... Feb 11 2011, 15:40
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|