2.4. P33外设
2.4.1. 边沿唤醒
p33的边沿唤醒模块支持选择普通io唤醒和模拟io唤醒(本芯片仅支持普通io唤醒)支持在低功耗模式下唤醒,支持配置上升沿/下降沿,如下图所示:
普通io有8路,配置方式为wkup_param.port[x]
复位
2.4.1.1. 配置边沿唤醒
#define MAX_WAKEUP_PORT 8 //最大同时支持数字io输入个数
typedef enum {
RISING_EDGE = 0,
FALLING_EDGE,
BOTH_EDGE,
} POWER_WKUP_EDGE;
//filter
typedef enum {
PORT_FLT_NULL = 0,
PORT_FLT_16us,
PORT_FLT_128us,
PORT_FLT_1ms,
PORT_FLT_4ms,
} POWER_WKUP_FLT;
struct port_wkup {
u8 pullup_down_enable; //上下拉是否使能
POWER_WKUP_EDGE edge; //唤醒边沿条件
POWER_WKUP_FLT filter; //滤波参数
u8 iomap; //唤醒io
};
struct p33_io_wkup_config {
u8 iomap; //唤醒io
u8 pullup_down_enable; //上下拉是否使能
u8 filter_enable; //滤波使能,所有通道共用滤波参数
POWER_WKUP_EDGE edge; //唤醒边沿条件
};
struct p33_io_wkup_param {
POWER_WKUP_FLT filter; //滤波参数,数字
const struct p33_io_wkup_config *port[MAX_WAKEUP_PORT];
};
void power_wakeup_init(const struct p33_io_wkup_param *param);
参数:
param
边沿唤醒相关参数配置
2.4.1.2. 唤醒io参数配置
普通io边沿唤醒配置。
原型:
void p33_io_wakeup_init(const struct p33_io_wkup_param *param);
参数:
param
边沿唤醒io相关参数配置
void p33_io_wkup_index_init(u8 index, const struct p33_io_wkup_config *port);
参数:
index
io唤醒通道号
port
边沿相关参数配置
2.4.1.3. 边沿唤醒回调
配置gpio或模拟信号边沿唤醒回调,该接口只能被调用一次,会被覆盖。
原型:
void p33_io_wakeup_set_callback(void (*callback)(u8 index));
- 参数:
callback
回调函数
index
唤醒注册的通道
2.4.1.4. 示例:
const struct p33_io_wkup_config port0 = {
.pullup_down_enable = 1, //配置I/O 内部上下拉是否使能
.filter_enable = 1,
.edge = RISING_EDGE, //唤醒方式选择,可选:上升沿\下降沿
.iomap = IO_PORTA_02, //唤醒口选择
};
const struct p33_io_wkup_param wkup_param = {
.filter = PORT_FLT_4ms,
.port[1] = &port0,
}
static void port_wakeup_callback(u8 index)
{
}
void power_wkup_demo(void)
{
power_wakeup_init(&wk_param);
p33_io_wakeup_set_callback(port_wakeup_callback);
//获取io_wakeup的引脚信息
u8 wake_io = 0;
for (int i = 0; i < 8; i++) {
if (is_wakeup_source(PWR_WK_REASON_EDGE_INDEX0+i)) {
wake_io = wk_param.port[i]->iomap;
}
}
}
2.4.2. 长按复位
长按复位普通io和模拟信号(本芯片只有普通io长按复位),普通io的通道与边沿唤醒通道0共用,即通道0选择的io即使长按复位,又具有边沿唤醒功能,如下图所示:
复位
2.4.2.1. 配置长按复位0
配置普通io的长按复位。
原型:
void gpio_longpress_pin0_reset_config(u32 pin, u32 level, u32 time, u8 release, u8 protect);
- 参数:
pin
gpio序号
level
0:下降沿触发 1:上升沿触发
time
0:关闭长按复位,1、2、4、8、16:长按复位时间,单位为秒
release
0:等待电平翻转后复位,1:立即复位
protect
0:关闭写保护,1:打开写保护
长按复位的写保护机制:
1、打开了写保护,所有的长按复位相关的配置都会被写保护,软件无法修改,只有重新上电后才能写入;
2、如果想保护长按复位引脚的状态,只能把长按复位引脚配置为PA5;