Мой ISR выполняется только один раз, даже если я пытаюсь сбросить флажок таймера - PullRequest
0 голосов
/ 11 мая 2019

Я изучаю PIC32 и провожу несколько тестов, чтобы убедиться, что мои ISR работают правильно. Мой тестовый код просто включает и выключает светодиод в интервале времени, контролируемом ISR. Проблема в том, что ISR выполняется только один раз, и я не понимаю, почему.

Я пробовал сам код для включения и выключения светодиода в основной функции, с таймером между включением и выключением, он работает нормально. Я пробовал разные способы очистки флага прерывания, чтобы убедиться, что он очищен. но я не могу сказать, нормально ли это или нет.

вот код

#include <p32xxxx.h>    
#include <string.h>    
#include <stdio.h>    
#include <stdlib.h>    
#include <stdbool.h>        
#include <plib.h> 
#include <xc.h>

#define PIN_bypassled PORTEbits.RE4 
#define PIN_bypassledwrite LATEbits.LATE4 

//-------- ISRs   -----------------

//low speed timer 
void __ISR( _TIMER_2_VECTOR, ipl7) Swiching_loop( void)
{
//    INTDisableInterrupts();

    mT2ClearIntFlag();  //  first attempt to clear interrput flag
    IFS0bits.T2IF = 0;  //  second attempt to clear interrupt flag


    PIN_bypassledwrite = !PIN_bypassled;

//   INTEnableInterrupts();
 }

void main() {
    TRISE = 0x000000;
    SYSTEMConfigPerformance(80000000L);  //            INTEnableSystemSingleVectoredInt();


//    T1CON = 0X0010;                    //TMR1 Off, PRESCALE 1:256, 16b mode 
    PR1 = 100000; 
   mT1SetIntPriority(7);                //set priority interrupt level for timer 1 
    T1CON = 0x8030;                   //TMR1 ON, PRESCALE 1:256, 16b mode 
    mT1IntEnable(1);                      //

 //   T2CON = 0X0030;                    //TMR2 Off, PRESCALE 1:256, 16b mode 
    PR2 = 100000; 
    mT2SetIntPriority(7);                //set priority interrupt level for timer 2
    T2CON = 0x8070;                   //TMR2 ON, PRESCALE 1:256, 16b mode 
    mT2IntEnable(1);                      //

    INTEnableInterrupts();
    while (1){ 

  }
}

ожидаемым результатом будет включение и выключение моего светодиода, но вместо этого он просто включается. Я интерпретирую это как выполнение ISR только один раз, но, возможно, я что-то упустил, так как у меня сложилось впечатление, что я правильно очищаю флаг прерывания. Чего мне не хватает?

...