找回密码
 立即注册
查看: 99|回复: 5

IO口中断

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2026-06-18 17:11:04
已绑定手机

7

主题

12

回帖

91

积分

注册会员

积分
91
发表于 2026-5-19 17:44:43 | 显示全部楼层 |阅读模式
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  于是我将其跳转到外部中断0  ISR文件如下


        CSEG    AT  0123H           ;RTC_ISR
        JMP     RTC_ISR
        CSEG    AT  012BH           ;P0INT_VECTOR
        JMP     P0INT_ISR
        CSEG    AT  0133H           ;P1INT_VECTOR
        JMP     P1INT_ISR
        CSEG    AT  013BH           ;P2INT_VECTOR
        JMP     P2INT_ISR
        CSEG    AT  0143H           ;P3INT_VECTOR
        JMP     P3INT_ISR
        CSEG    AT  014BH           ;P4INT_VECTOR
        JMP     P4INT_ISR
        CSEG    AT  0153H           ;P5INT_VECTOR
        JMP     P5INT_ISR
        CSEG    AT  015BH           ;P6INT_VECTOR
        JMP     P6INT_ISR
        CSEG    AT  0163H           ;P7INT_VECTOR
        JMP     P7INT_ISR
        CSEG    AT  016BH           ;P8INT_VECTOR
        JMP     P8INT_ISR
        CSEG    AT  0173H           ;P9INT_VECTOR
        JMP     P9INT_ISR
        CSEG    AT  017BH           ;M2MDMA_VECTOR
        JMP     M2MDMA_ISR
        CSEG    AT  0183H           ;ADCDMA_VECTOR
        JMP     ADCDMA_ISR
        CSEG    AT  018BH           ;SPIDMA_VECTOR
        JMP     SPIDMA_ISR
        CSEG    AT  0193H           ;U1TXDMA_VECTOR
        JMP     U1TXDMA_ISR
        CSEG    AT  019BH           ;U1RXDMA_VECTOR
        JMP     U1RXDMA_ISR
        CSEG    AT  01A3H           ;U2TXDMA_VECTOR
        JMP     U2TXDMA_ISR
        CSEG    AT  01ABH           ;U2RXDMA_VECTOR
        JMP     U2RXDMA_ISR
        CSEG    AT  01B3H           ;U3TXDMA_VECTOR
        JMP     U3TXDMA_ISR
        CSEG    AT  01BBH           ;U3RXDMA_VECTOR
        JMP     U3RXDMA_ISR
        CSEG    AT  01C3H           ;U4TXDMA_VECTOR
        JMP     U4TXDMA_ISR
        CSEG    AT  01CBH           ;U4RXDMA_VECTOR
        JMP     U4RXDMA_ISR
        CSEG    AT  01D3H           ;LCMDMA_VECTOR
        JMP     LCMDMA_ISR
        CSEG    AT  01DBH           ;LCMIF_VECTOR
        JMP     LCMIF_ISR
        CSEG    AT  021BH           ;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都可以触发中断  这是为什么呢

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:712
  • 最近打卡:2026-07-03 09:07:06
已绑定手机

50

主题

2691

回帖

9338

积分

论坛元老

积分
9338
发表于 2026-5-20 09:20:54 | 显示全部楼层
发可以复现问题的最简测试项目出来,个别代码不一定能看到问题点。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2026-06-18 17:11:04
已绑定手机

7

主题

12

回帖

91

积分

注册会员

积分
91
发表于 2026-5-20 10:02:32 | 显示全部楼层
乘风*** 发表于 2026-5-20 09:20
发可以复现问题的最简测试项目出来,个别代码不一定能看到问题点。

Sleep.c (4.28 KB, 下载次数: 3)

进入掉电模式,然后使用IO口中断唤醒 中断号跳转到0   在isr文件中  没有做任何修改也可以中断唤醒  做了修改也能唤醒 这是为什么
isr.asm (2.33 KB, 下载次数: 1)
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:712
  • 最近打卡:2026-07-03 09:07:06
已绑定手机

50

主题

2691

回帖

9338

积分

论坛元老

积分
9338
发表于 2026-5-20 11:57:09 | 显示全部楼层
如果P2INT_ISR:后面加不加JMP        0003H
产生中断是不会进入Port2_ISR_Handler 中断函数,你可以在中断函数里面翻转一个IO口,通过测量IO口信号就能验证。
产生中断时会跳转到006BH地址运行,这个位置没有写对应的中断函数的话,程序就跑飞了。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2026-06-18 17:11:04
已绑定手机

7

主题

12

回帖

91

积分

注册会员

积分
91
发表于 2026-5-20 14:12:29 | 显示全部楼层
乘风*** 发表于 2026-5-20 11:57
如果P2INT_ISR:后面加不加JMP        0003H
产生中断是不会进入Port2_ISR_Handler 中断函数,你可以在中断 ...

截图202605201408252372.jpg
这里写了个13号的中断函数,是DMA_ADC,     可是里面没有写关于P2端口中断的代码,连标志位都没有清除  还是能正常唤醒工作


回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:712
  • 最近打卡:2026-07-03 09:07:06
已绑定手机

50

主题

2691

回帖

9338

积分

论坛元老

积分
9338
发表于 2026-5-20 18:27:00 | 显示全部楼层
只要使能了P2口唤醒功能,就能通过它进行唤醒。
映射地址错误只是产生中断后进入错误的中断函数,没有清中断标志会导致不断的产生中断。
你可以在中断函数里面加个IO口翻转,用示波器测测看。不断产生中断会占用大量CPU资源,会导致主循环执行速度变慢。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-5 14:04 , Processed in 0.070171 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表