Таймер msp430 прерывает и порт прерывает - PullRequest
0 голосов
/ 02 мая 2020

Я написал следующий код C для запуска двухпортовых прерываний, чтобы мигать светодиод с разной скоростью, я использовал _delay_cycles (900000); вместо этого я хочу использовать метод delayMS (125); используя прерывания по таймеру, я попытался, как показано, но не работает, пожалуйста, помогите ...

 #include <msp430.h>

 void initTimer_A(void);
 void delayMS(int msecs);

 unsigned int ofCount;


 int main(void) {

  WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog      timer
BCSCTL1 = CALBC1_1MHZ;      //Set DCO to 1Mhz
DCOCTL = CALDCO_1MHZ;

P1OUT=0X00;
P1DIR=0x01;         //P1.0 (LED) as output)
P1IES |= 0x08;      // high -> low is selected with IESx = 1.
P1IFG &= ~0x08;      // To prevent an immediate interrupt, clear the flag for
P1IE |= 0x08;        // Enable interrupts for P1.3
P1DIR &= ~0b00001000; // p1.3 as in


P2OUT=0X00;
P2DIR=0x01;   //P2.0 (LED) as output)
P2IES |= 0x08;   // high -> low is selected with IESx = 1.
P2IFG &= ~0x08;  // To prevent an immediate interrupt, clear the flag for
                   // P2.3 before enabling the interrupt.
P2IE |= 0x08;        // Enable interrupts for P1.3
P2DIR &= ~0b00001000; // p2.3 as in

    _enable_interrupt();
     // initTimer_A();

    ofCount = 0;


   P1OUT |= 0x01;          //Initially the led     will glow
   P2OUT |= 0x01;          //Initially the led will glow

    while(1)
    {

     }
    return 0;
  }

 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   //configure timer

   void initTimer_A(void){

  TACCR0 = 0;
  TACCTL0 |= CCIE;
  TACTL = TASSEL_2 + ID_0 + MC_1;

  }

  void delayMS(int msecs){

  ofCount= 0;
  TACCR0 = 1000-1;

  while(ofCount<=msecs);

  TACCR0 = 0;//stp timer


 }

 #pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A_CCR0_ISR(void)
{

    ofCount++;

}

//+++++++++++++++++  port vectors       ++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  #pragma vector = PORT1_VECTOR     //PORT1     interupt vecotr name
  __interrupt void P1_ISR(void) {

while(P1IN == 1){
       P1OUT ^= BIT0;

Это место, где я хочу изменить с помощью функции delayMS () с использованием прерываний по таймеру….

       _delay_cycles(900000);
       //delayMS(125);
       P1OUT ^= BIT0;
      // delayMS(125);
       _delay_cycles(900000);
       P1IFG &= ~BIT3;  }         // clear the          interupt flag

     }


        #pragma vector = PORT2_VECTOR               
      __interrupt void P2_ISR(void) {

       while(P2IN == 1){

            P1OUT ^= BIT0;
           _delay_cycles(9000);
           //delayMS(125);
           P1OUT ^= BIT0;
           _delay_cycles(9000);
         //P2OUT ^= BIT0;
           P2IFG &= ~BIT3;     }      // clear    the interupt flag

       }
...