中断引脚配置
void mt2503_eint15_init(void)
{
/*-------------------------------------------------------------------------*/
/* Local Variables */
/*-------------------------------------------------------------------------*/
DCL_HANDLE gpio_handle;
/*-------------------------------------------------------------------------*/
/* Code Body */
/*-------------------------------------------------------------------------*/
gpio_handle = DclGPIO_Open(DCL_GPIO, BMI160_INT_PINNUM);
DclGPIO_Control(gpio_handle, GPIO_CMD_SET_MODE_4, NULL);
DclGPIO_Control(gpio_handle, GPIO_CMD_SET_DIR_IN, NULL);
DclGPIO_Control(gpio_handle, GPIO_CMD_ENABLE_PULL, NULL);
DclGPIO_Control(gpio_handle, GPIO_CMD_SET_PULL_LOW, NULL);
EINT_Mask(BMI160_INT_CHANN);
EINT_Set_HW_Debounce(BMI160_INT_CHANN, 10);
EINT_SW_Debounce_Modify(BMI160_INT_CHANN, 10);
EINT_Set_Sensitivity(BMI160_INT_CHANN, LEVEL_SENSITIVE);
EINT_Registration(BMI160_INT_CHANN, KAL_TRUE, KAL_TRUE, Bmi160EintCallBack, KAL_TRUE);
EINT_UnMask(BMI160_INT_CHANN);
}
前面一部分是将IO配置EINT模式,为什么MODE_4是EINT呢,看一下drvgen工具里的配置就知道了。冒号前面是4
,所以选MODE_4。
后一部分是配置中断的参数及注册终端处理函数。
-
BMI160_INT_CHANN
是中断号,也就是EINT15
里的15
。 -
EINT_Set_Sensitivity
设置中断触发条件,这里是电平触发。 -
EINT_Registration
注册中断处理函数,其原型为void EINT_Registration(kal_uint8 eintno, kal_bool Dbounce_En, kal_bool ACT_Polarity, void (reg_hisr)(void), kal_bool auto_umask)
。ACT_Polarity
为触发极性,KAL_TRUE
为高,反之为低。
中断处理函数
void Bmi160EintCallBack(void)
{
/*-------------------------------------------------------------------------*/
/* Local Variables */
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/* Code Body */
/*-------------------------------------------------------------------------*/
EINT_Mask(BMI160_INT_CHANN);
/* 增加处理代码 */
EINT_UnMask(BMI160_INT_CHANN);
}