Прерывания, общая функция

Тема в разделе "Arduino & Shields", создана пользователем Vovka, 14 июл 2020.

  1. Vovka

    Vovka Гик

    ATmega 328 Pro Mini
    Есть задача мониторить сигналы, приходящие на микросхему-счетчик. Сигнал тактирования подключен к INT0, сигнал сброса - к INT1 (на картинке канал-0 и канал-1 соответственно, каналы 2 и 3 - данные)
    R1.jpg
    Сигнал сброса приходит с "помехой" - надо как-то его игнорировать.
    Возможно ли как-то в проекте назначить общую функцию для прерываний INT0 и INT1? И чтоб в этой функции определять чье это прерывание - тогда я смогу "помеху" легко отсечь..
    В PIC-ах такое есть, поэтому надеюсь и тут такое должно быть...
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    ВЫ помеху "программно отсечете" - для софта. Но в реале - она же так и будет шпарить на счетчик. Тогда какой смысл в вопросе ?
     
  3. parovoZZ

    parovoZZ Гуру

    Нет. Но можно через PCINT. Он отрабатывает сразу на порт. Если INT -ы висят на одном порту и на этих ногах есть PCINT. Вообще, все эти 328 и подобные - это уже как 8051. Устаревшие, жутко неудобные. Переходите уже на современные чипы.

    Если сигнал сброса асинхронный - от помехи не избавишься. Если сигнал сброса синхронный, то и опрашивай этот пин с периодом больше, чем период помехи.
     
  4. a1000

    a1000 Гуру

    Почему нет? А если в таблице векторов прописать для обоих прерываний одну и ту-же метку? Всё должно сработать. Но возникает вопрос, как различить откуда прерывание?
    Предлагаю такой вариант. По каждому прерыванию свой малюсенький обработчик в котором выставляем флаг в соответствии от того какое это прерывание (INT0 или INT1). Потом переадресация в "общую функцию".
     
    Andrey12 и Vovka нравится это.
  5. parovoZZ

    parovoZZ Гуру

    А в этом плане...Я сперва не допер)) Это на асме. А на Сях можно вызвать одну и ту же функцию. Но зачем? Если надо
    Для каждого прерывания свой обработчик, а затем вызов общей функции. Но я не понимаю, зачем это всё...

    он и так аппаратно выставляется. Причём вне зависимости от того, разрешили мы прерывание или нет. Регистр, в котором живут эти флаги - EIFR
     
    a1000 нравится это.
  6. a1000

    a1000 Гуру

    Выставляются, но при вызове прерывания аппаратно сбрасываются. Так, что в обработчике информация уже будет утрачена.
     
  7. parovoZZ

    parovoZZ Гуру

    Ой, не все)

    А на фига нужен флаг, если ты и так в курсе в каком обработчике находишься?
     
  8. a1000

    a1000 Гуру

    Так у ТС такие хотелки были
    Вот я и предложил как вариант
     
  9. Vovka

    Vovka Гик

    Спасибо за подсказку, сделаю флаги и общую функцию, в которой будет логика что за прерывание пришло и было ли другое!
    В пиках там немного проще сделано: для любого прерывания вызывается всегда одна функция, а в ней уже по флагам разгребаем что было... Я думал, что и тут похожее есть...
     
  10. DetSimen

    DetSimen Гуру

    Есть. Называется PCINT.
     
    Andrey12 нравится это.
  11. Vovka

    Vovka Гик

  12. parovoZZ

    parovoZZ Гуру

    а чё за мной повторяешь? а?
     
  13. DetSimen

    DetSimen Гуру

    Так он с первого раза не догнал.
     
    Andrey12 нравится это.
  14. a1000

    a1000 Гуру

    Это он по привычке. В программаровании за плагиат не преследуют.:)