MCP23017 не вызывает прерываний при использовании нормально разомкнутого переключателя при включении питания

Я работаю над проектом, в котором использую две кнопочные панели 4x4. Мне нужно было бы использовать два MCP23017 для входных прерываний, чтобы поддерживать 32 кнопки. Я использую Netduino, и я сталкиваюсь с проблемой, и я не уверен, связана ли она с программным или аппаратным обеспечением.

Я использую этот веб-сайт в качестве руководства для понимания и настройки MCP23017, и я выполняю все шаги, включая приведенную ниже диаграмму:

диаграмма

На диаграмме показано, что адрес установлен, SDA и SCL имеют резистор, сброс смещен, вывод на Netduino настроен на обработку прерывания, а микрокнопка используется для проверки функциональности прерывания.

Я установил контакт MCP23017 для переключателя в качестве входа, настроил его на использование подтягивающего резистора, а затем установил контакт как прерывание. Вывод на Netduino также настроен на использование подтягивающего резистора и вызов прерываний при низком уровне. Это прекрасно работает , пока Netduino загружается с замкнутым переключателем . Если переключатель разомкнут (как обычно разомкнут), никакие прерывания никогда не срабатывают. Мне нужно запустить Netduino, нажав микрокнопку, чтобы получить желаемое поведение. Я не уверен, что вызывает это. Я проявляю то же поведение, что и человек, комментирующий внизу этой страницы .

Есть ли какое-либо программное или аппаратное решение для этого?

Ответы (1)

1.7.5 УСЛОВИЯ ПРЕРЫВАНИЯ Есть две возможные конфигурации, которые вызывают прерывания (настраиваются через INTCON):

1. Выводы, настроенные на смену прерывания на выводе, вызовут прерывание, если вывод изменится на противоположное состояние. Состояние по умолчанию сбрасывается после возникновения прерывания и после устранения условия прерывания (т. е. после чтения GPIO или INTCAP). Например, прерывание происходит при изменении входа с «1» на «0». Новое начальное состояние вывода — логический 0 после очистки прерывания.

2. Выводы, сконфигурированные для прерывания при изменении значения регистра, вызовут прерывание, если соответствующий входной вывод отличается от бита регистра. Состояние прерывания будет оставаться до тех пор, пока оно существует, независимо от того, считывается ли INTCAP или GPIO.