很多客户在使用TSI模块时,通常会考虑使用飞思卡尔TSS库,一方面它可以帮助用户快速完成一些旋转、滑条、矩阵键盘等的应用,另一方面该软件库集成了一些防水、防噪声等一些滤波算法,从而简化应用。但该TSS库的形式不提供源代码,用户大多对TSS的运行机制不是很了解,会在应用中产生一些误区。 一、 问题的提出: 有个做智能遥控器的客户,使用KL16Z256VLH4的14路TSI通道(9x5)构成矩阵键盘来作手势判断,当前使用TSS库已实现简单的手势判断。但客户反馈在使用KL16进入LLS或者STOP等低功耗模式时,使用TSI无**常唤醒。 二、 问题的分析与解决: 仔细分析发现,问题主要有三个, 相比较常规模式下这两个模块的配置,使用TSI的低功耗唤醒功能需要额外配置的几个关键点如下: - 首先,配置TSI模块在低功耗模式下的触发源,对于KL16只能配置为LPTMR,另外System Trigger Mode一定要设置为AUTO,具体的触发时间间隔需要额外通过LPTMR模块设定。此处千万不能选择SW软件触发和ALWAYS触发,否则LPTMR的设置无效,当芯片进入低功耗模式MCU内核停止工作,芯片也就无法唤醒。
- 其次,需要使能在Low Power模式的功能,并指定用来唤醒的TSI通道,此处需要特别强调的是,此处的9指的并不是TSI的物理通道9,而是TSI Number Of Electrodes配置中通道的序列号9,这点特别容易出错。
- 最后,还有一点容易忽略的点就是LLWU模块唤醒源的配置
2. TSS库中TSS_Task()函数和TSI_ISR()中断的处理细节的影响; 通常用户会认为在完成以上TSS的唤醒配置之后,如果芯片进入低功耗模式,通过配置的唯一TSI通道就可以将芯片唤醒,具体代码如下。 但是测试过程中发现,MCU并不能被正常唤醒。通过和客户一起检查寄存器发现在经过TSS_Task()函数和TSI_Isr()中断后STM位被清0,这也就意味着芯片在进入低功耗之前,被配置成软件触发,所以也就不能实现通过LPTMR在低功耗模式下触发TSI进行按键扫描唤醒。
|