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

enum trigger_edge_t

Values:

enumerator EDGE_POSITIVE
enumerator EDGE_NEGATIVE
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: 成功 负值: 失败