Witam,
mam problem z obsługą przerwań zewnętrznych INT0 oraz INT1 w symulatorze (Simulator). Piszę w AVR Studio 4.19, gdyż Atmel Studio nie ma symulatora dla ATtiny87. Popatrzcie na ten banalny kod (okroiłem pierwotny kod do absolutnego minimum):
Gdy symuluję stan wysoki na porcie PB6 (czyli zaznaczam kwadracik oznaczony PINB6 w symulatorze), to.... program startuje od początku (od fragmentu i = 0; ). Czyli zachowanie takie, jakby nastąpił reset. Jeśli z kolei symuluję stan wysoki na porcie PA3 (PINA3), to... ląduję w obsłudze przerwania, ale INT0, a nie INT1.
Wygląda to na jakiś offset przerwań, tzn, zamiast INT0 (vector 1) dostaję RESET (vector 0) a zamiast INT1 (vector 2) dostaję INT0 (vector 1).
Zrezygnowany zajrzałem do definicji wektorów przerwań w pliku iotn87.h, ale wydaje mi się, że tutaj wszystko gra:
No to gdzie jest błąd? W symulatorze? Przejrzałem sekcję "known issues" i niczego w sprawie ATtiny87 i przerwań nie znalazłem. Macie jakiś pomysł?
Na razie programuję "na sucho" i nie mam możliwości sprawdzenia na fizycznym tiny87, ale praktyka zazwyczaj pokazuje, że symulator się jednak nie myli...
Czy mógłby ktoś przesymulować ten fragment u siebie? U mnie najpłynniej poszło z wyłączoną optymalizacją.
mam problem z obsługą przerwań zewnętrznych INT0 oraz INT1 w symulatorze (Simulator). Piszę w AVR Studio 4.19, gdyż Atmel Studio nie ma symulatora dla ATtiny87. Popatrzcie na ten banalny kod (okroiłem pierwotny kod do absolutnego minimum):
Kod: C / C++
Gdy symuluję stan wysoki na porcie PB6 (czyli zaznaczam kwadracik oznaczony PINB6 w symulatorze), to.... program startuje od początku (od fragmentu i = 0; ). Czyli zachowanie takie, jakby nastąpił reset. Jeśli z kolei symuluję stan wysoki na porcie PA3 (PINA3), to... ląduję w obsłudze przerwania, ale INT0, a nie INT1.
Wygląda to na jakiś offset przerwań, tzn, zamiast INT0 (vector 1) dostaję RESET (vector 0) a zamiast INT1 (vector 2) dostaję INT0 (vector 1).
Zrezygnowany zajrzałem do definicji wektorów przerwań w pliku iotn87.h, ale wydaje mi się, że tutaj wszystko gra:
Kod: C / C++
No to gdzie jest błąd? W symulatorze? Przejrzałem sekcję "known issues" i niczego w sprawie ATtiny87 i przerwań nie znalazłem. Macie jakiś pomysł?
Na razie programuję "na sucho" i nie mam możliwości sprawdzenia na fizycznym tiny87, ale praktyka zazwyczaj pokazuje, że symulator się jednak nie myli...
Czy mógłby ktoś przesymulować ten fragment u siebie? U mnie najpłynniej poszło z wyłączoną optymalizacją.
