查看: 6731|回复: 9

[原创] QTMER脉冲输出功能是个坑

[复制链接]
  • TA的每日心情
    擦汗
    2021-6-26 14:46
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    5

    主题

    31

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    212
    最后登录
    2021-12-30
    发表于 2021-3-18 09:05:56 | 显示全部楼层 |阅读模式
    i.mxrt105x-evk实际测试QTMER的47.6.5.12 Pulse-Output Mode实际是个坑,实测功能,按照手册例程建了一个工程,用官方的板卡测试,逻辑分析仪抓取脉冲数量有时会多发一个脉冲,每次给板卡上电后发送脉冲发现会数量正确,然后再发就会多发一个,没有规律。有时连续多发几次又数量正确,打断点调试感觉是计数通道没有及时关闭造成。
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-6-26 14:46
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    5

    主题

    31

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    212
    最后登录
    2021-12-30
     楼主| 发表于 2021-3-18 09:06:45 | 显示全部楼层
    // (See Processor Expert PulseStream bean.)
    // This example generates six 10ms pulses, from QT1 output.
    // Assuming the chip is operating at 60 MHz.
    //
    // To do this, timer 3 is used to generate a clock with a period of 10ms.
    //
    // Timer 1 is used to gate these clocks and count the number of pulses that have
    // been generated.
    //
    void PulseStream_Init(void)
    {
    // Select IP_bus_clk/16 as the clock source for Timer 3
    /* TMR3_CTRL: CM=0,PCS=0x0C,SCS=0,ONCE=0,LENGTH=1,DIR=0,COINIT=0,OUTMODE=3 */
    setReg(TMR3_CTRL,0x1823); /* Set up mode */
    /* TMR3_SCTRL: TCF=0,TCFIE=0,TOF=0,TOFIE=0,IEF=0,IEFIE=0,IPS=0,INPUT=0,
    Functional Description
    i.MX RT1050 Processor Reference Manual, Rev. 1, 03/2018
    2726 NXP Semiconductors
    Capture_Mode=0,MSTR=0,EEOF=0,VAL=0,FORCE=0,OPS=0,OEN=0 */
    setReg(TMR3_SCTRL,0x00);
    setReg(TMR3_LOAD,0x00); /* Reset load register */
    setReg(TMR3_COMP1,37500); /* (16 * 37500 ) / 60e6 = 0.01 sec */
    /* TMR3_CSCTRL: DBG_EN=0,FAULT=0,ALT_LOAD=0,ROC=0,TCI=0,UP=0,OFLAG=0,
    TCF2EN=0,TCF1EN=0,TCF2=0,TCF1=0,CL2=0,CL1=0 */
    setReg(TMR3_CSCTRL,0x00); /* Set up comparator control register */




    // Timer 3 output is the clock source for this timer.
    /* TMR1_CTRL: CM=0,PCS=7,SCS=0,ONCE=1,LENGTH=1,DIR=0,COINIT=0,OUTMODE=7 */
    setReg(TMR1_CTRL,0x0E67); /* Set up mode */
    /* TMR1_SCTRL: TCF=0,TCFIE=0,TOF=0,TOFIE=0,IEF=0,IEFIE=0,IPS=0,INPUT=0,
    Capture_Mode=0,MSTR=0,EEOF=0,VAL=0,FORCE=0,OPS=0,OEN=1 */
    setReg(TMR1_SCTRL,0x01);
    setReg(TMR1_CNTR,0x00); /* Reset counter register */
    setReg(TMR1_LOAD,0x00); /* Reset load register */
    setReg(TMR1_COMP1,0x04); /* Set up compare 1 register */

    // set to interrupt after the last pulse
    /* TMR1_CSCTRL: DBG_EN=0,FAULT=0,ALT_LOAD=0,ROC=0,TCI=0,UP=0,OFLAG=0,
    TCF2EN=0,TCF1EN=1,TCF2=0,TCF1=0,CL2=0,CL1=0 */
    setReg(TMR1_CSCTRL,0x40); /* Set up comparator control register */
    // Finally, start the counters running
    setReg(TMR3_CNTR,0); /* Reset counter */
    setRegBitGroup(TMR3_CTRL,CM,0x01); /* Run source clock counter */
    setRegBitGroup(TMR1_CTRL,CM,0x01); /* Run counter */
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-6-26 14:46
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    5

    主题

    31

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    212
    最后登录
    2021-12-30
     楼主| 发表于 2021-3-18 09:12:05 | 显示全部楼层
    上面例子是官方的,发4个脉冲。实测第一次发数量是对的,然后再发就会是5个,有时连续几次都是对的,还会一次对一次错。没有一点规律。我开了中断测试,试图在中断内关闭定时器使计数通道没有时钟源,但是问题依然存在,感觉是关闭的速度没那么及时。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-6-26 14:46
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    5

    主题

    31

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    212
    最后登录
    2021-12-30
     楼主| 发表于 2021-3-18 09:16:47 | 显示全部楼层
    以上是发1个脉冲。QTMER的通道计数器的值是正确的,然分析仪抓的脉冲波确实2个脉冲。

    逻辑分析仪抓取

    逻辑分析仪抓取

    调试时监控计数值

    调试时监控计数值
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-6-10 23:03
  • 签到天数: 1502 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    97

    主题

    4688

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    10080
    最后登录
    2025-7-2
    发表于 2021-3-18 09:38:18 | 显示全部楼层
    看看官方的堪误吧!
    拿到开发板把功能全部跑一遍看来还是非常有必要的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    12
    最后登录
    2021-3-23
    发表于 2021-3-19 12:23:36 | 显示全部楼层
    楼主你好,请问有没有使用示波器测试过?逻辑分析仪有时会把高频的干扰脉冲处理为一个脉冲输出,建议你用示波器测试一下看看,或把逻辑分析仪的采样频率适当调低一些。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24866
    最后登录
    2025-7-18
    发表于 2021-3-22 15:42:55 | 显示全部楼层
    请参考此贴(https://community.nxp.com/t5/i-M ... /m-p/1248556#M13348),而且我根据分享的代码在MIMXR1052测试过,每次都只是输出4个周期的PWM波。 evkbimxrt1050_qtmr_timer.zip (631.45 KB, 下载次数: 5)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    12
    最后登录
    2021-3-23
    发表于 2021-3-23 10:45:36 | 显示全部楼层
    本帖最后由 deanchia 于 2021-3-23 10:58 编辑

    找到问题的原因了:如果在触发第二级timer时,第一级timer输出为高电平,就会多输出一个脉冲。当然,第一个脉冲宽度略窄,请看下图。猜测第二级timer按第一级timer的上升沿计数,由于没有捕捉到第一级timer的第一个脉冲的上升沿,所以就会多输出一个脉冲。
    2.png
    可用如下解决办法,每次输出之前,把第一级timer输出强制拉低:
    1. TMR3->CHANNEL[3].CTRL &= ~TMR_CTRL_CM_MASK;                             /* Stop the timer. */
    2. TMR3->CHANNEL[3].SCTRL &= ~TMR_SCTRL_VAL_MASK;                          /* Set forced OFLAG value to be low. */
    3. TMR3->CHANNEL[3].SCTRL |= TMR_SCTRL_FORCE_MASK;                         /* Force OFLAG output low. */
    复制代码
    经测试没有再出现多输出脉冲的问题: 1.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-6-26 14:46
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    5

    主题

    31

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    212
    最后登录
    2021-12-30
     楼主| 发表于 2021-6-26 14:14:22 | 显示全部楼层
    楼上把你的例程能否发上来,我测试一下,我上后面说的问题确实存在的,不细心确实发现不了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-6-26 14:46
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    5

    主题

    31

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    212
    最后登录
    2021-12-30
     楼主| 发表于 2021-6-26 14:16:14 | 显示全部楼层
    反正用起来总是担心这方面的问题,官方的回答也总是说没问题,没有实际的解决方法。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 10:20 , Processed in 0.107272 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表