PINSELx berechnen(LPC2214)?

Gast #913942
Lesenswert?

Hallo,

ich verwende einen LPC2214, ich weiß aber leider nicht genau wie ich auf 
den PINSELx Wert komme. Laut Datenblatt, z.B. P0.8 PWM4

PINSEL0 32-Bit

PINSEL0 Pin name Value Function
17:16   P0.8     0 0   GPIO Port 0.8
                 0 1   TxD UART1
                 1 0   PWM4
                 1 1   Reserved

Was sagt 17:16 aus? Das die 16. u. 17. Bit eine 1 ist oder? Wo kommt die 
Value hin? Wie wären die HEX-Werte für GPIO, UART und PWM. Danke
Gast #914026
Lesenswert?

Hex-Wert ist später mühsam nachvollziehbar. Übersichlier wir des wenn 
die Bitnummern "sichbar" bleiben. In der Art
PINSEL0 = ( PINSEL0 & ~( 3L << 16 ) ) | ( 2L << 16 );
Auf "deutsch": PINSEL0 einlesen, alle Functionsbits des betreffenden 
Pins löschen (hier bit 16 und 17), benötigte Funktionsbits setzen (hier 
bit 17) => Function 10. Lässt sich recht gut in Macro packen
Gast #915359
Lesenswert?

Welche Fragen bleiben denn offen? Überhaupt versucht, meinen Vorschlag 
nachzuvollziehen oder so? Den Abschnitt des User-Manuals durchgelesen 
(nicht nur die Tabellen)? Einige Beispielcodes für die Controllerfamilie 
angeschaut oder so? Value ist eine Bitmaske und man muss zum Einstellen 
der Funktion dafür sorgen, dass die genannten Bits in PINSEL diese Maske 
wiederspiegeln.
Da suspend-mode wohl grade aktiv ist, noch ein "no-brainer" - 
hoffentlich:
1
#define VALUE_00 0L /* 0b00 */
2
#define VALUE_01 1L /* 0b01 */
3
#define VALUE_10 2L /* 0b10 */
4
#define VALUE_11 3L /* 0b11 */
5
#define PINFUNCSET( reg_, bit_, value_ ) \
6
reg_ = ( reg_ & ~( 3L << bit_ ) ) | ( value_ << bit_ )
7

8
// Anwendungsbeispiele (lt. Angaben oben)
9
PINFUNCSET( PINSEL0, 16, VALUE_10 ); // PWM
10
PINFUNCSET( PINSEL0, 16, VALUE_00 ); // GPIO
11
PINFUNCSET( PINSEL0, 16, VALUE_10 ); // wieder PWM
12
// uswusf.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren