TIMER模块外部捕获功能
Overview
以 AC638N 为例,提供 timer 外部捕获功能的应用示例、工程配置、API 介绍和常见问题。
应用示例
timer 外部捕获功能的具体源代码详见 sdk/bsp/AC638N/src/timer_cap.c
timer_cap.c
中参考示例如下:static void user_tmr3_cap_cbfun(u8 edge, u32 cnt) { log_info("t3 %d %d", edge, cnt); } static void user_tmr4_cap_cbfun(u8 edge, u32 cnt) { log_info("t4 %d %d", edge, cnt); } void timer_cap_test(void) { log_info("*********** timer cap test *************"); timer_cap_init(JL_TIMER3, IO_PORTC_02, 0, CLK_DIV_4, user_tmr3_cap_cbfun); timer_cap_init(JL_TIMER4, IO_PORTC_03, 2, CLK_DIV_8, user_tmr4_cap_cbfun); extern void wdt_clr(); while (1) { wdt_clr(); } }
工程配置
在 sdk/apps/main.c 中函数
user_main()
添加如下工程代码:int user_main() { extern void timer_cap_test(void); timer_cap_test(); }
编译下载后,PC2或PC3上连接红外接收头,按下红外遥控器上的按键,串口将打印两个捕获间隔的时间计数值。
API参考
timer 外部捕获功能常用相关 API 介绍,具体软件代码见 sdk/bsp/AC638N/src/timer_cap.c
Functions
-
void timer_cap_init(JL_TIMER_TypeDef *JL_TIMERx, u32 cap_io, u8 edge, CLK_DIV_4bit clk_div, void (*cbfun)(u8, u32))
timer外部捕获功能初始化
- Parameters:
JL_TIMERx – JL_TIMER0/1/2/3/4/5
cap_io – JL_PORTA_01, JL_PORTB_02,,,等等,支持任意普通IO
edge – 捕捉的触发边沿,0:上升沿触发 1:下降沿触发 2:上下沿切换触发,第一个边沿是上升沿 3:上下沿切换触发,第一个边沿是下降沿
clk_div – 时钟源的分频选择,分频越小,输入捕获的计数值数得越快,变化量就越大。时钟源统一选择std_24M
cbfun – 捕获起中断的中断回调函数,传出边沿和计数值
-
void timer_cap_test(void)
timer外部捕获参考示例