IO口中断
void Port2_ISR_Handler(void) interrupt 0{
P2INTF = 0x00;// 中断标志位清零
Sleep_Flag = 0;
//port2_Flag = 1;
}
void PortInt_Init(void)
{
P2INTE = 0x30; //使能P2口中断使能位
P2IM0 = 0x00; //设置P2口中断模式 (00:下降沿, 01:上升沿)
P2IM1 = 0x00; //设置P2口中断模式 (10:低电平, 11:高电平)
P2WKUE = 0x30; //设置P2口中断唤醒省电模式
}
P2.4 P2.5这两个IO口中断由于中断号大于31于是我将其跳转到外部中断0ISR文件如下
CSEG AT0123H ;RTC_ISR
JMP RTC_ISR
CSEG AT012BH ;P0INT_VECTOR
JMP P0INT_ISR
CSEG AT0133H ;P1INT_VECTOR
JMP P1INT_ISR
CSEG AT013BH ;P2INT_VECTOR
JMP P2INT_ISR
CSEG AT0143H ;P3INT_VECTOR
JMP P3INT_ISR
CSEG AT014BH ;P4INT_VECTOR
JMP P4INT_ISR
CSEG AT0153H ;P5INT_VECTOR
JMP P5INT_ISR
CSEG AT015BH ;P6INT_VECTOR
JMP P6INT_ISR
CSEG AT0163H ;P7INT_VECTOR
JMP P7INT_ISR
CSEG AT016BH ;P8INT_VECTOR
JMP P8INT_ISR
CSEG AT0173H ;P9INT_VECTOR
JMP P9INT_ISR
CSEG AT017BH ;M2MDMA_VECTOR
JMP M2MDMA_ISR
CSEG AT0183H ;ADCDMA_VECTOR
JMP ADCDMA_ISR
CSEG AT018BH ;SPIDMA_VECTOR
JMP SPIDMA_ISR
CSEG AT0193H ;U1TXDMA_VECTOR
JMP U1TXDMA_ISR
CSEG AT019BH ;U1RXDMA_VECTOR
JMP U1RXDMA_ISR
CSEG AT01A3H ;U2TXDMA_VECTOR
JMP U2TXDMA_ISR
CSEG AT01ABH ;U2RXDMA_VECTOR
JMP U2RXDMA_ISR
CSEG AT01B3H ;U3TXDMA_VECTOR
JMP U3TXDMA_ISR
CSEG AT01BBH ;U3RXDMA_VECTOR
JMP U3RXDMA_ISR
CSEG AT01C3H ;U4TXDMA_VECTOR
JMP U4TXDMA_ISR
CSEG AT01CBH ;U4RXDMA_VECTOR
JMP U4RXDMA_ISR
CSEG AT01D3H ;LCMDMA_VECTOR
JMP LCMDMA_ISR
CSEG AT01DBH ;LCMIF_VECTOR
JMP LCMIF_ISR
CSEG AT021BH ;TIMER11_VECTOR
JMP TIMER11_ISR
RTC_ISR:
P0INT_ISR:
P1INT_ISR:
P2INT_ISR:JMP 0003H
P3INT_ISR:
P4INT_ISR:
P5INT_ISR:
P6INT_ISR:
P7INT_ISR:
P8INT_ISR:
P9INT_ISR:
M2MDMA_ISR:
ADCDMA_ISR:
SPIDMA_ISR:
U1TXDMA_ISR:
U1RXDMA_ISR:
U2TXDMA_ISR:
U2RXDMA_ISR:
U3TXDMA_ISR:
U3RXDMA_ISR:
U4TXDMA_ISR:
U4RXDMA_ISR:
LCMDMA_ISR:
LCMIF_ISR:
TIMER11_ISR:
JMP 006BH
END
无论P2INT_ISR:后面加不加JMP 0003H都可以触发中断这是为什么呢
发可以复现问题的最简测试项目出来,个别代码不一定能看到问题点。 乘风飞扬 发表于 2026-5-20 09:20
发可以复现问题的最简测试项目出来,个别代码不一定能看到问题点。
进入掉电模式,然后使用IO口中断唤醒 中断号跳转到0 在isr文件中没有做任何修改也可以中断唤醒做了修改也能唤醒 这是为什么
如果P2INT_ISR:后面加不加JMP 0003H
产生中断是不会进入Port2_ISR_Handler 中断函数,你可以在中断函数里面翻转一个IO口,通过测量IO口信号就能验证。
产生中断时会跳转到006BH地址运行,这个位置没有写对应的中断函数的话,程序就跑飞了。 乘风飞扬 发表于 2026-5-20 11:57
如果P2INT_ISR:后面加不加JMP 0003H
产生中断是不会进入Port2_ISR_Handler 中断函数,你可以在中断 ...
这里写了个13号的中断函数,是DMA_ADC, 可是里面没有写关于P2端口中断的代码,连标志位都没有清除还是能正常唤醒工作
只要使能了P2口唤醒功能,就能通过它进行唤醒。
映射地址错误只是产生中断后进入错误的中断函数,没有清中断标志会导致不断的产生中断。
你可以在中断函数里面加个IO口翻转,用示波器测测看。不断产生中断会占用大量CPU资源,会导致主循环执行速度变慢。
页:
[1]