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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Martin F. (martin_f70)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
lass mal das static hier weg
static volatile uint8_t spi_shift_data;

von Martin F. (martin_f70)


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

von Karl H. (kbuchegg) (Moderator)


Bewertung
1 lesenswert
nicht lesenswert
Das ist dein ganzes Programm?

Wo ist dann die ISR, die zu
    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)


Bewertung
0 lesenswert
nicht lesenswert
Hat geklappt, danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.