81 lines
2.7 KiB
C
81 lines
2.7 KiB
C
#ifndef _BSP_PORT_INT_H
|
||
#define _BSP_PORT_INT_H
|
||
|
||
#define EXT_ISR_MAX_ID 4
|
||
|
||
typedef enum {
|
||
RISE_EDGE, //上升沿
|
||
FALL_EDGE, //下降沿
|
||
}ext_edge_type;
|
||
|
||
typedef enum {
|
||
IOUD_SEL_NULL, //不开内部上拉
|
||
IOUD_SEL_PU, //内部上拉
|
||
IOUD_SEL_PD, //内部下拉
|
||
}ext_pupd_type;
|
||
|
||
typedef enum {
|
||
MODE_ONLY_AWAKEN, //唤醒时调用回调,休眠关闭(默认)
|
||
MODE_BOTH_AWAKEN_SLEEP, //唤醒休眠皆可调用回调,不具备唤醒
|
||
MODE_BOTH_AWAKEN_SLEEP_PWK, //唤醒休眠皆可调用回调,并具备唤醒
|
||
}ext_mode_type;
|
||
|
||
typedef struct {
|
||
int io_num;
|
||
int irq_num;
|
||
}ext_vector_sel;
|
||
|
||
typedef struct {
|
||
u8 io_num;
|
||
ext_edge_type edg;
|
||
ext_pupd_type pupd_type;
|
||
ext_mode_type mode;
|
||
int vector;
|
||
bool flag;
|
||
bool stand;
|
||
isr_t callback;
|
||
}port_int_cb_t;
|
||
|
||
//系统调用
|
||
void port_int_disable_to_sleep(void);
|
||
//系统调用
|
||
void port_int_enable_exit_sleep(void);
|
||
//系统调用
|
||
void port_int_sleep_process(u32 *wku);
|
||
|
||
/**
|
||
* @brief set port ext ISR 打开IO外部中断功能,且设置中断回调
|
||
* 注:建议使用的时候,一个IO单独使用一个中断向量号这种方式
|
||
* @param[in] gpio_num IO_PA0 IO_PA1 ...
|
||
* @param[in] edg 触发边沿 根据 ext_edge_type 枚举类型选择
|
||
* @param[in] callback_func 外部中断回调函数,必须放置在COM区,不需要回调执行可填NULL
|
||
* @param[in] pupd_type 上下拉选择 默认不开内部上拉 根据 ext_pupd_type 枚举类型选择
|
||
* 默认模式:MODE_ONLY_AWAKEN, 在休眠下关闭回调, 该模式可以调用extab_user_isr_mode_set设置
|
||
* @return false: set isr fail;
|
||
true: set isr success;
|
||
**/
|
||
bool extab_user_isr_set(u8 gpio_num, ext_edge_type edg, ext_pupd_type pupd_type, isr_t callback_func);
|
||
|
||
/**
|
||
* @brief del ext isr 清除对应IO中断
|
||
*注:清除后,重新使用中断需要调用 extab_user_isr_set 创建
|
||
* @param[in] gpio_num IO_PA0 IO_PA1 ...
|
||
*
|
||
* @return false: clr isr fail;
|
||
true: clr isr success;
|
||
**/
|
||
bool extab_user_isr_clr(u8 gpio_num);
|
||
|
||
/**
|
||
* @brief 设置外部中断调用模式
|
||
*
|
||
* @param[in] gpio_num IO_PA0 IO_PA1 ...
|
||
* @param[in] mode MODE_ONLY_AWAKEN, 唤醒时调用回调,休眠关闭(默认)
|
||
MODE_BOTH_AWAKEN_SLEEP, 唤醒休眠皆可调用回调,不具备唤醒
|
||
MODE_BOTH_AWAKEN_SLEEP_PWK, 唤醒休眠皆可调用回调,并具备唤醒
|
||
* @return false: set isr mode fail;
|
||
true: set isr mode success;
|
||
**/
|
||
bool extab_user_isr_mode_set(u8 gpio_num, ext_mode_type mode);
|
||
#endif
|