|
Problem rozwiązałem (a właściwie mój kolega Michał - dzięki Michał)
Cały układ MCP23017 działa poprawnie z tym przerwaniem przy porównywaniu z rejestrem DEFVAL. Proszę spojrzeć do noty rozdział 1.7.5 rysunek 1.7 strona 25.
Cały problem polega na tym, iż konstruktorzy tego układu go tak zaprojektowali, że po wywołaniu przerwania ono "trwa" dopóki trwa stan który je wywołał. Dlatego odczyt GPIO czy INTCAP (zaznaczone na rysunku przerywaną linią) w pierwszym i trzecim przypadku kasuje przerwanie. Inaczej jest w drugim przypadku, gdzie odczyt tych rejestrów przypada na stan niski portu GP2, które to przerwanie wywołało. W takim przypadku przerwanie nie będzie wyzerowane.
Ja obsługuję akurat klawisze, więc po ich naciśnięciu nie mam szans odczekać na ich zwolnienie gdy pojawi się przerwanie. Ot cała przyczyna. Pracuję nad rozwiązaniem, ale kiedy już znam przyczynę będzie łatwiej.
_________________ ... Ardua prima via est ... Errare humanum est ...
|