配置了 TK0/TK1/TK3/TK4/TK5 5个触摸按键,打印扫描的按键值
有两个通道的值溢出了,在中断里查询 TSDOV 确实置位了,
手册上说,如果出现溢出,可以修改软件配置或者系统硬件以避免发生溢出
目前我也修改了 TSVR,但是没啥作用,不知道还有哪些配置是关联扫描数据溢出的?
能请大佬详细讲讲吗?另外手册上说可以调整系统硬件,请问具体是调整哪一块呢?
附上触摸按键的相关配置代码:
- void bsp_StcTouchkeyInit(void)
- {
- IE2 &= ~(1 << 7); //停止触摸中断
- TSCTRL = 0; //停止自动扫描
- TSSTA2 |= 0xC0; //清除标志位
- /* 根据实际使用到的 GPIO 将其配置为高阻 */
- P1_MODE_IN_HIZ(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); // P1.5/P1.4/P1.3/P1.1/P1.0 设置为高阻输入
-
- /*
- 根据实际使用的触摸按键,使能对应的即可
- 此处使能了 TK00、TK01、TK03、TK04、TK05 共 5 个触摸按键
- */
- TSCHEN1 = BV(0) | BV(1) | BV(3) | BV(4) | BV(5); // TK00~TK07
- TSCHEN2 = 0x00; // TK08~TK15
-
- /* TSRT 寄存器用于配置触摸按键控制器和 LED 驱动器分时多工 */
- TSRT = 0x00; // 没有LED分时扫描
-
- /*
- 触摸按键配置寄存器
- TSCFG1:
- bit6~bit4: 开关频率配置率(频率越高充电时间越短) 开关电容工作频率 = fosc/(2*(TSCFG1[6:4]+1))
- bit2~bit0: 配置触摸按键控制器内部的Cref的起始对地放电时间 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
-
- TSCFG2:
- bit1~bit0: 配置触摸按键控制器内部的参考电压 0(1/4 AVcc) 1(1/2 AVcc) 2(5/8 AVcc) 3(3/4 AVcc)
- */
- TSCFG1 = 0x7F;
- TSCFG2 = 0x00;
- /*
- 触摸按键控制寄存器(TSCTRL)
- bit7(TSGO): 正常工作模式下触摸按键控制器启动控制 0:停振扫描 1:正常模式下启动扫描
- bit6(SINGLE):单次扫描模式控制(TSGO为1时此寄存器位写入无效,TSGO为0时才可写入) 0:重复扫描模式 1:单次扫描模式
- bit5(TSWAIT):触摸按键控制器等待控制(TSGO为1时此寄存器位写入无效,TSGO为0时才可写入)0:触摸按键控制器自动重复扫描 1:触摸按键控制器等待TSIF状态为1后才重复扫描
- bit4(TSWUCS):低功耗模式下触摸按键控制器时钟源选择(TSGO为1时此寄存器位写入无效,TSGO为0时
- 才可写入)
- bit3(TSDCEN):触摸按键控制器内部16位数字比较器控制位(TSGO为1时此寄存器位写入无效,TSGO为0
- 时才可写入)
- bit2(TSWUEN):触摸按键控制器低功耗唤醒使能位(TSGO为1时此寄存器位写入无效,TSGO为0时才可写
- 入)
- bit1~bit0(TSSAMP):单一触摸通道重复扫描次 0:1次 1:2次 2:3次 3:4次
- */
- TSCTRL = 0xA0 & 0x7F; // 配置其他项时,确保 TSGO 为 0
-
- TSCTRL |= 0x80; // 其他项配置完成时,设置 TSGO 为 1
-
- IE2 |= (1 << 7); // 使能触摸中断
- EA = 1; // 开总中断
-
-
- bsp_StcTouchkeyVarInit();
- }
复制代码
|