测试指南
测试环境
- 硬件
-
FPGA 验证版
-
USB 转串口的线缆
-
信号源(用于测试触发模式)
-
示波器(用于观察引脚输出)
-
- 软件
-
PC 端的串口终端软件,用于 PC 和 开发板进行串口通信
-
Luban-Lite 自带的
test_gptimer命令行工具
-
软件配置
-
在 SDK 根目录下执行 scons --menuconfig,进入 menuconfig 的功能配置界面。
-
按如下选择,打开
test_gptimer命令行工具:Drivers options ---> Drivers examples ---> [*] Enable GPTimer driver test command -
同时,按如下选择,打开中断打印配置:
Rt-Thread options ---> RT-Thread Components ---> Utilities ---> [*] Enable ISR log.
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 -m period -c 0 -s 1 -u 3 -g count -a auto -f 1000 -d
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
