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外部捕获参考示例