Verständnisproblem Register

Gast #2638714
Lesenswert?

Hallo Leute,

ich versuche gerade das datenblatt des AT90CAN32 zu lesen. Leider gibt 
es einen Satz den ich zwar sprachlich verstehe aber nicht inhaltlich. 
Ich hoffe ihr könnt mir helfen.

Interrupt requests signals are all visible in the TIFRn. All interrupts 
are individually masked with the TIMSKn.

Vielen Dank schonmal :-)
Gast #2638721
Lesenswert?

Hi

In TIFRn befinden sich die Flags für die einzelnen 
Timer-Interruptquellen. Diese werden immer wenn ein entsprechendes 
Ereignis eintritt gesetzt. Ob sie dann einen Interrupt auslösen wird im 
Register TIMSKn eingestellt.

MfG Spess
Gast #2638734
Lesenswert?

Sorry. ich verstehe leider nur Bahnhof.

Es geht ja um einen 16-Bit-Timer. da geht es ja darum das ich ein 
compare wert vorgebe. habe ich ein compare match, als wurde beim 
hochzählen eben dieser wert erreicht wird ein interrupt ausgelöst, oder?
#2638745
Lesenswert?

Jürgen schrieb:
> Sorry. ich verstehe leider nur Bahnhof.
>
> Es geht ja um einen 16-Bit-Timer. da geht es ja darum das ich ein
> compare wert vorgebe. habe ich ein compare match, als wurde beim
> hochzählen eben dieser wert erreicht wird ein interrupt ausgelöst, oder?

Nein. Es geht in erster Linie nicht um einen Timer.

Es geht darum wie Interrupts bearbeitet werden.

Tritt etwas Interruptwürdiges auf, so wird das entsprechende Bit im TIFR 
Register gesetzt um dort festzuhalten, dass das Ereignis aufgetreten 
ist.

Ob dieses Ereignis dann dazu führt, dass die zugehörige ISR aufgerufen 
wird oder nicht, entscheidet das TIMSK Register. Nur wenn das zugehörige 
Bit dort gesetzt ist, mündet das ganze in einem Aufruf der ISR.


Alle Interrupt-Mechanismen auf dem AVR funktionieren so:
Mit einem Bit wird festgehalten, dass das Ereignis aufgetreten ist
Mit einem anderen Bit wird festgelegt, ob die dazu gehörende ISR 
aufgerufen wird.

Das ein bestimmtes Ereignis aufgetreten ist, wird IMMER mit einem Bit 
festgehalten. Egal ob eine ISR dafür vereinbart wurde oder nicht. Egal 
ob die Interrupts generell freigegeben sind (sei()) oder nicht (cli()).
Gast #2638753
Lesenswert?

Hi

>habe ich ein compare match, als wurde beim
>hochzählen eben dieser wert erreicht wird ein interrupt ausgelöst, oder?

Das Flag wird in TIFR gesetzt. Ein Interrupt wird aber nur ausgelöst, 
wenn je nach Compareregister das Bit OCIE1A, OCIE1B oder OCIE1C in 
TIMSK1 gesetzt ist.

MfG Spess
Gast #2638761
Lesenswert?

Danke Leute.
Ich komme dem Verständniss immer näher. Jetzt ist mir zwar noch die 
genaue zuordnung welcher Interrupt genau welches Bit setzt und wie die 
zuordnung zu einer ISR funktioniert unklar.
Aber da lese ich erstmal das Dastenblatt weiter. ich bin ja erst am 
Anfang des Kapitels.

Ich danke euch
#2638772
Lesenswert?

Jürgen schrieb:
> Danke Leute.
> Ich komme dem Verständniss immer näher. Jetzt ist mir zwar noch die
> genaue zuordnung welcher Interrupt genau welches Bit setzt und wie die
> zuordnung zu einer ISR funktioniert unklar.
> Aber da lese ich erstmal das Dastenblatt weiter. ich bin ja erst am
> Anfang des Kapitels.

Das wird dir alles spätestens im letzten Abschnitt des Kapitels (in 
deinem Fall Timer) klar, in dem alle Register mit allen Bits und was sie 
bedeuten genauestens aufgeschlüsselt sind.
#2638776
Lesenswert?

mit den TIMSK-bits schaltet man den interrupt an und aus - grundsätzlich 
also.

dann kommt je nach interrupt ein ereignis - wenn das eintritt wird das 
TIFR-bit gesetzt. jedes mal.

dann kommt der interne interrupt-controller vom atmega ins spiel..
sofern interrupts erlaubt sind, schaut der nach ob
TIFR gesetzt und TIMSK gesetzt ist, wenn ja dann wird das TIFR-bit 
gelöscht und der interrupt angesprungen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren