Forum: Mikrocontroller und Digitale Elektronik Verständnisproblem Register


von Jürgen (Gast)


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 :-)

von spess53 (Gast)


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

von (prx) A. K. (prx)


Lesenswert?

Die diversen Interrupt-Quellen setzen einzelne Bits im TIFR. Welche 
dieser Ursachen dann konkrete Interrupts auslösen wird vom TIMSK 
kontrolliert.

von Jürgen (Gast)


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?

von Falk B. (falk)


Lesenswert?

@  Jürgen (Gast)

>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?

Ja, siehe Interrupt oder Soft-PWM.

MFG
Falk

von Karl H. (kbuchegg)


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()).

von EGS_TI (Gast)


Lesenswert?

Wenn das da so steht, wird das wohl so sein.

von spess53 (Gast)


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

von Jürgen (Gast)


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

von Karl H. (kbuchegg)


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.

von Washington I. (washington_i)


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.

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
Noch kein Account? Hier anmelden.