- 打卡等级:偶尔看看I
- 打卡总天数:16
- 最近打卡:2025-06-13 08:35:04
等待验证会员
- 积分
- 145
|
梁工,遇到一个新问题,折腾了半天没搞懂,程序始终无法运行。我正常运行的程序,包含初始化,使用了TSCTRL = 0x80; 在MCU准备进入休眠时,代码如下,
X32KCR = 0x80 + 0x40; //启动外部32K晶振, 低增益+0x00, 高增益+0x40.
while (!(X32KCR & 0x01)); //等待时钟稳定
printf("进入休眠\n\r");
TSCTRL = 0x00;
TSCTRL = (1<<4) + (1<<3) + (1<<2) + 0;
//关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
DelayXms(1);
PCON |= 0x02; //睡眠
NOP(5);
printf("WAKE..\n\r");
TSCTRL = (1<<7) + (1<<6) + (1<<3) + (1<<2) + 0; //开始扫描, 无平均, B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
if(B_KeyPress)
{
B_KeyPress = 0;
if(WakeUpkey == 0)
{
P20 = ~P20;
TSCTRL = 0x80; //开始自动扫描, 无平均, B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
return; //退出睡眠
}
if(WakeUpkey == 1) P21 = ~P21;
if(WakeUpkey == 2) P42 = ~P42;
printf("WakeUpkey = %bd \n\r",WakeUpkey);
}
现在的现象和问题就是:我只要在其他地方调用过 TSCTRL = 0x80;这句,包含初始化阶段,也就是TSGO=1,等到我再回到上述进入休眠的流程。就无法通过触摸按键从休眠中唤醒。实在不知道问题出在哪? |
|