EXTI外部中断可用来应付那些“出现时机不确定”的事件。比如说,按键,摄像头的行场中断,测速编码器的输入等。
例如,设定A1引脚上升沿能触发EXIT中断,A1连接一个按钮,按钮按下那瞬间,A1产生上升沿,触发中断,进行按钮事件的处理。
K60
同样,K60使用野火的底层库,参考《三天入门 Cortex-M4》EXTI 外部 GPIO 中断例程。
初始化
函数原型
调用例子
exti_init(PORTA,17,rising_down);//下拉,上升沿触发中断
在实际小车的制作中,EXTI用于捕捉摄像头的场中断信号;
* 摄像头初始化函数
* 函数名称:cam_init
* 功能说明:初始化摄像头场行中断,初始化摄像头DMA传输
* 参数说明:
* 函数返回:无
* 修改时间:2014-3-29
* 备 注:
****************************************/
void cam_init()
{
exti_init(CAM_PORTX,CAM_HR_CHn,rising_down); //行中断,初始化外部中断输入捕捉模式,上升沿触发
exti_init(CAM_PORTX,CAM_VS_CHn,falling_down); //场中断,初始化外部中断输入捕捉模式,下降沿触发
// Do other initialization.
}
中断处理
中断重定向
#undef VECTOR_104
#define VECTOR_104 PORTB_IRQHandler //PORTB 中断
extern void PORTB_IRQHandler(); //PORTB 中断服务函数
void PORTB_IRQHandler()
{
u32 tmpISFR = 0;
tmpISFR=PORTB_ISFR;
PORTB_ISFR |= 0xFFFFFFFF; //清除标志
if((tmpISFR & (1<<3))) //PB3 触发中断 行中断
{
// Do sth.
}
}
XS128
详细参考 Chapter 16 Timer Module (TIM16B8CV2) Block Description, MC9S12XS256 Reference Manual.
初始化
TIM模块使能,Timer System Control Register 1 (TSCR1),TEN=1.
设置Timer Prescale, Timer System Control Register 2 (TSCR2).
Timer Prescale是预分频,时间先经过这里分频,再经过后续分频后使用。这里设为Bus Clock / 64.
Timer Input Capture/Output Compare Select (TIOS),设置为0,表示输入捕捉。
Timer Control Register 3/Timer Control Register 4 (TCTL3 and TCTL4).
设置对应管脚的捕获配置。00为不捕捉,01为上升沿,10为下降沿,11为上升沿或下降沿。
TCTL4 = 0x09; // 0通道上升沿,1通道下降沿;
中断处理
Troubleshooting
1. 按键无反应
检查是否已正确初始化按键;
检查中断是否已开启;
清除中断标志了没?
中断处理没跑进死循环吧?
2. 按键抖动
不妨加入几毫秒的延时。