Read Input Pin MSP430

Gast #6883864
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.