详见博客:http://blog.csdn.net/freeape/article/details/46990181
STM8常用中断指令
- 开总中断
- _asm(“rim”);
- 禁止中断
- _asm(“sim”);
- 进入停机模式
- _asm(“halt”);
- 中断返回
- _asm(“iret”);
- 等待中断
- _asm(“wfi”);
- 软件中断
如使用中断函数时,可以通过在上图中查找相对应的中断向量号,而中断函数的名字可以自定义
1 | /* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices |
外部中断长按键识别相关配置
STM8S为外部中断事件专门分配了五个中断向量:
- PortA 口的5个引脚:PA[6:2]
- PortB 口的8个引脚:PB[7:0]
- PortC 口的8个引脚:PC[7:0]
- PortD 口的7个引脚:PD[6:0]
- PortE口的8个引脚:PE[7:0]
PD7是最高优先级的中断源(TLI);
中断IO设置
这里选用EXTI2(端口C外部中断)。那么需要将中断促发的IO(PC5)设置为上拉输入或中断上拉输入,悬浮输入的话很容易受干扰。
1 | /*PC5设置为上拉输入*/ |
外部中断寄存器配置
CPU CC寄存器中断位:
I1 I0不能直接写,只能通过开中断或关中断来写,上电默认是11;当用指令开中断时( _asm(“rim\n”);),为00;当发生中断时,由当前中断(ITC_SPRx)载入I[1:0],主要用于做中断优先级;退出中断自动清0;因此在写EXTI_CR1,需将ITC_SPRx配置成11,或加入禁中断指令 。
EXTI_CR1:
配置促发方式;
测试代码
1 |
|
注意:
中断向量需声明,在stm8_interrupt_vector.c中加入:
extern @far @interrupt void EXTI2_Hand_Fun(void);
extern @far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void);
{0x82, EXTI2_Hand_Fun}, /* irq5 */
{0x82, TIM1_UPD_OVF_TRG_BRK_IRQHandler}, /* irq11 */
另参见不用外部中断长按键识别:不用外部中断识别长按键