Я изучаю 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 только один раз, но, возможно, я что-то упустил, так как у меня сложилось впечатление, что я правильно очищаю флаг прерывания.
Чего мне не хватает?