Vit (10.02.2016 17:45, просмотров: 79) ответил VL на Три сигнала одного GPIO вызывают перерывание. Анализ состояния выводов с запоминанием есть, но прерывания теряется уж очень часто. Общие рекомендации есть? Для теста подаю один сигнал на все входы.
ловил на MSP430 делал в обработчике прерываний примерно так:
1) читаем входы в переменную
2) читаем маску полярности в переменную
3) читаем флаги в переменную
4) чистим регистр флагов
//здесь - п.3-п.4 могут появиться необработанные запросы, т.е. потеряться флаги
5) переменную состояния входов XOR-им со входами
6) зачищаем по И переменную состояния входов с переменной маски полярности (чистим от инвалидных изменений)
7) зачищаем по И переменную состояния входов с побитово инвертированным значением из регистра флагов (на предмет необслуживания аппаратно подхваченных за это время флагов)
8) зачищаем по И переменную состояния входов с регистром индивидуальных разрешений прерываний порта ( выбиваем необслуживаемые прерывания)
9) в переменную, хранящую флаги из п. 3, заносим по побитовому ИЛИ переменную состояния входов из п. 8
10) обслуживаем запросы прерываний согласно переменной из п. 10. Остальные (которые есть в регистре флагов) обслужатся по следующему входу в обработчик.
вроде как п. 2 можно выбросить, а в п. 6 можно зачищать прямо с регистром полярностей, но было сделано как описал.
в EFM32 эту левизну, похоже, не положили:) - выглядит так, что там буферизация/синхронизация чтения триггеров проложена.