Edit online

测试指南

20 Dec 2024
Read time: 5 minute(s)

测试环境

  • 硬件
    • FPGA 验证版

    • USB 转串口的线缆

    • 信号源(用于测试触发模式)

    • 示波器(用于观察引脚输出)

  • 软件
    • PC 端的串口终端软件,用于 PC 和 开发板进行串口通信

    • Luban-Lite 自带的 test_gptimer 命令行工具

软件配置

  1. 在 SDK 根目录下执行 scons --menuconfig,进入 menuconfig 的功能配置界面。

  2. 按如下选择,打开 test_gptimer 命令行工具:
    Drivers options --->
        Drivers examples --->
            [*]  Enable GPTimer driver test command
    
  3. 同时,按如下选择,打开中断打印配置:
    Rt-Thread options --->
        RT-Thread Components --->
                        Utilities --->
            [*] Enable ISR log.
    

GPTimer 常见测试

test_gptimer 的常见测试场景和流程如下所示:
注: 关于命令参数详细描述,可查看 test_gptimer 参数详解
  • 单次自动计数模式

    使用下列命令配置 GPTimer0 的单次自动计数模式,以设置一个超时时间是 1.000003 秒(即 1 秒 3 微秒)的定时器为例,并启用调试日志:
    test_gptimer -m oneshot -c 0 -s 1 -u 3 -g count -a auto -f 1000 -d
    输出示例如下,表示创建成功:
    gptimer0: Create a timer of 1.000003 sec, Oneshot mode

    当计时器超时时,可以看到如下调试日志输出:

    0/0 gptimer0 timeout callback! Elapsed 1001154 us
  • 循环自动计数模式

    使用下列命令配置 GPTimer0 的循环自动计数模式,超时时间是 1 秒 3 微秒的定时器,并启用调试日志,会循环输出 59 次超时回调:
    test_gptimer -m period -c 0 -s 1 -u 3 -g count -a auto -f 1000 -d
    输出示例如下,表示创建成功:
    gptimer0: Create a timer of 1.000003 sec, Period mode
        Will loop 59times
    当计时器每次超时时,调试日志输出如下所示:
    0/59 gptimer0 timeout callback! Elapsed 1001142 us
    1/59 gptimer0 timeout callback! Elapsed 995703 us
    2/59 gptimer0 timeout callback! Elapsed 995912 us
    3/59 gptimer0 timeout callback! Elapsed 995923 us
    4/59 gptimer0 timeout callback! Elapsed 995929 us
    5/59 gptimer0 timeout callback! Elapsed 995922 us
    6/59 gptimer0 timeout callback! Elapsed 995918 us
    7/59 gptimer0 timeout callback! Elapsed 995915 us
    8/59 gptimer0 timeout callback! Elapsed 995922 us
    ......
    59/59 gptimer0 timeout callback! Elapsed 995797 us

    本循环计数模式示例仅供演示使用,在持续大约 60 秒后自动停止定时器。在实际使用过程中,如果配置了循环输出模式,则会不断输出直至配置为其他模式。

  • 单次触发计数模式

    触发模式下日志打印的时间包含启动定时器到有信号触发的时间。

    使用下列命令配置 GPTimer0 的单次触发计数模式,超时时间是 1 秒 3 微秒的定时器,并启用双边沿触发模式和调试日志:
    test_gptimer -m oneshot -c 0 -s 1 -u 3 -g count -a bil -f 1000 -d
    输出示例如下,表示创建成功:
    gptimer0: Create a timer of 1.000003 sec, Oneshot mode
    当信号源或其他方式往 GPTimer 输入引脚产生一个信号变化时,定时器将被触发启动。输出示例如下:
    0/59 gptimer0 timeout callback! Elapsed 25708887
  • 单次自动输出模式

    使用下列命令配置 GPTimer0 的单次自动输出模式,超时时间是 1 秒 3 微秒的定时器:
    test_gptimer -m oneshot -c 0 -s 1 -u 3 -g match -a auto -f 1000
    输出示例如下,表示创建成功:
    gptimer0: Create a timer of 1.000003 sec, Oneshot mode
  • 自动输出模式

    使用下列命令配置 GPTimer0 的循环自动输出模式,超时时间是 1 秒 3 微秒的定时器:
    test_gptimer -m period -c 0 -s 1 -u 3 -g match -a auto -f 1000
    输出示例如下,表示创建成功:
    gptimer0: Create a timer of 1.000003 sec, Period mode
提示:
  • 示例中的运行 log 出现了一些误差,属于合理现象。这是因为 GPTimer 的精度是微秒级,RTOS 的调度和调试信息输出都会干扰到定时器的精度。

  • 输出模式下可以使用示波器观察波形。

  • 为了简化 test_gptimer 命令,可在 test_gptimer.c 文件的 g_outval 结构体中修改输出引脚的配置参数。

  • GPTimer 达到比较值后默认继续计数,可在 test_gptimer.c 中的 g_cmpa(b)_act 变量修改为停止计数或清零计数。

test_gptimer 参数详解

以下是一个 test_gptimer 命令示例,配置 GPTimer0 为循环自动计数模式,并设置超时时间为 1 秒 3 微秒,同时启用调试日志:
test_gptimer -m period -c 0 -s 1 -u 3 -g count -a auto -f 1000 -d
test_gptimer 命令参数解释及示例如下所示:
test_gptimer parameter
  • -m mode
    创建定时器类型,支持创建两类 Timer:
    • oneshot 类型定时器:单次触发,默认值。
      -m oneshot

      只触发一次超时,随后 Timer 会被注销。适用于需要一次性触发的任务,例如超时报警、单次事件等。

    • period 类型定时器:循环触发
      -m period

      循环触发超时,适用于需要周期性触发的任务,例如心跳包发送、定时数据采集等。

  • -c GPTimer channel number

    选择 GPTimer 通道编号,可选参数范围是 [0, 2]。

    示例:-c 0-c 2

  • -s second: 设

    设置计数器的秒数,必须大于 0。

    示例:-s 1

  • -u microsecon

    设置计时器的微秒数,必须大于 0。

    示例:-u 3

  • -g gptmode
    设置计时器的模式,可选模式包括:
    • count:计数

    • match:匹配
  • -a triggermode
    设置 GPTimer 的触发模式,可选模式包括:
    • auto:自动
    • rsi:上升沿
    • fall:下降沿
    • bil:双边沿。
  • -f frequency

    设置 GPTimer 的频率,必须大于 0。

    示例:-f 1000

  • -d: 显示超时日志,用于调试目的。

    test_gptimer 命令默认不打印定时器的超时信息,需要使用 -d 参数打开日志。

  • h

    显示帮助信息。

    test_gptimer -h
    输出结果如下所示:
    Usage: test_gptimer [options]:
         -m, --mode     mode of timer, oneshot/period
         -c, --channel      the number of gptimer [0, 2]
         -s, --second       the second of timer (must > 0)
         -u, --microsecond  the microsecond of timer (must > 0)
         -g, --gptmode      he mode of gptimer, count/match
         -a, --triggermode  the trigger mode of gptimer, auto/rsi/fall/bil
         -f, --frequency    the frequncy of the gptimer (must > 0)
         -d, --debug        show the timeout log
         -h, --usage