[STM8] STM8S外部中断一次触发,为什么中断服务程序要连续执行两...

[复制链接]
3843|13
 楼主| ltwsq 发表于 2015-8-25 09:18 | 显示全部楼层 |阅读模式
本帖最后由 ltwsq 于 2015-8-25 09:29 编辑

近来由于工程需要,改用STM8S芯片。但在程序改写的过程当中进行在线调试,发现输入中断发生时,相应的中断服务程序竟然连续执行两次,这是为什么啊?请各位大侠指点一下,代码如下:
端口初始化代码
void port_init(void)
{
GPIO_DeInit(GPIOB);//端口B
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY);//仅下降沿中断
GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);//PB4上拉输入有中断功能
ITC->ISPR2 &= ~(1<<1);//将PB的软件中断优先级设定为2,这是为了在后面能够和定时器3溢出中断进行嵌套
}
中断服务程序
@far @interrupt void EXTI_PORTB_IRQHandler(void)
{
i_Message_flag=1; //输入中断标志置位
ir_flag=1;
    TIM3->ARRH = 0x00; // 设定重装载时的寄存器的高8位
    TIM3->ARRL = 0xD0; //
    TIM3->CNTRH = 0x00; //
    TIM3->CNTRL = 0x00;
}
皈依 发表于 2015-8-25 09:22 | 显示全部楼层
把中断程序注释掉,如果只进入一次就修改该部分。
如果还进入两次 就查PB4的波形,看是不是硬件触发了两次
mmuuss586 发表于 2015-8-25 09:54 | 显示全部楼层

清下中断相关寄存器看看;
 楼主| ltwsq 发表于 2015-8-25 10:00 | 显示全部楼层
mmuuss586 发表于 2015-8-25 09:54
清下中断相关寄存器看看;

STM8S的外部中断没有中断标志位可供清除:'(
amanda_s 发表于 2015-8-26 15:05 | 显示全部楼层
是不是确实来了两个触发沿啊?
干扰?
拿示波器看看pin脚的电平变化?
尤彼卡 发表于 2015-8-28 22:12 | 显示全部楼层
STM8S的外部中断没有中断标志位可供清

真的假的,那中断响应完做什么处理
734774645 发表于 2015-8-29 07:33 | 显示全部楼层
进入中断后,第一件事情就是关闭中断使能,第二件事就是清除中断标志
zh113214 发表于 2015-8-29 08:39 来自手机 | 显示全部楼层
我只能看出问题出在中断程序,其他的也不好说,楼主解决了吗?
天灵灵地灵灵 发表于 2015-8-29 08:52 | 显示全部楼层
中断程序里面进入后要里面关掉,清楚标志。
捉虫天师 发表于 2015-8-29 10:39 | 显示全部楼层
两次中断,那是你处理方法不对。
迪卡 发表于 2015-8-29 10:43 | 显示全部楼层
进入中断后要关闭中断使能,并清除中断标志
xia00 发表于 2015-8-29 15:52 来自手机 | 显示全部楼层
感觉不需要这么复杂
tangmix 发表于 2015-8-31 21:35 | 显示全部楼层
IO口有没有毛刺,尤其是按键,在IO引脚和地之间接103pf 电容,可去除大部分毛刺,软件里,当然中断程序里每次要去中断标志位的
adofe 发表于 2015-9-4 18:17 | 显示全部楼层
PD_CR2 &=~0x01; //关闭PD0中断
进入中断后像这样关闭外部中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

14

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部