打印
[技术问答]

关于HC32L136J8TA不能进入中断服务函数问题

[复制链接]
1623|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用HC32L136J8TA  用GPIO  PC13设置下降沿中断, 设置代码如下:
void MenuKeyPortInit(void)
{
        stc_gpio_config_t pstcSpiGpioCfg;
       
        pstcSpiGpioCfg.enCtrlMode=GpioAHB;                        //AHB×ÜÏßÇý¶¯Ä£Ê½
       
        pstcSpiGpioCfg.enDir=GpioDirIn;                //ÊäÈëģʽ
       
        pstcSpiGpioCfg.enPuPd=GpioPu;                                //ÉÏÀ­ÊäÈë
       
        Gpio_Init(MenuKeyPort,MenuKeyPin,&pstcSpiGpioCfg);//PC13
       
        Gpio_ClearIrq(MenuKeyPort, MenuKeyPin);
       
        Gpio_EnableIrq(MenuKeyPort, MenuKeyPin, GpioIrqFalling);//ϽµÑØ´¥·¢ÊäÈëÖжÏ
       
        EnableNvic(PORTC_IRQn,IrqLevel3,TRUE);//¿ªÆôPC NVICÖжÏ
}
仿真下可以看到NVIC有打开PC端口中断,优先级有设置最高,全速运行发生中断后就是不能进入中断服务函数,停在了下图位置;
void PORTC_IRQHandler(void)
{
    Gpio_IRQHandler(2);
}

启动文件是使用MDK下安装的, 同样的代码复制在华大驱动样例里面是可以正常进入中断,样例的启动文件复制过来也不能进入中断,在自己建的工程就不能,找了好久没有找到原因;

使用特权

评论回复
沙发
martinhu| | 2020-3-23 13:22 | 只看该作者
先看看是不是中断入口函数名字不一样,
然后看看配置里面是不是少一个这个。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
Tanglin7630424 + 2 很给力!
板凳
Tanglin7630424|  楼主 | 2020-3-23 21:59 | 只看该作者
martinhu 发表于 2020-3-23 13:22
先看看是不是中断入口函数名字不一样,
然后看看配置里面是不是少一个这个。
...

是少了这串字符   谢谢谢 !

使用特权

评论回复
地板
杨寅辉| | 2020-3-25 19:10 | 只看该作者
楼上的很细心,一般人很少会注意这里的。这里是什么意思呢?

使用特权

评论回复
5
zhamatu| | 2020-3-26 23:11 | 只看该作者
那个没加的东西,像是个微库的关键字定义什么的东西,只有定义才能使用吗?

使用特权

评论回复
6
jerow| | 2020-3-27 20:07 | 只看该作者
zhamatu 发表于 2020-3-26 23:11
那个没加的东西,像是个微库的关键字定义什么的东西,只有定义才能使用吗? ...

感觉像是一个类似#define这样全局宏定义的东西。

使用特权

评论回复
7
zhufy| | 2020-6-15 15:55 | 只看该作者
martinhu 发表于 2020-3-23 13:22
先看看是不是中断入口函数名字不一样,
然后看看配置里面是不是少一个这个。
...

请问在IAR中遇到同样问题,怎么解决?死活进不了中断函数

使用特权

评论回复
8
martinhu| | 2020-6-19 10:36 | 只看该作者
zhufy 发表于 2020-6-15 15:55
请问在IAR中遇到同样问题,怎么解决?死活进不了中断函数

1.先看看启动文件的中断入口,和interrupt是不是一样的,
2.老的例程,启动文件的中断入口名字和interrupt.c的名字不一样,然后ddl.c或者dd.h用宏定义了函数名
3,如果你的工程,启动文件和interrupt.c的名字已经一样了,然后再ddl里面又用宏定义名,反而导致中断进不去。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

18

帖子

0

粉丝