Timeout
该示例使用 ENHTIM ,实现每 1 秒产生一次超时中断。
为了便于观察,在 EVB 板上将 P0_0 引脚连接到 LED0。
当计时时间达到 1 秒时,会触发中断。在中断处理函数中,程序会翻转 P0_0 引脚的电平,改变 GPIO 的输出极性,进而实现 LED0 每秒闪烁一次的效果。

Enhance-Timer 超时框图
用户可以通过不同的宏配置来修改引脚信息,定时时间等。具体宏配置详见 配置选项。
环境需求
该示例的环境需求,可参考 环境需求。
硬件连线
连接 P0_0 和 EVB 板上的 LED0 小灯。
LED 驱动电路如下图所示。

LED 驱动电路图
配置选项
可配置如下宏修改引脚定义。
#define OUTPUT_PIN P0_0 #define GPIO_PIN GPIO_GetPin(OUTPUT_PIN) #define GPIO_PORT GPIO_GetPort(OUTPUT_PIN)
可配置如下宏修改定时时间。
#define ENHTIM_UINT 40 /*< 40M source clock is divided to get unit: 1us */ #define ENHTIM_ING 1000000 /*< Set this macro to 1000000, with a timer duration of 1s. the unit for this macro is in microseconds (us). */ #define ENHTIM_PERIOD ENHTIM_ING * ENHTIM_UINT
编译和下载
该示例的编译和下载流程,可参考 编译和下载。
测试验证
当 EVB 启动后,在 Debug Analyzer 工具内观察如下 log。
Start enhtim interrupt test!
使能 ENHTIM 后,每计时时间达到 1s,会触发 ENHTIM 中断,在中断函数内翻转 P0_0 输出电平,可观察到 LED0 每 1 秒闪烁一次。
代码介绍
该章节主要介绍示例中的初始化和相应功能实现的代码和流程说明
源码路径
工程文件和源码路径如下:
工程路径:
sdk\samples\peripheral\enhtimer\enhtim_interrupt\proj
源码路径:
sdk\samples\peripheral\enhtimer\enhtim_interrupt\src
初始化
外设的初始化流程可参考 General Introduction 中的 初始化流程 部分。
调用
Pad_Config()
与Pinmux_Config()
,配置对应引脚的 PAD 和 PINMUX 。void board_gpio_init(void) { Pad_Config(OUTPUT_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE, PAD_OUT_HIGH); Pinmux_Config(OUTPUT_PIN, DWGPIO); }
调用
RCC_PeriphClockCmd()
,开启 GPIO 时钟。对 GPIO 外设进行初始化:
定义
GPIO_InitTypeDef
类型GPIO_InitStruct
,调用GPIO_StructInit()
将GPIO_InitStruct
预填默认值。根据需求修改
GPIO_InitStruct
参数,GPIO 的初始化参数配置如下表。调用GPIO_Init()
,初始化 GPIO 外设。
GPIO Hardware Parameters |
Setting in the |
GPIO |
---|---|---|
GPIO pin |
|
|
GPIO direction |
||
GPIO interrupt |
调用
RCC_PeriphClockCmd()
,开启 ENHTIM 时钟。对 ENHTIM 外设进行初始化:
定义
ENHTIM_InitTypeDef
类型ENHTIM_InitStruct
,调用ENHTIM_StructInit()
将ENHTIM_InitStruct
预填默认值。根据需求修改
ENHTIM_InitStruct
参数,ENHTIM 的初始化参数配置如下表。调用ENHTIM_Init()
,初始化 ENHTIM 外设。调用
NVIC_Init()
,配置 NVIC。NVIC 相关配置可参考 中断配置。调用
ENHTIM_ClearINTPendingBit()
和ENHTIM_INTConfig()
,清除 ENHTIM 中断,使能 ENHTIM 中断。
ENHTIM Hardware Parameters |
Setting in the |
ENHTIM |
---|---|---|
Counter mode |
||
PWM mode |
||
Count value |
|
调用
ENHTIM_Cmd()
使能 ENHTIM 外设。
功能实现
使能 ENHTIM 外设后,ENHTIM 开始定时。ENH_TIM0 定时时间到,触发中断,进入中断处理函数 Enhanced_Timer0_Handler
。
清除 ENH_TIM0 中断,失能 ENH_TIM0。
判断当前 LED 状态,翻转 LED0 电平。
void Enhanced_Timer0_Handler()
{
ENHTIM_ClearINTPendingBit(ENHTIMER_NUM, ENHTIM_INT_TIM);
ENHTIM_Cmd(ENHTIMER_NUM, DISABLE);
if (!LED_Status)
{
GPIO_WriteBit(GPIO_PORT, GPIO_PIN, (BitAction)(1));
LED_Status = 1;
}
else
{
GPIO_WriteBit(GPIO_PORT, GPIO_PIN, (BitAction)(0));
LED_Status = 0;
}
//Add user code here
ENHTIM_Cmd(ENHTIMER_NUM, ENABLE);
}