Forum: Mikrocontroller und Digitale Elektronik MSP430 Multiplexing GPIO und SPI


von Johannes (Gast)


Lesenswert?

Hallo,

ich verwende den MSP430F2013 und habe dort folgendes Problem:

Am Port P1.6 hängt einerseits der SPI (MOSI) und zusätzlich soll es als 
GPIO verwendet werden (HIGH-> ADC auslesen -> Low).

Nur leider funktioniert das mit dem High nicht.
1
P1SEL &= ~BIT6;
2
P1DIR |= BIT6;
3
P1OUT |= BIT6;

Damit versuche ich das "Beinchen zu heben". Laut Debugger sind die 
Register auch richtig gesetzt. Nur sehe ich am Ausgang kein HIGH.

Muss ich noch etwas anderes einstellen?

Schönen Gruß,
Johannes

von LuXXuS 9. (aichn)


Lesenswert?

P1SEL ist hier mal nicht ausschlaggebend für die Funktion des Pins. Die 
USI-Register sind dominant. Ist der Pin hier als MOSI gesetzt, ist P1SEL 
don't care.

Du musst also im USICTL0 USIPE6 aus dem Register nehmen (USICTL0 &= 
~USIPE6), dann ist der Pin wieder frei. Hierfür solltest du zusätzlich 
den USI in den Reset-State setzen, da keine Änderungen am Register 
vorgenommen werden sollten (außer USICNT und USISR natürlich), solange 
der USI aktiv ist.

Gruß, LuXXuS

von Johannes (Gast)


Lesenswert?

Gut, ich habe den Fehler gefunden:

Ich muss noch den Port 6 von USICTL0 auf Low schalten:

USICTL0 &= ~USIPE6;

von LuXXuS 9. (aichn)


Lesenswert?

Johannes schrieb:
> Port 6

Pin ;-)

Nur falls du auch noch Port 2 benutzen willst: Hier ist es ähnlich - 
wenn du z.B. den Timer benutzen möchtest, dann geht das über P2SEL 
erstmal nicht, da Port 2 für den Quarz reserviert ist. Hier muss im 
Register der Quarz deaktiviert werden. Als GPIO kannst du ihn jedoch 
verwenden.

Weiß nicht, wieso das so gelöst ist, aber naja...

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.