2011-07-02 4 views
1

MSP430F5418 P2.5를 고에서 저 전환으로 설정했습니다. 그러나 저 - 고 및 고 - 저 전환 모두에 대해 인터럽트가 발생합니다. 아래 코드를 참고하십시오.MSP430F5418 포트 인터럽트가 high에서 low 및 low에서 high로 전환 될 때 발생합니다.

 

    P2OUT |= BIT5 /* Enable P2.5 internal resistances */ 
    P2REN |= BIT5 /* Set up P2.5 as pull-Up resistances */ 

    P2IES |= BIT5;  
    P2IE |= BIT5;  
    P2IFG &= ~BIT5; /* P2.5 IFG cleared */ 


#pragma vector=PORT2_VECTOR 
__interrupt void port2_interrupt (void) 
{ 
    switch (P2IV) 
    { 
     case 0x0CU: 
     { 
      /* Do something here */ 
      P2IFG &= ~BIT5; 
      break; 
     } 
     default: 
     { 
      /* No Action */ 
      break; 
     } 
    } 
} 
+2

신호가 제대로 디 바운드 되었습니까? 기계식 스위치에 똑바로 배선하지 마십시오. –

+0

텍사스 msp를 사용하지 않고서도 나는 debounce라고 말하고 싶다. ISR에서 인터럽트를 비활성화하지 않으면 (코드가 자동으로 수행되는지는 모르겠지만 일반적으로 프로그래머가해야 할 일입니다), 디버깅만으로는 해결되지 않습니다. – rnunes

+0

인터럽트 루틴이 입력되면 MSP430 장치에서 인터럽트가 자동으로 비활성화됩니다. – Ammamon

답변

0

한스, 나는 스위치를 사용하여 핀을 어설트하고 있지 않습니다. 실제로 다른 프로세서에서 수행합니다. TI (텍사스 인스트루먼츠) 포럼에서 로우 - 투 - 하이 전환 내에서 숨겨진 하이 - 로우 신호가있을 수 있고 반대로도 가능하다는 답변을 받았습니다.

그래서 코드를 다음과 같이 수정하여 정상적으로 작동합니다.

 
... 

P2OUT |= BIT5 ; /* Enable P2.5 internal resistance */ 
P2REN |= BIT5; /* Set up P2.5 as pull-up resistance */ 

P2IES |= BIT5; /* Sets P2IFG for high to low transition */ 
P2IE |= BIT5; /* P2.5 interrupt enabled */ 
P2IFG &= ~BIT5; /* P2.5 IFG cleared */ 
... 

#pragma vector=PORT2_VECTOR 
__interrupt void port2_isr (void) 
{ 
    switch (P2IV) 
    { 
     case 0x0CU: 
     { 
      TA1CCTL0 &= ~CCIE; 
      TA1CCR0 = 0U; 
      TA1CCTL0 |= CCIE; 
      TA1CCTL0 &= ~CCIFG; 
      TA1CCR0 = TA1R + 15U; 
      P2IFG &= ~BIT5; 
      break; 
     } 
     ... 
     ... 
    } 
} 

#pragma vector = TIMER1_A0_VECTOR /* Timer1_A3 CC0 */ 
static __interrupt void _timer1_ao_isr (void) 
{ 
    TA1CCTL0 &= ~CCIE; 
    if ((P2IN & BIT5) == 0U) 
    { 
     // Got a valid high-to-low assert here!!! 
    } 
} 

0

실제로 대답, 단지 제안, 더 의미있는 무언가에 변수 이름을 변경, 이제 두 달이 비트 5 당신이 하이에서 로우 전환을 확인 핀 것을 기억하지 않습니다. 정의를 사용하여 BIT5의 이름을 HIGH_TO_LOW_PIN으로 바꿀 수 있습니다. 타이머 설정을 사용하여 동일한 작업을 수행 할 수 있으며 리팩터링을 통해보다 의미있는 작업을 수행 할 수 있습니다.

+0

감사합니다. pedrokiefer, 당신의 소중한 제안에 대해. 나는 적절하게 변경할 것입니다. – Ammamon