历史上的今天
今天是:2025年03月05日(星期三)
2020年03月05日 | STM8 RC触摸库简单介绍
2020-03-05 来源:eefocus
触摸检测到按键按下调用流程 :TSL_Action -> TSL_SCKEY_P1_Acquisition() -> TSL_IO_Acquisition() -> TSL_SCKey_Process() -> TSL_SCKey_DetectedTreatment() ,其中TSL_Action ()和TSL_SCKey_Process() 还有其他的状态变化和处理。
TSL_IO_Acquisition() 函数为充放电时间检测函数,其中最重要的变量应该是充放电时间和检测到超过预设范围的次数,函数外部会用到,分别为FinalMeasurementValue和RejectionCounter。
void TSL_IO_SW_Burst_Wait_Vil(void)//只看IAR编译器的内容
{
#if defined(_COSMIC_)
......
#elif defined(_IAR_)
__asm("ld a, S:AcquisitionBitMask"); //将AcquisitionBitMask放到a中
__asm("ldw x, S:sTouchIO"); // 将sTouchIO放到x中 装载字(16位)
__asm("incw x"); //增加一个字
// Loop = 1 + 1 + 2 + 2 + 2 cycles = 8 cycles
__asm("WaitForVil:");
// To be sure that the loop last 8 cycles the first instruction must be a 1-byte instruction
// This is to be sure it is fully fetched in 1 cycle. The second instruction must be shorter than 4 bytes.
// If this not the case, the code must be aligned.
__asm("bcp a, (x)"); // 1 cycles 逻辑比较
__asm("jreq ??EndWaitForVil"); //跳转到EndWaitForVil处
__asm("ldw y, TIMACQ_CNTR"); // 2 cycles; hw counter also used for timeout ...
__asm("cpw y, #0x0E00"); // 2 cycles; Timeout compare 字数值比较
__asm("jrult ??WaitForVil");
__asm("EndWaitForVil:");
#else //_RAISONANCE_
......
#endif
}
这个函数的大概意思是说检测对应管脚的电平,直到相同电平或者超时跳出,FinalMeasurementValue中装的应该就是TIMACQ_CNTR计数器的值(不知道是否正确,请大神指正)
上一篇:stm8l唤醒操作遇到问题
下一篇:STM8S触摸按键固件库详解
史海拾趣
|
摘要:针对高压钠灯工作特点以及工作在高频状态下的缺陷,采用电流跟踪技术,设计了一种低频高压钠灯电子镇流器,并设计了可靠的逻辑控制启动电路。最后,给出实验结果。 关键词:高压钠灯;电子镇流器;闭环;电流跟踪 0 引 ...… 查看全部问答> |
|
在Protel中利用向导创建贴片元件时,你会发现SOP的管脚焊盘默认的是50milX100mil(毫英寸),而TSOP的参数书册给出的是18milX33mil,所以,我想问下是否TSOP(T-Type II)是SOP封装的浓缩型,尺寸有了压缩? 很多SDRAM(比如电脑上的内存条用的芯 ...… 查看全部问答> |
|
我用的是ylp2440的开发板,其cpu是s3c2410,买的时候带来的是linux2.6.12的内核,以及arm-linux-gcc的交叉编译工具。现在我想让这个板子跑uclinux的系统,那样怎么弄?是不是把uclinux移植到板子上,然后找个交叉编译工具,在linux的虚拟机上编程? ...… 查看全部问答> |
|
基于WINCE 5.0操作平台,在VC2005 开发MFC智能设备应用软件 在VS2005开发平台下,开发的软件直接通过Microsoft ActiveSync 同步软件下载到2440开发扳上可以运行(通过开发环境) ;单独生成Release版本的,脱离开发环境下载到开发板上就不能运行了. 而使用eVC开发的应用程序就不存在这个问题. &nbs ...… 查看全部问答> |




