Forum: Mikrocontroller und Digitale Elektronik SREG beim ATMega88


von Holger P. (Gast)


Lesenswert?

Frohe Ostern,
verstehe ich das richtig das ich das T-Bis im SREG Register für mich 
frei zur Verfügung habe so das ich es für mich gebrauchen darf. Also nur 
ich verändere die Werte in dem T-Bit?

von MWS (Gast)


Lesenswert?

Yep. Steht so im AVR Instruction Set Pdf:

"T: Transfer bit used by BLD and BST instructions"

von Holger P. (Gast)


Lesenswert?

Danke für die Antwort. Auf Seite 11 steht das, nur ist mein Englisch 
nicht das beste und ich wollte mal nummersicher gehen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Kleiner Tipp: Die Mega48/88/168/328 haben zwei Register (GPIOR1 und 
GPIOR2) die du als generelle Register für Flags o.ä. benutzen kannst.

von Holger P. (Gast)


Lesenswert?

Matthias Sch. schrieb:
> GPIOR1

Matthias Sch. schrieb:
> Kleiner Tipp: Die Mega48/88/168/328 haben zwei Register (GPIOR1 und
> GPIOR2) die du als generelle Register für Flags o.ä. benutzen kannst.

Klasse Danke. General purpose = Allzweck ... meine rede mein Englisch. 
Wird mir wohl immer zum Nachteil sein.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Matthias Sch. schrieb:
> Kleiner Tipp: Die Mega48/88/168/328 haben zwei Register (GPIOR1 und
> GPIOR2) die du als generelle Register für Flags o.ä. benutzen kannst.

Die Register hätte ich auch schon wieder fast vergessen. :-)

Werden die drei GPIOR eigentlich von Compilern für irgendwelche Zwecke 
genutzt, oder kann man sie als User bedenkenlos verwenden, um 
irgendwelche Daten zu speichern? Schneller als Stack-Zugriffe sind "in" 
und "out" ja allemal.

von katastrophenheinz (Gast)


Lesenswert?

Markus Weber schrieb:
> Werden die drei GPIOR eigentlich von Compilern für irgendwelche Zwecke
> genutzt

AVR_gcc: Nein, werden sie nicht, solange du sie nicht explizit zuweist, 
zB. durch

#define gflags GPIOR0

Ich würde auch immer mit GPIOR0 loslegen, weil das eine Adresse < 0x20 
hat (bei Mega48/88/168/328).

Damit kann der Compiler SBI, CBI, SBIS, und SBIC verwenden. Reduziert 
Codegröße.

von Falk B. (falk)


Lesenswert?

@  katastrophenheinz (Gast)

>Ich würde auch immer mit GPIOR0 loslegen, weil das eine Adresse < 0x20
>hat (bei Mega48/88/168/328).

>Damit kann der Compiler SBI, CBI, SBIS, und SBIC verwenden. Reduziert
>Codegröße.

Und ist atomar, siehe Interrupt.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

katastrophenheinz schrieb:
> Ich würde auch immer mit GPIOR0 loslegen, weil das eine Adresse < 0x20
> hat (bei Mega48/88/168/328).

Hehehe, und ich habe GPIOR0 vergessen. Sind also wirklich insgesamt 3 
von den Dingern:
0x1E GPIOR0 bit addressierbar
0x2A GPIOR1
0x2B GPIOR2

Jetzt wirds aber spannend. Wie legt man denn nun eine Variable da rein?
1
register volatile uint8_t mFlags asm("GPIOR0");
scheint jedenfalls nicht zu klappen.
IAR nimmt etwas wie
1
register volatile uint8_t mFlags @0x1e;
aber das geht ja bei AVR GCC nicht.

von (prx) A. K. (prx)


Lesenswert?

Matthias Sch. schrieb:
> Jetzt wirds aber spannend. Wie legt man denn nun eine Variable da rein?

Zeitumstellungsgeschädigt? Hatte katstrophenheinz doch geschrieben:
#define mFlags GPIOR0

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

A. K. schrieb:
> Zeitumstellungsgeschädigt? Hatte katstrophenheinz doch geschrieben:
> #define mFlags GPIOR0

Das habe ich auch gelesen. Also etwas genauer: Die Frage ist, wie 
erkläre ich ein typedef oder ne union, um tatsächlich einzelne Flags 
darin anzusprechen.

Nehmen wir z.B. an, ich habe so etwas:
1
typedef struct motorFlags
2
{
3
  uint8_t motorStopped : 1;     //! Is motor stopped?
4
  uint8_t motorSynchronized: 1; //! Is motor synchronized? 
5
  uint8_t actualDirection : 2;  //! The actual direction of rotation.
6
  uint8_t desiredDirection : 1; //! The desired direction of rotation.
7
  uint8_t driveWaveform : 2;    //! The current waveform that should be produced.
8
} mFlags_t;
9
// Variable sieht dann so aus:
10
register volatile mFlags_t fastFlags asm("r9"); // direkt im Register
Wie packe ich so etwas nun in GPIOR0?

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.