触摸检测到按键按下调用流程 :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触摸按键固件库详解
推荐阅读最新更新时间:2024-11-06 21:12
设计资源 培训 开发板 精华推荐
- LTC3412EFE 演示板,2.5A 单片,同步。降压稳压器,2.5-5.5Vin,跳线可选 1.8、2.5 或 3.3Vout @ 2.5A
- 【武汉理工大学校赛】直流减速电机控制系统
- 使用 Analog Devices 的 LT1182CS 的参考设计
- 用于光网络的光收发器
- ZRB500精密5V微功率电压基准典型应用
- OP284EPZ 电阻与输入串联的典型应用将过压电流限制在安全值
- 大8位数码管
- SPIRIT1-低数据速率收发器-315 MHz-USB dongle
- NSV45025AT1G 用于基本交流应用的恒流 LED 驱动器的典型应用
- ESP32S3扩展内存后的软件开发板-0603封装