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.
Gast
#4063463
lass mal das static hier weg
1 | |
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 | |
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.
Hat geklappt, danke
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.