Forum: Mikrocontroller und Digitale Elektronik P4 bei SiLabs 500 ansprechen


von Mr Bean (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich arbeite hier gerade mit dem SiLabs F500 und möchte die Pins von Port 
4 gerne als Ein/Ausgänge benutzen. Leider kann ich diese nicht 
ansprechen. Habe versucht die Ausgänge gleich wie bei den anderen Ports 
zu definieren:

SBIT (RUN_3V3, SFR_P4, 0);
SBIT (RUN_1V2, SFR_P4, 1);

Bei Port 1 und 3 funktioniert das wunderbar. Nur wenn ich den Port 4 
benutzen will bekomme ich folgende Compilermeldung:

"*** ERROR C142 IN LINE 25 OF MAIN.C: 'SFR': invalid base address"
"*** ERROR C142 IN LINE 26 OF MAIN.C: 'SFR': invalid base address"

Ich habe schon versucht die Datei C8051F500_defs.h anzupassen. Leider 
ohne Erfolg.
Die Adresse des P4 Latch registers ist 0xB5. Es scheint aber so dass 
dieses Register nicht Bitaddresierbar ist. Das sollte es doch aber, 
damit ich jeden Pin einzeln ansprechen kann!?

Hat von euch schon jemand mit diesem Controller gearbeite und kann mir 
sagen was ich bei Port 4 beachten muss?
Scheint schon ein etwas besonderer Port zu sein, ist ja auch nur bei der 
großen Package Variante verfügbar.

Vielen Dank schonmal im Voraus!

Grüße

Bean

von Peter D. (peda)


Lesenswert?

Mr Bean schrieb:
> Die Adresse des P4 Latch registers ist 0xB5. Es scheint aber so dass
> dieses Register nicht Bitaddresierbar ist.

Stimmt.
Bits ändern, lesen geht nur über &,|,^.


Peter

von Bernd N (Gast)


Lesenswert?

#define TestPin    P4_1

TestPin = 1;
TestPin = 0;

So sollte sich ein PIN von P4 ansprechen lassen.

Verwendest du den SDCC oder den Keil Compiler ?

von Bernd N (Gast)


Lesenswert?

Sehe gerade P4 nicht BITadressierbar... das wußte ich nicht.

von Mr Bean (Gast)


Lesenswert?

Hallo

Hm, also ich verwende den Keil compiler. Werde aber später auf den 
Tasking compiler umsteigen. Wie spreche ich den Port dann an, wenn 
dieser nicht Bitaddressierbar ist?

Grüße

Bean

von Mr Bean (Gast)


Lesenswert?

Ok, habs mit Makros hin bekommen:

#define SETBIT(x,n) ((x)|=1<<(n))
#define CLEARBIT(x,n) ((x)&=~(1<<(n)))
#define GETBIT(x,n) ((x)&1<<(n))

Danke!

Bean

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.