Forum: Mikrocontroller und Digitale Elektronik Variable nach Interrupt zurückgesetzt


von Martin F. (martin_f70)


Angehängte Dateien:

Lesenswert?

Hallo!
Ich bin auf einem atmega32u4. Ich möchte die Variable, ich nenne sie 
auch REGISTER "spi_shift_data" im externen Interrupt INT1 das 0. Bit 
(X_EN) setzten. Das klappt auch soweit, aber wenn ich den ISR wieder 
verlasse, wir das 0. Bit wieder gelöscht. Wieso?

von Falk B. (falk)


Lesenswert?

Gnaz einfach. Du hast keinen INT2 und INT3 Vektor definiert. 
Wahrscheinlich hängen deine IOs in der Luft und lösen damit zufällig 
einen INT2 oder INT3 aus. Da der aber nicht existiert, macht die CPU 
einen Reset (das regelt der avr gcc so).

Probier es mal so. Man darf IMMER nur die Interrupts freigeben, für die 
auch eine ISR definiert wurde!

EIMSK = _BV(INT1);

von Martin F. (martin_f70)


Angehängte Dateien:

Lesenswert?

Nein daran liegts nicht. Ich habe jetzt auch eine DEBUG_LED (LED_STATUS) 
eingebaut, die immer leuchtete nach dem ISR, also daran liegts nicht.

von Steffen (Gast)


Lesenswert?

lass mal das static hier weg
1
static volatile uint8_t spi_shift_data;

von Martin F. (martin_f70)


Lesenswert?

Das sollte nix ändern da es ja für den Moment in dem ISR klappt ... jop, 
ändert nix!

von Karl H. (kbuchegg)


Lesenswert?

Das ist dein ganzes Programm?

Wo ist dann die ISR, die zu
1
    TIMSK0 = _BV(OCIE0A);
gehört?

Du nimmst das nicht ernst!
WEnn du einen Interrupt freigibst, für den es keine ISR gibt, dann führt 
das zu einem Prozessorreset. Und es spielt dabei keine Rolle, welchen 
Interrupt du freigibst.
----> man gibt keine Interrupts frei, für die man keine ISR hat.

von Martin F. (martin_f70)


Lesenswert?

Hat geklappt, danke

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.