关于dspic30f5015 的外部中断问题

2020-02-09 11:42发布

我使用外部INT0和INT1的外部中断来检测电机旋转的两个脉冲,当电机旋转一圈时,將产生1个INT0脉冲和64个INT1脉冲。
以前是能很好的配合(两个INT0之间能接收到64个INT1的脉冲),但是不知道我改了什么地方后,两个INT0之间能接收到INT1的脉冲就不准了。

大致的程序是这个样子:

初始化 Interrupt
void Interrupt_Init(void)
{
INTCON1 = 0;
_NSTDIS = 1; _ALTIVT = 0;
_DISI = 1;
_INT0EP = 0; _INT1EP = 0;

IEC0 = 0x0000;
IEC1 = 0x0000;
IEC2 = 0x0000;


IFS0 = 0x0000;
IFS1 = 0x0000;
IFS2 = 0x0000;

_IPL = 5; _INT0IP = 7;
_INT1IP = 6;
}


假設中斷處理是這樣的:

int TEMP1;
int TEMP2;
int memory[40];

///////////////////////////////////////////////////
void _ISRoutine _INT0Interrupt(void)
{
if (!TEMP2)
{
  _INT1IE = 1;
}
_INT0IF = 0;

TEMP1++;
TEMP2++;
memory[TEMP2] = TEMP1;
TEMP1= 0;
}

////////////////////////////////////
void _ISRoutine _INT1Interrupt(void)
{
TEMP1++;
_INT1IF = 0;
}


///////////////////////////////////////

int main()
{
Interrupt_Init();
_INT0IE = 1;  // 允许外部INT0中断

while(1)
{
  NOP();
}
}

其中memory[TEMP2]保存的就是一圈中INT1中断的次数 = TEMP1;

但是,memory[TEMP2] 保存的数据很乱!不知道什么原因!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。