MSP430 F2013 Problem bei Interrupt von P2

Gast #3327064
Lesenswert?
• ▲
▼
Hallo, ich habbe folgendes Problem :

Mein Programm springt nicht in die ISR wenn ich eine positive Flanke an 
P2.6 anlege.

void main(void)
{

WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

// Einstellungen für P2.6 als Interrupt Quelle

  CLR(P2SEL,BIT6);      // P2.6 XIN deaktivieren
  SET(P2DIR,BIT6);      // P2.6 = Input
  CLR(P2IES,BIT6);  // P2.6 Interrupt bei steigender Flanke
  SET(P2IE,BIT6);      // P2.6 Interrupt enable
  SET(P2REN,BIT6);    // Pullup/pulldown resistor enabled
  CLR(P2OUT,BIT6);    // Eingang an 0 Potential ziehen

  LED_ON;

  while(1)
  {
  }
}

#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
  if(P2IFG & BIT6)
    {
      LED_OFF;
      CLR(P2IFG,BIT6);
    }
}

CLR und SET sind makros die zum setzen und löschen von bits verwendet 
werden.

LED_ON schaltel eine led ein und LED_OFF schaltet sie wieder aus
#3327097
Lesenswert?
• ▲
▼
Hi,

die bei der direction genannten BITx gelten danach als Ausgänge. So 
zumindest bei meinem G2553 :)

Hast du das Interrupt flag gesetzt? __enable_interrupt(); Da hatte ich 
auch lange rumgesucht, ist es nicht aktiv, werden keine steuerbaren 
Interrupts aufgerufen obwohl sie anliegen.

Ansonsten musst du halt mal debuggen und schauen ob die Interrupts 
hängenbleiben in dem dazugehörigen Register.

Grüße
Christian
Gast #3589082
Lesenswert?
• ▲
▼
can you please attach your working code,I am confused when you SET the 
P2 BIT 6 to make it input? Shouldn't it be CLR. IF you have this working 
code then please attach here, also I have issue know what is  this 
statement:

__enable_interrupt ();
may I know why this statement is needed.

regards
sushil singh chauhan
NUS Singapore
Gast #3590552
Lesenswert?
• ▲
▼
Ein Beispiel
1
#include <msp430g2553.h>
2

3
#define LED_GREEN   BIT6
4
#define TASTE_S2    BIT3
5

6
int main(void) {
7

8
   WDTCTL = WDTPW + WDTHOLD; // WDT stoppen
9

10
   BCSCTL1 = CALBC1_1MHZ;    // Sytemtakt
11
   DCOCTL = CALDCO_1MHZ;
12

13
   P1SEL |= LED_GREEN;       // LED zeigt PWM
14
   P1DIR |= LED_GREEN;
15
   
16
   P1REN |= TASTE_S2;        // Pull einschalten
17
   P1OUT |= TASTE_S2;
18
   
19
   P1IES |= TASTE_S2;        // fallende Flanke
20
   P1IFG &= ~TASTE_S2;       // pending Intr löschen
21
   P1IE |= TASTE_S2;         // enable Intr für Taste
22
   
23
   TACCR0 = 1000;            // Frequenz einstellen
24
   TACCR1 = 100;             // Tastverhältnis 1 : 3
25
   TACCTL1 = OUTMOD2 | OUTMOD1 | OUTMOD0;    // TAO.1 im Mode 7
26
   TACTL = TASSEL1 | MC0 | TACLR;            // Timer einstellen und löschen
27
   
28
   _BIS_SR(LPM1_bits + GIE); // low power und Intr enabled
29

30
}
31

32

33
// Port 1 interrupt service routine
34
#pragma vector=PORT1_VECTOR
35
__interrupt void Port_1(void) {
36

37
  P1IFG &= ~TASTE_S2;                     // pending Intr löschen
38
  TACCR1 = (TACCR1 > 100) ? 100 : 900;    // Tastverhältnis ändern
39

40
}

Antwort schreiben

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.

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.