Forum: Mikrocontroller und Digitale Elektronik kann PinChange Interrupt Flag nicht zurücksetzen


von SteFan (Gast)


Lesenswert?

Hallo,

ich versuche seit Stunden verzweifelt das PIN CHANGE INTERRUPT FLAG 0 
zurück zusetzen (Atmega164PA)

Zitat aus Datenblatt:

Bit 0 – PCIF0: Pin Change Interrupt Flag 0
When a logic change on any PCINT7..0 pin triggers an interrupt request, 
PCIF0 becomes set (one). If the I-bit in SREG and the PCIE0 bit in EIMSK 
are set (one), the MCU will jump to the corresponding Interrupt Vector. 
The flag is cleared when the interrupt routine is executed. 
Alternatively, the flag can be cleared by writing a logical one to it.

demnach muss ich doch mit

PCIFR |= (1<<PCIF0);

dieses verdammte Flag clearen können (auch aus der IR-Routine heraus) 
oder??

aber es bleibt felsenfest gesetzt laut AVR-Studio...

bitte um Hilfe

Gruß Stefan
von hotzel (Gast)


Lesenswert?

SteFan schrieb:
> aber es bleibt felsenfest gesetzt laut AVR-Studio...

Im Simulator oder auf der realen Hardware via Jtag?
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

SteFan schrieb:
> aber es bleibt felsenfest gesetzt laut AVR-Studio...
Simulation oder Debug?
Kommt sicher keine 2. Interruptflanke mehr nach?
von Dieter Werner (Gast)


Lesenswert?

Bei PIC Controllern muss man den Port lesen zu dem der entsprechende 
Pin gehört, sonst wird der Pin immer noch als "changed" erkannt und das 
Flag sofort wieder gesetzt.
von Frank Q. (franki)


Lesenswert?

SteFan schrieb:
> demnach muss ich doch mit
>
> PCIFR |= (1<<PCIF0);

Nein, nur so!
PCIFR = (1<<PCIF0);
von SteFan (Gast)


Lesenswert?

auf realer Hardwar mit JTAG

es scheint sich um ein EMV Problem zu handeln.

Ich werde permanent mit mit dem PinChange-Interrupt zugespamt, und zwar 
wenn ich mit JTAG Debugge!

Im normalem Betrieb werden kaum "falsche" Interrupts ausgelöst

Warum ich allerdings das Flag nicht zurücksetzen kann (per Mausklick via 
JTAG, oder per Anweisung im Programm), obwohl im Code an dieser Stelle 
alle Interrupts deaktiviert sind weis ich immer noch nicht.
von m.n. (Gast)


Lesenswert?

SteFan schrieb:
> obwohl im Code an dieser Stelle
> alle Interrupts deaktiviert sind weis ich immer noch nicht.

Steht denn in PCMSK0 auch 0x00?
Du kannst alle Interrupts deaktivieren, aber die Flags können dennoch 
gesetzt werden, was ja auch nicht schlimm ist.
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

SteFan schrieb:
> Warum ich allerdings das Flag nicht zurücksetzen kann (per Mausklick via
> JTAG, oder per Anweisung im Programm), obwohl im Code an dieser Stelle
> alle Interrupts deaktiviert sind weis ich immer noch nicht.

Vermutlich, weil das nächste pin change event sofort wieder von der
Hardware getriggert wird.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.