配置好后,发现上电后只进入一次中断,后面给上下升沿就再也没进中断了。
请问是我配置问题吗?程序如下:
PIE_registerPieIntHandler(obj->pieHandle, PIE_GroupNumber_1, PIE_SubGroupNumber_4,(PIE_IntVec_t)&xint1_isr);
PIE_enableInt(obj->pieHandle, PIE_GroupNumber_1, PIE_InterruptSource_XINT_1);
PIE_setExtIntPolarity(obj->pieHandle, CPU_ExtIntNumber_1,PIE_ExtIntPolarity_FallingEdge);
PIE_enableExtInt(obj->pieHandle, CPU_ExtIntNumber_1);
CPU_enableInt(obj->cpuHandle, CPU_IntNumber_1);
// GPIO
GPIO_setMode(obj->gpioHandle,GPIO_Number_12,GPIO_12_Mode_GeneralPurpose);
GPIO_setDirection(obj->gpioHandle, GPIO_Number_12, GPIO_Direction_Input);
GPIO_setQualification(obj->gpioHandle, GPIO_Number_12, GPIO_Qual_Sync);
__interrupt void xint1_isr(void)
{
PIE_Obj *pie = (PIE_Obj *)myPie;
Xint1Count++;
pie->PIEACK = (1 << PIE_GroupNumber_1);
// Acknowledge this interrupt to get more from group 1
//PIE_clearInt(myPie, PIE_GroupNumber_1);
}
望得到解答,谢谢!
Green Deng:
一般我们在中断的时候会 清除外设中断标志, 置位PIEACK。 不能再次进入中断应该是相关标志位没有清除导致。你可以进入调试模式,然后在进入中断服务函数的时候,查看相关中断标志位寄存器,看那些标志位在跳出中断服务程序后还是置位状态。
user6301887:
回复 Green Deng:
谢谢!仿真下看了PIEACK的值,程序开始运行时,是0;进一次中断后,变为0x0001;后面值就不变了。是我清标志位的方式错了吗?