mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Interrupts beim MSP430F169


Autor: Björn W. (bjoern2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,


ich habe ein kleines Problem. Es gelingt mir nicht, einen Interrupt zu 
erzeugen, bzw. zu detektieren.

Ich habe eine LED an den Ausgang Pin 2.7 angeschlossen. Die LED ist über 
einen Widerstand auf Masse gelegt, sollte also leuchten, wenn der 
Ausgang auf high liegt. Das funktioniert auch schon mal.
Gleichzeitig habe ich einen Taster über einen 1,8kohm Widerstand auf 
3,3Volt gelegt und an den Pin 1.0 angelegt. Der Pin ist auch über ca. 
250kohm auf Masse. Also sollten an Pin 1.0 entweder 0V, bzw. im Falle 
eines betätigten Schalters 3,3Volt liegen.

Nun versuche ich, die LED nach Programmstart leuchten zu lassen und über 
einen Interrupt an P1.0 (steigende Flanke) die LED aus zu machen.

Dazu nutze ich folgenden Code unter IAR:

_______________________
#include <msp430x16x.h>


int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;  //watchdog aus
  P2DIR=0xFF;      //port 2 = Output
  P2SEL=0x00;      //alle ports als GPIO
  P2IE=0x00;      //Port 2 interrupt ausmachen
  P2OUT=0x02;      //initial alle LEDs aus (P2.1 LED is active low)

  P1DIR=0x00;                   //P1 alle als input
  P1SEL=0x01;                   //P1.0 as GPIO

  P1IE=0x01;                    //P1.0 interrupt einschalten
  P1IES=0xFF;                   //interrupt on rising edge

  _BIS_SR(GIE);      //Interrupts aktivieren

  P2OUT=0x82;      //LED einschalten

  for(;;)      //Warteschleife
  {
  }

}

#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
  P2OUT&=~0x82;      //LED ausschalten
  P1IFG&=~0x00;                 //Interrupt flag löschen
}

_____________________________

Leider funktioniert es nicht so, wie es sollte. Es wird kein Interrupt 
an P1.0 detektiert und die LED leuchtet immer. Ich habe im Debug-Modus 
unter IAR festgestellt, das einige Male ein Reset ausgelöst wurde, was 
ich mir jedoch nicht erklären kann.

Wer hat eine Idee, was ich falsch mache?

Vielen Dank schon einmal für evtl. Tips.

Gruß,
Björn

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
Interrupt an Port1 oder 2???? ;)

Autor: Björn W. (bjoern2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups. Danke für den Hinweis.

Habe es umgeschrieben auf:
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)

Gerade mal eben getestet, aber da ist wohl immer noch was im Argen. Es 
wird durch die Taste immer noch kein Interrupt ausgelöst...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> P1SEL=0x01;                   //P1.0 as GPIO
P1SEL muss '0' sein für I/O-Funktion der Pins !
Mit P1SEL = 0x01 wählst Du für P1.0 die Peripheral-Funktion TACLK-input 
aus!

> P1IES=0xFF;                   //interrupt on rising edge
eben genau anders herum: P1IES = 0x00 für low-to-high transistion!

>P1IE=0x01;                    //P1.0 interrupt einschalten
Dies erst nach P1IES setzen, da sonst u.U. ein IRQ ausgelöst werden 
kann. Vorher P1IFG löschen!

> #pragma vector=PORT2_VECTOR
> __interrupt void Port_2(void)
> {
>   P2OUT&=~0x82;      //LED ausschalten
>   P1IFG&=~0x00;      //Interrupt flag löschen
> }
Interrupt flag löschen: P1IFG &= ~0x01;


Das steht aber alles im User-Guide.

Stefan

Autor: Björn W. (bjoern2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jau, das hat geholfen. Vielen Dank!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.