Forum: Mikrocontroller und Digitale Elektronik Gruppen Flags unterscheiden


von Markus (Gast)


Lesenswert?

Hallo

Ich arbeite mit einem uC STM32F072C8T6 und bin gerade dabei mir die 
Funktion eines TSC näher anzusehen.
Ich lese auf S 317 im Reference Manual:

Bits 23:16 GxS: Analog I/O group x status
These bits are set by hardware when the acquisition on the corresponding 
enabled analog I/O group x is complete. They are cleared by hardware 
when a new acquisition is started.

Nun, ich kann Gruppenacquisitionen gleichzeitig starten. (zB Gruppe 1 
und 2)
Eine Gruppe hat 4 IOs.
Man nehme an, dass einfachheitshalber eine Gruppe 1 Touchkey beinhaltet.
Laut Beschrieb oben würde es nun bedeuten, dass am Ende einer 
Acquisition ein Flag EOAF gesetzt wird und zusätzlich das Bit gesetzt, 
welches kennzeichnet, welche Gruppe gerade fertig wurde.

Was ich nicht verstehe ist, wie die Unterscheidung genau passiert.

Warum?
EOAF wird gesetzt und ein Interrupt wird aufgerufen. OK
Im Interrupt steht beispielsweise:

wenn bit GS2 gesetzt
leseZählerwert_TSC_Gruppe2
sonst
leseZählerwert_TSC_Gruppe1

Sagen wir jetzt, dass die Gruppe1 den Interrupt auslöst und das G1S bit 
gesetzt ist. Wenn das Programm an der Stelle "sonst" ankommt, wird 
Gruppe 2 gerade fertig und löst ebenfalls ein Interrupt aus. G2S ist 
also auch gesetzt.

Jetzt steht direkt hinter dem laufenden Interrupt (ausgelöst durch 
Gruppe1) noch ein Interrupt (ausgelöst durch Gruppe 2).

Es ist also zu erkennen, dass im ersten Interrupt der 
Zählerwert_TSC_Gruppe2 nicht gelesen wird, da das Bit noch nicht gesetzt 
ist.
Das Programm führt den Interrupt aus, liest den Zählerwert für Gruppe1 
und kommt direkt nochmals hinein und liest den Zählerwert für Gruppe 2.
Damit funktioniert das ganz gut.
Habe ich das soweit richtig verstanden?

von STK500-Besitzer (Gast)


Lesenswert?

Markus schrieb:
> "sonst"

Du darfst halt nicht mit der Standard-Alternative arbeiten, sondern 
musst saemtliche Bits explizit abfragen.

Markus schrieb:
> wenn bit GS2 gesetzt ==> leseZählerwert_TSC_Gruppe2
> wenn bit GS1 gesetzt ==> leseZählerwert_TSC_Gruppe1
etc. pp.

Man koennte das auch noch in eine Schleife packen, die solangs laeuft, 
wie das Flag gesetzt ist.


PS: Der Imperativ von "Lesen" heisst "Lies"

von Markus (Gast)


Lesenswert?

STK500-Besitzer schrieb:
>
> Man koennte das auch noch in eine Schleife packen, die solangs laeuft,
> wie das Flag gesetzt ist.

Wie welches Flag?

> PS: Der Imperativ von "Lesen" heisst "Lies"

Danke:)

Jetzt nachdem das so verstanden wurde frage ich einmal weiter.
Das EOAF Flag wird gesetzt, wenn eine Gruppe fertig ist.
Wenn es zB 3 Gruppen sind, kommt man auch 3 mal in den selben Interrupt.
Die Bits GxS werden aber erst hardwaremässig gelöscht, wenn die Acq. neu 
gestartet wird.
Das heisst, dass erstens irgend eine Gruppe immer 3 mal gelesen wird und 
zweitens darf ich erst eine neue Aquisition starten, wenn ein Zähler den 
Wert 3 erreicht hat.

Wie meinst du das jetzt mit der Schleife?

von STK500-Besitzer (Gast)


Lesenswert?

Markus schrieb:
> Wie welches Flag?

EOAF
Der Zusammenhang mit dem Interrupt war mir nicht klar.

> Wenn es zB 3 Gruppen sind, kommt man auch 3 mal in den selben Interrupt.
> Die Bits GxS werden aber erst hardwaremässig gelöscht, wenn die Acq. neu
> gestartet wird.
Vermutlich... Ich habe mit der Controller-Funktion noch nie gearbeitet.

> Das heisst, dass erstens irgend eine Gruppe immer 3 mal gelesen wird und
> zweitens darf ich erst eine neue Aquisition starten, wenn ein Zähler den
> Wert 3 erreicht hat.

Das waeren insgesamt 3 Abfragen. Wo ist das Problem?
Es geht doch nur darum, ob das jeweile Flag GSx gesetzt ist, oder?

von Markus (Gast)


Lesenswert?

STK500-Besitzer schrieb:

> Vermutlich... Ich habe mit der Controller-Funktion noch nie gearbeitet.

Ich auch nicht.
Das Manual beschreibt ja, dass EOAF gesetzt wird, wenn eine Gruppenacq. 
abgeschlossen ist.
Also müssen demnach 3 Interrupts kommen. Aber das kann ich ja mal 
testen.

> Das waeren insgesamt 3 Abfragen. Wo ist das Problem?
> Es geht doch nur darum, ob das jeweile Flag GSx gesetzt ist, oder?

Ja es ging mir darum, ob du das auch so verstehst wie ich. Ich frage im 
Interrupt die GxS bits einzeln ab.
Danke dir für deinen Beitrag.

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.