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?
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);
Nein daran liegts nicht. Ich habe jetzt auch eine DEBUG_LED (LED_STATUS) eingebaut, die immer leuchtete nach dem ISR, also daran liegts nicht.
lass mal das static hier weg
1 | static volatile uint8_t spi_shift_data; |
Das sollte nix ändern da es ja für den Moment in dem ISR klappt ... jop, ändert nix!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.