Timer Interrupt(gcctest2.c)

Gast #236938
Tach :)

Ich sitze nun seit etwa zwei Stunden an meinem Interrupt Problem...
Auf Suche hab ich mich auch schon begeben, hier im Forum, google und
altavista. Rausgekommen ist nur, das in gcctest2.c anscheinend
eine led mithilfe des timerinterupts zum blinken gebracht wird.
Nun wäre diese Datei warscheinlich eine riesige Hilfe, da mein
Programm
ziemlich ähnlich funktionieren soll. Ich hab mir mittlereweilen schon
zwei alte WinAvr installationen gesaugt und nirgends ist die Datei
enthalten-hat die vielleicht noch jemand?

Falls das nicht der Fall ist, hier mal ein ausschnitt aus meinem
Programm..

#include <sig-avr.h>

SIGNAL(SIG_OVERFLOW1)
{
  PRINT("N");
  outp(0, TCNT1H);// Reset Timer
  outp(0, TCNT1L);
}
//..
main()
{
//------------------------
// Timer 1 init
//-----------------------

  outp(0, TCCR1A);
  outp(4, TCCR1B);// Prescaler /256
  outp(0, TCNT1H);
  outp(0, TCNT1L);

  sbi(TIMSK, TOIE1);//enable timer
  //.......
}

Das ist eigentlich alles, was mit dem Timer zu tun hat, und ich sollte
doch eigentlich immer mal wieder ein N über den uart bekommen-es tut
sich aber rein gar nichts. An der Funktion PRINT liegts nicht, die
läuft einwandfrei...Im Moment ist mir auch noch egal wieviele Male
ich den Interrupt bekomme, es soll sich einfach mal etwas tun...
Gast #236941
> das gibts in meiner alten gcc version leider noch nicht
Wirklich?!
Dann informier dich mal was sei() macht! Es gibt nämlich noch sowas wie
ein "Global Interrupt Enable" Flag.
Gast #236942
ja ich weiss, das würde alle interupts einschalten, aber sollte doch
auch so funktionieren wie ichs gemacht habe...weil sei(); gibt mir nen
fehler beim gcc ;)
Gast #236943
Hallo,

schreib statt
#include <sig-avr.h>
erst mal
#include <avr/signal.h>
#include <avr/interrupt.h>

und probiers noch mal.

Bei sei() gibts deshalb eine Fehlermeldung weil sei() in interrupt.h
definiert ist.

Und:
Um mit Interrupts arbeiten zu können muss immer das Globale Interrupt
Flag gesetzt sein.

Gruß
Christian
Gast #236945
ok, hab nun die interrupt.h auch noch eingebunden, hab die wohl
übersehen :S

Mein gcc ist aber wirklich ein antikes Stück, avr/interrupt.h
gibts noch gar nicht. Welche Version es ist kann ich nicht wirklich
sagen, ich hab den sicher vor nem Jahr gedownloaded, dann ein Programm
angefangen und nun fertig geschrieben, desshalb verwende ich auch
keine
neuere Version. Nicht mal beim compilieren gibt der gcc seine version
bekannt :(

Wie auch immer das Problem mit dem Interrupt besteht immer noch,
obwohl
ich nun auch sei(); verwende...

>Viele Fragen würden sich nach Lesen des Tutorials erledigen ...

Kenne ich sehr wohl nur habe ich da anscheinend nicht alles gelesen,
sondern nur ab den verschiedenen Registern, um die Timer zu setzen,
dass da oben noch #include <avr/interrupt.h> stand sah ich leider nicht
...
Gast #236947
ahaaa ;-) danke :P 3.0.2 hab ich...also ziemlich alt, ich würde sogar
sagen das war noch nicht als package mit pn2 und so damals, also noch
nicht als "winavr"...
Gast #236948
AAAAAARRGG ich vollidiot lol :D

Ich hab sei(); erst nach meinem üblichen ata init eingefügt.
Naja und zu meinen Tests hab ich die hdd eben nicht immer
angeschlossen,
folglich auch kein erfolgreicher init damit auch kein sei();
Naja jedefall gehts jetzt suppi, muchas gracias ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.