以stm8s105k4举例,
目标:按钮C2按下,产生中断
实现方法:
(1)配置portC 为 floating with interrupt,不用pull up的原因:有external pull up resistor 存在,不需要activate internal pull up resistor。
MOV PC_DDR, #$00
MOV PC_CR1, #$00
MOV PC_CR2, #$FF
(2) Interrupt Sensitivity:有需要的话可以设置
MOV EXTI_CR1, #$30 ; port_C falling edge and rising edge
(3) RIM
Reset interrupt mask, 通常写在infinite loop前面,将中断掩码恢复到默认状态,即不屏蔽任何中断,使得处理器可以响应所有的中断请求。
(4)写 ISR (interrupt service routine) ,写在infinite loop结束的后面
interrupt isr_portC
isr_portC
..... ;要执行的指令
iret
(5)修改interrupt向量表
查表可知 portC 的 irq 是5,所以改segment 'vectit',从这样
dc.l {$82000000+NonHandledInterrupt} ; irq5
变成这样
dc.l {$82000000+isr_portC} ; irq5