Например TDA7294

Форум РадиоКот • Просмотр темы - Прерывания в AVR
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб авг 23, 2025 13:35:40

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 49 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 10:02:48 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7004
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
а по уму, надо стратегию другую применить: почитай про алгоритм конечных автоматов.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 10:06:22 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
ROMan2947
Текстовку ставить под спойлер надо (выделяем текст - жмем Code, снова выделяем все что получилось/с окантовочными символами/ и жмем spoiler) - так основные тексты сообщений не будут загромождаться. А кому интереснт - откроют полный текст.
Для контроля результата перед окончательной отправкой есть кнопа "предпросмотр".
:beer:
ОК, учту)

Добавлено after 1 minute 11 seconds:
а по уму, надо стратегию другую применить: почитай про алгоритм конечных автоматов.

посмотрю, спасибо!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 10:32:41 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Всегда следует придерживаться простого алгоритма создания вопроса на форуме:
1. описание того, что хочется
2. описание того, что сделано (и не только описание, но и демонстрация кода, схемы и т.п.)
3. описание того, что вышло с отличиями от п.1
каждый пункт должен быть конкретным, "светодиод мигает не раз 1 секунду, а раз в 10 секунд" - это конкретика, "светодиод мигает не так, как надо" - это хрень.
только в этом случае вы можете надеяться на какие-то конструктивные ответы.
в вашем конкретном случае без описания того, что и как у вас было, и что и как у вас стало после "прерываний" (с указанием того, что вы изменили в коде), никто ничего не посоветует дельного.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 11:14:43 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Правильно ли я понимаю,что при выполнении данного кода:
Спойлер
Код:
ISR(INT0_vect)
{
   // обработка прерывания
}

int main (void)
{
   sei();
   while ()
   {
      // основная программа
   }
}

при регистрации внешнего прерывания INT0 программа может переходить только в обработку ISR(INT0_vect)?


как будет обрабатываться прерывание если код таков:
Спойлер
Код:
//ISR(INT0_vect)
//{
//   // обработка прерывания
//}

