Read Input Pin MSP430

Gast #6883864
Lesenswert?

Hallo und guten Morgen,

ich habe das ein kleines Verständnisproblem was das Einlesen eines HIGH 
/ LOW Pegel an einem IO Pin am MSP430 betrifft.
1
#define IO_ENABLE_PORT              GPIO_PORT_P1
2
#define IO_ENABLE_PIN               GPIO_PIN5
3
#define IO_OUT                      GPIO_PIN3
4

5
//PIN1.3 Pull up Controller
6
GPIO_setAsInputPin(IO_ENABLE_PORT, IO_OUT);
7
P1REN |= BIT3;
8
P1OUT &= ~BIT3;

Muss der IO Pin wie im Codeausschnitt gezeigt bewusst auf einen Pegel 
gesetzt werden? => P1OUT &= ~BIT3
Gast #6884523
Lesenswert?

Hallo dev,

hier wird nicht der Pegel geschaltet.
P1REN |= BIT3;  //schaltet den Pullup/Pulldown Widerstand ein
P1OUT &= ~BIT3; //schaltet den Widerstand auf GND -> Pulldown
P1OUT |=  BIT3; //würde den Widerstand auf VCC schalten -> Pullup

gelesen wird dann über P1IN:

result = P1IN & BIT3; //==0(false): Pin ist low; >0(true): Pin ist high
Gruß wv
Gast #6885021
Lesenswert?

Hallo danke für deinen Post.

Für den Eingangspin soll der interne Pull-up Wiederstand benutzt werden.
Dann müsste dies beim initialieren so aussehen:

P1REN |= BIT3;  //schaltet den Pullup/Pulldown Widerstand ein
P1OUT |=  BIT3; //würde den Widerstand auf VCC schalten -> Pullup

Die oberen beiden Zeilen werden nur einmal ausgeführt.

Das EInlesen funktioniert dann so:

result = P1IN & BIT3;
Gast #6894220
Lesenswert?

Ich habe da noch möglicheriweise ein Problem mit dem EInlesen eines IO 
Pins.
Mit dem IO Pin so ein SIgnal eingelesen werden. Sobald der Pegel von 
HIGH nach LOW wechselt soll der Interrupt ausgelöst werden. Der IO Pin 
soll einen internen Pullup Wiederstand nutzen und auf Input High 
geschaltet sein. Mache ich da womöglich was falsch?
1
#define IO_ENABLE_PORT              GPIO_PORT_P1
2
#define IO_ENABLE_PIN               GPIO_PIN5
3
#define IO_OUT                      GPIO_PIN3
4

5

6
GPIO_setAsInputPin(IO_ENABLE_PORT, IO_OUT);
7

8
GPIO_enableInterrupt(IO_ENABLE_PORT, IO_OUT);
9
GPIO_interruptEdgeSelect(IO_ENABLE_PORT, IO_OUT, GPIO_HIGH_TO_LOW_TRANSITION);
10
GPIO_clearInterruptFlag(IO_ENABLE_PORT, IO_OUT);
11
P1REN |= BIT3;
12
P1OUT |= BIT3;
13

14

15
#pragma vector = PORT1_VECTOR
16
/*FUNCTION*/ __interrupt void requestLine_interrupt()
17
{        
18
    if(P1IFG & IO_OUT)
19
    {
20
        // increment counter
21
        GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN3);
22
    }
23
}

MSP430 genauer TYP: MSP430FR5949

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