谷动谷力

 找回密码
 立即注册
查看: 831|回复: 0
打印 上一主题 下一主题
收起左侧

【FAE的踩坑之路】QTouch触摸按键低功耗模式会影响其它...

[复制链接]
跳转到指定楼层
楼主
发表于 2023-5-17 22:43:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【FAE的踩坑之路】QTouch触摸按键低功耗模式会影响其它外设的正常运行


问题描述:
QTouch触摸按键低功耗模式会影响其它外设的正常运行。

故障现象:
芯片型号:AVR64DA64-I/PT
开发环境:Atmel Start + Microchip Studio 7.0
故障描述:在使能低功耗后,定时器周期变长,USART接收错误。
/* Enable or disable low-power scan
* Range: 0 or 1.
* Default value: 1
*/
#define DEF_TOUCH_LOWPOWER_ENABLE 1u

分析过程:
1、由于定时器和USART都是使用的24MHz主时钟,怀疑主时钟受影响。检查配置并尝试开启Run standby功能,无效。
ccp_write_io((void *)&(CLKCTRL.OSCHFCTRLA),
             CLKCTRL_FREQSEL_24M_gc         /* 24 */
                 | 1 << CLKCTRL_AUTOTUNE_bp /* Auto-Tune enable: enabled */
                 | 1 << CLKCTRL_RUNSTDBY_bp /* Run standby: enabled */);

2、修改休眠模式,由Standby模式改为Idle模式,外设运行正常。但进入休眠后的电流明显变大。
SLPCTRL.CTRLA = 1 << SLPCTRL_SEN_bp       /* Sleep enable: enabled */
                | SLPCTRL_SMODE_IDLE_gc; /* Idle Mode */ //SLPCTRL_SMODE_STDBY_gc

3、对比Idle和Standby模式的区别,发现在Standby模式下Sleep时定时器和USART会停用。但在未进休眠之前,也应该能正常工作才对?

4、屏蔽掉 sleep 指令,虽然不能休眠,但在进入休眠之前定时器和USART都可以正常运行了,说明故障是由于sleep引起的。

5、检查sleep指令的执行逻辑,在sleep指令前后使用IO口翻转的方法,使用逻辑分析仪抓取IO波形,发现在进入休眠之前,也会执行sleep指令,确定是休眠逻辑异常。

if (time_to_measure_touch_flag != 1u) {
    //Test IO set high.
    sleep_cpu();
    //Test IO set low.
}

6、还原之前的所有改动,然后在sleep指令前增加一个判断条件,仅在低功耗测量模式下才执行sleep指令,故障排除。
if (time_to_measure_touch_flag != 1u) {
    if(lp_mesurement)
        sleep_cpu();
}

解决方案:
在touch.c的touch_process()函数中。
在sleep指令前增加一个判断条件 if(lp_mesurement),仅在低功耗测量模式下才执行sleep指令,未进入休眠前不执行,故障排除。

经验总结:
QTouch库的休眠逻辑也许只考虑了Touch的低功耗,没有考虑同时使用其它外设的情况。需要稍作修改才能正常运行。
+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-13 17:11 , Processed in 0.171179 second(s), 39 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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