7.26. 外部中断(EXTI)
7.26.1. Overview
AC792N的IO支持EXTI外部中断,PF、PR和PV口除外。驱动最多同时注册8个外部中断。
API接口
// exti.h
/**
* @brief 注册外部中断
*
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
* @param edge 触发边沿
* @param callback_in_irq 中断回调函数
* @param priv 中断回调函数的私有指针
*
* @return 非负数: 注册成功的外部中断序号 负值: 参数有误注册失败
*/
int exti_init(unsigned int gpio, trigger_edge_t edge, void (*callback_in_irq)(void *priv, unsigned int gpio), void *priv);
/**
* @brief 卸载外部中断
* @param index 注册时返回的外部中断序号
* @return 0: 成功 负值: 失败
*/
int exti_uninit(int index);
/**
* @brief 注册外部中断(extend)
*
* @param gpio 参考宏IO_PORTx_xx,如IO_PORTA_00
* @param edge 触发边沿
* @param callback_in_irq 中断回调函数
* @param priv 中断回调函数的私有指针
* @param auto_pupd 是否开启自动上/下拉(edge为POSITIVE时自动下拉,NEGATIVE时
* 自动上拉)。 0:保持上下拉状态; 1:开启自动上下拉
*
* @return 非负数: 注册成功的外部中断序号 负值: 参数有误注册失败
*/
int exti_init_ext(unsigned int gpio, trigger_edge_t edge, void (*callback_in_irq)(void *, unsigned int), void *priv, u8 auto_pupd);
exti_init()接口中传入的edge参数不同,IO会被配置为不同的上/下拉输入状态
配置 |
描述 |
|---|---|
EDGE_POSITIVE |
上升沿触发中断,对应IO会被配置为下拉输入 |
EDGE_NEGATIVE |
下降沿触发中断,对应IO会被配置为上拉输入 |
如果不需要使用内部IO上下拉功能,可以改用exti_init_ext()。
注意:所有外部中断共用一个中断源,驱动的中断服务函数通过回调注册的接口通知程序触发了外部中断。也因此注册的回调函数程序应该尽量简短、快,不要加打印。
7.26.2. API参考
exti trigger edge
-
int exti_init(unsigned int gpio, trigger_edge_t edge, void (*callback_in_irq)(void *priv, unsigned int gpio), void *priv)
注册外部中断
- Parameters
gpio – 参考宏IO_PORTx_xx,如IO_PORTA_00
edge – 触发边沿
callback_in_irq – 中断回调函数
priv – 中断回调函数的私有指针
- Returns
非负数: 注册成功的外部中断序号 负值: 参数有误注册失败
-
int exti_uninit(int index)
卸载外部中断
- Parameters
index – 注册时返回的外部中断序号
- Returns
0: 成功 负值: 失败