Part Number:TCA8418
Hi
1、这块芯片客户曾多次用来做按键扩展,没有出现过问题,本次新项目加了新功能,在这块按键芯片的原有功能基础上加入了普通IO输入接收外部电平变化。问题是在此时出现的。
2、未加入新功能前的io都是配置为KEYPAD模式,即按键两端分别接在ROW和COL的IO上可获取键值,加入新功能后,增加了类似按键的旋钮功能,该旋钮在旋转时会有电平变化,旋钮两端接在四个配成普通IO输入的ROW引脚上,能够检测到旋钮的这四个引脚的电平高低变化,其中两个引脚根据电平高低变化产生中断,相应寄存器已经配置,并且可正常产生中断给主机执行后续操作。但是在该旋钮的一直旋转测试中,该芯片的INT引脚会突然变低电平并保持,无法再产生中断,整个按键板都无法使用了,只能通过开关机来恢复按键芯片的中断线高电平才可继续使用按键板。
3、测试时,新旋钮和按键都能完成相应功能,中断线会产生波形,但在比较快速的旋转旋钮或者旋钮和按键一起操作就会导致突然使用不了的情况,用软件打印检测芯片INT引脚的电平发现,当出现问题时会变低电平,也用示波器检测了INT引脚皆是如此。
4、TCA8418的寄存器CFG(0x01)配为0x13,其他中断使能或者IO的模式和方向都已经配置好,并且实现了想要的功能,是在送给测试部进行较为严谨的测试才出现了上述情况。
5、查看打印还发现INT_STAT 这个寄存器在键盘按键无法使用时,里面的值是0x02也就是位1中的值没有被清掉,但是代码中在发生中断时有清位操作,在后续验证中再加入循环条件写入0x02也无法清除该位的值。但是机子在无操作一段时间后,这个位的值又莫名地恢复为0,新旋钮又可以操作了。
注:相关原理图的截图在下方,RTYA和RTYB是旋钮的两个引脚,因为每个旋钮的脚分别接两个ROW看起来像是两个io之间的闭合线。
Amy Luo:
您好,
通常当按任意键时,INT将从高切换到低,这会向MCU发出中断信号。 INT引脚将保持低电平,直到所有按键事件被读取并清除中断为止。INT引脚保持低电平, 看起来像是MCU没有完全清除中断,因此INT引脚保持低电平。 由于它已经是低电平,新的按键信息不会更改INT引脚,使得它表现为无响应。
如果软件在离开中断服务程序之前不检查INT引脚,可能会发生这种情况。 在中断读取事件之后,但在清除中断标志之前,可能会发生按键事件,这将导致INT不被清除。
您可以将TCA8418寄存器0x01中将INT_CFG位设置为1看是否可以解决上述问题, 它的作用是当MCU试图清除INT但后续仍有一个按键事件时,它将释放INT管脚,让它拉高,等待50 us,然后将INT管脚拉回低,以重新给MCU发出中断信号