Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    【FAQ】全志XR806芯片 如何使用timer命令行命令?

    其它全志芯片讨论区
    xr806 xr872 faq 技术支持
    1
    1
    1423
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • q1215200171
      budbool LV 9 last edited by

      1.问题背景
      XR809/XR871/XR808/XR872上timer如何使用

      2.问题描述
      timer模块在芯片中只是一个小模块,在发布文档中没有专门的文档进行说明,只有代码用例,部分客户看代码后会对timer里的一些参数云里雾里的

      3.解决办法
      下面会从几个方面帮助客户去了解以及测试timer模块。

      3.1如何在固件中添加测试timer测试用的命令行命令:

      (1).project/XXX/command.c文件中添加timer命令如下:

      --- a/platforms/xr806/xr806-os/project/tuya/command.c
      +++ b/platforms/xr806/xr806-os/project/tuya/command.c
      @@ -181,6 +181,7 @@ static const struct cmd_data g_main_cmds[] = {
      +       { "timer",  cmd_timer_exec },
              { "sysinfo",cmd_sysinfo_exec, CMD_DESC("system information command") },
              { "help",   cmd_main_help_exec, CMD_DESC(CMD_HELP_DESC) },
      

      (2).添加完成后编译烧录固件在命令行中输入help命令可以看到timer命令被编译进固件中了:

      [*] net      : network command
      [*] rf       : radio frequency command
      [*] drv      : driver command
      [*] echo     : echo command
      [*] mem      : memory command
      [*] heap     : heap use information command
      [*] thread   : thread information command
      [*] upgrade  : upgrade command
      [*] reboot   : reboot command
      [*] ota      : over the airtechnology upgrade commands
      [*] etf      : etf command
      [*] pm       : power management command
      [*] efpg     : efpg command
      [*] flash    : flash control command
      [*] lmac     : low mac command
      [*] timer
      [*] sysinfo  : system information command
      [*] ble
      [*] help     : print this message and quit
      

      (3)timer命令的源码在project/common/cmd/cmd_timer.c,用户可以对该源码进行修改测试,也可以参考该文件的timer接口进行应用开发。

      3.2timer命令如何使用

      (1)timer命令行命令支持下面几个子命令:

      timer config i=X m=X s=X d=X p=X   -->  配置timer的参数,参数后面说明
      timer deconfig i=X                 -->  取消当前timer的配置参数
      timer start i=X                    -->  启动对应的timer(支持2个timer 0/1)
      timer stop i=X                     -->  停止对应的timer
      timer pause i=X                    -->  暂停对应的timer
      timer continue i=X                 -->  继续对应的timer
      Timer value i=X                    -->  获取对应timer的值(该值是剩余多少定时时间,需计算)
      

      (2)timer命令行参数说明:

      参数i:0/1  -->  控制的是哪个timer,806支持2个timer,0/1
      参数m:repeat/once  -->  定时模式,repeat:循环定时模式,once:一次定时模式
      参数s:LF/HF  -->  时钟源,LF:低频32k晶振,HF:高频晶振,该晶振为外部所接晶振,例如如果接的是40M,HF就是40M,接的是26M,HF就是26M
      参数d:1/2/4/8/16/32/64/128  -->  分频系数
      参数p:                    -->  定时period值,该值需要用户根据时钟源,分频系数,定时时间进行计算:
                                      需要用到的计算公式如下:
                                      interval = period / ( clk-src / clk-div )
                                      period = interval * ( clk-src / clk-div )
      

      (3)公式参数说明:

      参数interval:需要定时的值(例如5s,0.5s)
      参数clk-src:时钟源(例如40M,26M)
      参数clk-div:分频系数(分频系数的选择影响精度和定时时间长短范围)
      参数period:根据定时值,时钟源,分频系数计算出来的值,该值会写到timer寄存器中,timer模块
                  就是根据这个值进行定时的。
      
      例子:例如需要定时5s,板子外接时钟源是26M,分频系数选4,那么根据公式可以计算出period的值应该需要填32,500,000
      

      4.timer命令实操说明说明

      timer config i=1 m=once s=HF d=4 p=32500000    -- 1
      <ACK> 200 OK
      timer start i=2                                -- 2
      <ACK> 200 OK
      timer value i=1                                -- 3
      <ACK> 200 value=19462685
      timer value i=1                                -- 4
      <ACK> 200 value=4617179
      timer value i=1                                -- 5
      <ACK> 200 value=0
      
      (1).配置timer 1,模式设定once模式,时钟源选HF(26M),分频选4,因为想定时5s,因此算出p值需要填写32500000
      (2).启动定时器1
      (3).第一次获取period值19462685,根据公式interval = period / ( clk-src / clk-div )
          可以算出剩余时间interval = 19462685 / (26000000 / 4) = 2.994s
      (4).同上可以算出第二次剩余时间 interval = 4617179 / (26000000/4) = 0.71s
      (5).第3次获取值时因为已经超过5s,所以获取到的值为0
      

      想设定其他分频和时间可根据公式以及需要设定的分频时间算出period值填到对应的函数接口即可。

      其他命令相对简单,因此不再进行实操显示

      注意:
      如果遇到timer测试定时时间与现实实际实际不符,可以从下面一些方向进行排查:
      (1).计算晶振与实际晶振部分(例如:计算时使用26M,但实际板子接的时40M)
      (2).重复计算一下period值,period值填写错误也会导致定时时间不准确

      附件timer_pparam.xlsx:timer_param.xlsx
      附件是26M参数的时间,分频,period值的参考表,其他频率的晶振也可以参考该表算出period值。

      1 Reply Last reply Reply Quote Share 0
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策