int main (void)
{
   sei();
   while ()
   {
      // основная программа
   }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:15:18 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7013
Откуда: Ижевск
Рейтинг сообщения: 0
1. Не может, т.к. не задано (не запараметрировано) ни одно прерывание. Регистрации того же INT0 не будет.
2. То же самое.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:22:05 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7004
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
распишу: если прерывание разрешено (как индивидуально, так и глобально) и установился его флаг (произошло вызывающее событие), то контроллер доделывает текущую инструкцию основного (кстати не обязательно основного, а вообще в любом месте, главное, чтобы условия соблюлись) кода и переходит на выполнение обработчика прерывания, выполнив его возвращается в ту же точку исходного кода и продолжает его выполнение (для этого в специальной области памяти, называемой стек, сохраняется адрес команды, к которой необходимо вернуться после завершения обработки прерывания). Чтобы меньше тревожить основной код, прерывания стараются делать быстроисполнимыми (короткий без циклов код).
как тебе уже написали SEI (установка бита I) разрешил глобально прерывания, а вот чтобы разрешить его индивидуально, нужно установить бит, отвечающий конкретно за это прерывание (смотри ДШ на свой контроллер)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:23:01 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
1. Не может, т.к. не задано (не запараметрировано) ни одно прерывание. Регистрации того же INT0 не будет.


Вы это к отсутствию этих строк?:
Код:
MCUCR=(1<<ISC01)|(1<<ISC00);
GICR=1<<INT0;


в вопросе выше скажем так будем считать что это предусмотрено, как в итоге будет обработка


Последний раз редактировалось ROMan2947 Пт фев 23, 2018 12:26:55, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:32:26 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ROMan2947 писал(а):
при регистрации внешнего прерывания INT0 программа может переходить только в обработку ISR(INT0_vect)?
Опять какой-то непонятный вопрос. Все зависит от включенных масок разрешений прерываний конкретных периферий и событий.
ROMan2947 писал(а):
как будет обрабатываться прерывание если код таков:
СпойлерИзображение

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Последний раз редактировалось Z_h_e Пт фев 23, 2018 12:33:42, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:34:55 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7004
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
Да.
Z_h_e, сию маску подставит сам ИДЕ (для того ему целевой МК и указывается)

Добавлено after 2 minutes 18 seconds:
есть маска включенных прерываний, их надо включать, а ещё есть (вот, согласен немного напутал) таблица переходов - что она отправит именно на этот обработчик и она уже прописана - это я имел в виду

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Последний раз редактировалось Ivanoff-iv Пт фев 23, 2018 12:35:44, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:35:11 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Z_h_e писал(а):
Цитата:
Все зависит от включенных масок разрешений прерываний конкретных периферий и событий.
Что если включить прерывание INT0 и при его регистрации оно может пойти по вектору INT2_vect?


Последний раз редактировалось ROMan2947 Пт фев 23, 2018 12:37:33, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:37:02 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Да блин, Вы пост удалили и я отредактировал свой.

Не ставит Атмел Студия какие-то автомаски, слава богу.

Добавлено after 1 minute 5 seconds:
ROMan2947 писал(а):
Что если включить прерывание INT0 и при его регистрации оно может пойти по вектору INT2_vect?
Это как?

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:38:06 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7013
Откуда: Ижевск
Рейтинг сообщения: 0
...скажем так будем считать что это предусмотрено...

Вам самому не надоело быть тыканным в собственные каки? Что вы там себе предусматриваете одному вам известно. Все остальные только догадываются. Прислушайтесь наконец к ARV.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:39:41 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7004
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
нет, не пойдёт, но его флаг будет висеть до тех пор, пока прерывание не будет выполнено (ещё флаг можно сбросить принудительно, записав в его бит "1") и, если флаг ещё активен, то при разрешении прерывания оно тутже будет выполнено (даже если событие уже прошло)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 12:58:03 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
И так, вопрос остается открытым: Для чего прерывания вам?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 13:12:36 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Запутался чет....

Спойлер
Код:
ISR(INT0_vect)
   {
    //помигаем и выйдем
   }
   
 int main(void)
 {
    sei();
    MCUCR=(1<<ISC01)|(1<<ISC00);
    GICR=1<<INT0;
   
    while ()
    {
      
    }
 }
   

и \
Спойлер
Код:
//ISR(INT0_vect)
//   {
//    //помигаем и выйдем
//   }
   
 int main(void)
 {
    sei();
    MCUCR=(1<<ISC01)|(1<<ISC00);
    GICR=1<<INT0;
   
    while ()
    {
      
    }
 }
   



в первом варианте:

1. регистрируется INT0
2. флаг поднят аппаратно
3. переходим в ISR(INT0_vect)
4. выполняем то, что в ISR(INT0_vect)
5. выходим из ISR(INT0_vect)
6. флаг прерывания очищается аппаратно
7. возвращаемся в while(1)

во втором что происходит, когда ISR не прописан?

Добавлено after 4 minutes 57 seconds:
И так, вопрос остается открытым: Для чего прерывания вам?

считать импульсы из вне


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 13:24:16 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1472
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15138
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Прерывания то хорошо...
С точки зрения учебна процессу...
НО...
Может сначала простой опрос события поставить, а когда все заработает привести к прерыванию?
Или вообще использовать внутреннюю сетку частот, а с RTCтолько "обмен данными при необходимости"?
:roll:
Или счетные импулься извне на таймер затащить...
Однако там те же прерывания, только внутренние и с иным приоритетом...
:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 13:36:28 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Может сначала простой опрос события поставить
что значит простой опрос события? ножку прослушивать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 13:39:16 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7004
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
про другие компиляторы не скажу, в кодевижн таблица переходов выглядит так:
Код:
;INTERRUPT VECTORS
   RJMP __RESET
   RJMP _ext_int0_isr
   RJMP _ext_int1_isr
   RJMP _timer1_capt_isr
   RJMP _timer1_a
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP _timer0_a
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00

там где нет обработчиков стоит ссылка на 0 адрес, а по этому адресу ссылка на RESET...

Добавлено after 1 minute 54 seconds:
если вам считать события - задействуйте таймер, настроив его на счёт внешних событий, и можно быть уверенным, что он событие не пропустит

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 14:07:35 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Сб янв 23, 2016 00:59:59
Сообщений: 287
Откуда: Чебоксары
Рейтинг сообщения: 0
Цитата:
там где нет обработчиков стоит ссылка на 0 адрес, а по этому адресу ссылка на RESET...

эта ссылка на 0 адрес где она хранится?что храниться по адресу 002(это адрес вектора прерывания INT0)

Добавлено after 3 minutes 42 seconds:
если вам считать события - задействуйте таймер, настроив его на счёт внешних событий, и можно быть уверенным, что он событие не пропустит

это в режиме захвата? у меня три генератора импульсов + SWQ/out ds1307 ...

Добавлено after 10 minutes 6 seconds:
там где нет обработчиков стоит ссылка на 0 адрес, а по этому адресу ссылка на RESET...


вывод,если настроить и включить прерывание при этом не прописав обработчик то МК при каждой регистрации INT будет сбрасываться....так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания в AVR
СообщениеДобавлено: Пт фев 23, 2018 14:26:13 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7004
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
это самое начало кода (ассемблер и прошивка на языке МК): сначала (h00) ссылка на начало исполнимого кода(reset), потом ссылки на начала подпрограмм прерываний (h02 - int0, h04 - int1 и т.д....) эти ссылки стоят здесь жестко (при компиляции меняется записанный в них вектор) т.е при вызове инт0 контроллер прыгнет на 2е слово (1слово = 2 байта) прошивки (это железно в нём заложено) и прочитает там команду перехода на обработчик прерывания.
распишу по кодевижну (думаю в других С компиляторах ненамного отличается): гдето недалеко от исполнимого файла есть папка "inc" в ней файлы по названиям микросхем, в них адреса перевода битов, регистров, переходов... для перевода с человеческого языка на машинный цифровой, покопайся, может станет понятней (только не меняй ничего), а ещё можно почитать книги, (наверно лучше или про устройство МК или по ассемблеру - он к железу ближе), (конкретных не посоветую, но думаю, сейчас коты помогут).
пс: тот кусок, что я приводил - это перевод из С в ассемблер готовой программы (а потом уже он превращается в прошивку) - если открыть этот файл целиком, то можно увидеть, насколько много скрыто от С программиста :)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 49 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 386


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y