Подскажите, пожалуйста, с чем может быть связано , что пин в режиме GPIO с меньшим приоритетом прерывания, откликается на прерывания с другого пина, с более высоким?
Необходимо управлять платой, используя поочередные прерывания на порт f от двух внешних сигналов. Использую для этого возможность MASK_A и MASK_B. Вектора прерываний IVG12 и IVG13.
В результате выполнения программы пин связанный с ivg12 работает корректно, а с ivg13 откликается на прерывания от внешнего сигнала + сигнала на ivg12.
При подаче сигналов по отдельности и тот и другой работают так как надо.
Код
//Настройка порта
p0.l = lo(PORTFIO_INEN);
p0.h = hi(PORTFIO_INEN);
r0.h = 0x0000;
r0.l = 0x8080;
w[p0] = r0;
ssync;
p5.h = hi(PORTFIO_EDGE);
p5.l = lo(PORTFIO_EDGE);
r7.l = 0x8080;//edge PF7,PF15
w[p5] = r7;
p5.h = hi(PORTFIO_POLAR);
p5.l = lo(PORTFIO_POLAR);
r7.l = PF15|PF7;
w[p5] = r7;
p5.h = hi(PORTFIO_MASKA);
p5.l = lo(PORTFIO_MASKA);
r7.l=PF7;
w[p5] = r7;
p5.h = hi(PORTFIO_MASKB);
p5.l = lo(PORTFIO_MASKB);
r7.l = PF15;
w[p5] = r7;
ssync;
// Прерывания
P0.L = LO(EVT12);
P0.H = HI(EVT12);
R0.l=_DRDY_ISR;
R0.H=_DRDY_ISR;
[ P0 ] = R0;
ssync;
P0.L = LO(EVT13);
P0.H = HI(EVT13);
R0.l=_MCLK_ISR;
R0.H=_MCLK_ISR;
[ P0 ] = R0;
ssync;
P0.L = LO(SIC_IAR3);
P0.H = HI(SIC_IAR3);
r1.l=0x5fff;
r1.h=0x6fff;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IAR2);
P0.H = HI(SIC_IAR2);
r1.l=0xffff;
r1.h=0xffff;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IAR1);
P0.H = HI(SIC_IAR1);
r1.l=0xffff;
r1.h=0xffff;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IAR0);
P0.H = HI(SIC_IAR0);
r1.l=0xffff;
r1.h=0xffff;
[ P0 ] = R1;
ssync;
P0.L = LO(IMASK);
P0.H = HI(IMASK);
R7 = [ P0 ];
R1.L = 0x3000;
R1.H = 0x0000;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IMASK);
P0.H = HI(SIC_IMASK);
R1 = [ P0 ];
BITSET(R1, 31);
BITSET(R1, 27);
[ P0 ] = R1;
ssync;
p0.l = lo(PORTFIO_INEN);
p0.h = hi(PORTFIO_INEN);
r0.h = 0x0000;
r0.l = 0x8080;
w[p0] = r0;
ssync;
p5.h = hi(PORTFIO_EDGE);
p5.l = lo(PORTFIO_EDGE);
r7.l = 0x8080;//edge PF7,PF15
w[p5] = r7;
p5.h = hi(PORTFIO_POLAR);
p5.l = lo(PORTFIO_POLAR);
r7.l = PF15|PF7;
w[p5] = r7;
p5.h = hi(PORTFIO_MASKA);
p5.l = lo(PORTFIO_MASKA);
r7.l=PF7;
w[p5] = r7;
p5.h = hi(PORTFIO_MASKB);
p5.l = lo(PORTFIO_MASKB);
r7.l = PF15;
w[p5] = r7;
ssync;
// Прерывания
P0.L = LO(EVT12);
P0.H = HI(EVT12);
R0.l=_DRDY_ISR;
R0.H=_DRDY_ISR;
[ P0 ] = R0;
ssync;
P0.L = LO(EVT13);
P0.H = HI(EVT13);
R0.l=_MCLK_ISR;
R0.H=_MCLK_ISR;
[ P0 ] = R0;
ssync;
P0.L = LO(SIC_IAR3);
P0.H = HI(SIC_IAR3);
r1.l=0x5fff;
r1.h=0x6fff;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IAR2);
P0.H = HI(SIC_IAR2);
r1.l=0xffff;
r1.h=0xffff;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IAR1);
P0.H = HI(SIC_IAR1);
r1.l=0xffff;
r1.h=0xffff;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IAR0);
P0.H = HI(SIC_IAR0);
r1.l=0xffff;
r1.h=0xffff;
[ P0 ] = R1;
ssync;
P0.L = LO(IMASK);
P0.H = HI(IMASK);
R7 = [ P0 ];
R1.L = 0x3000;
R1.H = 0x0000;
[ P0 ] = R1;
ssync;
P0.L = LO(SIC_IMASK);
P0.H = HI(SIC_IMASK);
R1 = [ P0 ];
BITSET(R1, 31);
BITSET(R1, 27);
[ P0 ] = R1;
ssync;