本文主要是介绍KL25的TSI按键操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
花了一天时间写TSI按键代码,其实写代码只用了30分钟,但是看数据手册却用了我整整半天。擦!
不过一看TSI模块的寄存器只有3个,其实就可以知道这个模块并没有多复杂,复杂的地方在于机制的理解和参数的理解,数据手册有20页,也不算多。
该模块通过两个恒流源给按键充电时的时间差来确定按键是否按下,其中一个是参考恒流源。当按键按下的时候,按键的电容增大,用恒流源将其充满电所需的时间就会变长,这样就可以区分按键是否按下。当然这只是简单的解释。实际的检测过程比较复杂,也就是这个比较难以理解。
不得不说,数据手册的表达还是很到位的,区区20页,讲清楚了所有的操作机理,表达能力不可谓不强,几乎没有任何重复的叙述,所以每一句都很关键,都要细看。
之前听飞思卡尔的研讨会的时候,感觉飞思卡尔很明显对于自己的TSI设计很得意,重点提到多次。该模块确实设计的很了得,各种参数居然都可以设置,比如恒流源电流大小,重复检测多少次,参考电流源电流大小,充电充满与放电放空的电压差,里面还有分频器。不过说回来,正是因为东西这么多,才这么烦人。对于一个仅仅只做按键功能的东西,你整这么多寄存器,不觉得很麻烦吗?
下面是写的初始化代码:
void TSI_Init (void)
{
SIM_SCGC5 |= SIM_SCGC5_TSI_MASK; // Enable clock gating for TSI
/* Enable proper GPIO as TSI channels *///以下引脚的功能设置为TSI通道
PORTB_PCR18
这篇关于KL25的TSI按键操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!