找回密码
 立即注册
查看: 1351|回复: 9

求助:触摸阈值TSTH11无法写入数据

[复制链接]
  • TA的每日心情
    开心
    2024-4-27 15:51
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    15

    主题

    22

    回帖

    241

    积分

    中级会员

    积分
    241
    发表于 2023-1-5 19:54:05 | 显示全部楼层 |阅读模式
    本帖最后由 吽吽吽 于 2023-1-5 20:06 编辑

    芯片:STC8H4K64TLCD 45I-LQFP48 229A668354.H+A

    程序:使能TK11 (TSCHEN1=0x00;TSCHEN2=0x08;)并将TK11的 TSDAT存入TSTH11,在将TSTH11H,TSTH11L数据通过串口1发送。
    现象:TSTH11H,TSTH11L的数据都是0x00
    主要函数:
    tk11-1.png
    串口数据:(前00为高位 后00为低位)
    tk11-2.png

    直接TSTH11=0xAAAA;或者TSTH11H=0xAA;TSTH11L=0xAB;
    tk11-3.png
    串口数据:(前00为高位 后00为低位)
    tk11-4.png

    使能TK11 (TSCHEN1=0x00;TSCHEN2=0x08;)直接将TSDATH,TSDATL通过串口输出
    tk11-5.png
    串口数据(高位9D为无触摸,高位12与0E为有触摸数据)
    tk11-6.png

    其前后TSTH10H,TSTH10L;TSTH12H,TSTH12L都能正常读写数据,偏偏TSTH11H,TSTH11L不行。

    初步感觉是寄存器TSTH11H,TSTH11L损坏
    #define     TSTH11                  (*(unsigned int  volatile xdata *)0xfb66)
    #define     TSTH11H                 (*(unsigned char volatile xdata *)0xfb66)
    #define     TSTH11L                 (*(unsigned char volatile xdata *)0xfb67)
    具体有关函数如下:
    int xdata TK_DAT=0x0000;

    CLKSEL=0;  //内部高速时钟

    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x10; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;


    //--------------------触摸设置--------------------------------------
    TSCFG1=0x74;              //触摸按键内部电容工作频率,13/2=6MHz 放电时间7500个系统时钟
    TSCFG2=0x03;              //触摸按键内部参考电压,参考电压3/4ACC 即3.75V
    TSWUTC=255;      //低压触摸唤醒频率。大于扫描时间。
    TSRT=0x00;        //关闭LED分时复用



    void TK_GO()
    {        
    while(1)
    {
    Delay500ms();
    switch(TK_N){
            case 0x03:TSCHEN1=0x08;TSCHEN2=0x00;LED1_B();SPI();break; //TK3触摸  LED1_B(); SPI();指示触摸按键,方便调试。
            case 0x05:TSCHEN1=0x20;TSCHEN2=0x00;LED2_B();SPI();break; //TK5触摸 0000 1000 并开始扫描
            case 0x01:TSCHEN1=0x02;TSCHEN2=0x00;LED3_B();SPI();break; //TK1触摸 0000 0010 并开始扫描
            case 0x00:TSCHEN1=0x01;TSCHEN2=0x00;LED4_B();SPI();break; //TK0触摸 0010 0000
            case 0x11:TSCHEN1=0x00;TSCHEN2=0x08;LED5_B();SPI();break; //TK11触摸 0000 0000   0000 010
            case 0x12:TSCHEN1=0x00;TSCHEN2=0x10;break;
            case 0x10:TSCHEN1=0x00;TSCHEN2=0x04;break;
    }        
    TSCTRL=0xe0;       //1110 0000  7:触摸开始扫描 6:单次扫描  5:扫描完成后暂停,4:低功耗时钟 3:关闭内部比较器 2:关闭低功耗 [1:0]重复1次
    while(TSIF==0){TSIF=TSSTA2;TSIF=TSIF>>7;}   //TSIF变1,扫描完成否则等待扫描完成
    TSCTRL=0x00;      //关闭触摸
    TSSTA2|=0X80;     //触摸中断清零      
    TSIF=0;           //扫描完成标志清零
    TK_DAT=TSDAT;     //取出扫描数据
    switch(TK_N){
            case 0x03:TSTH03=TK_DAT; TK_N=0x05;AURT_1(0x03);AURT_1(TSTH03H);AURT_1(TSTH03L);break;  //TK5触摸数据存入 阈值
            case 0x05:TSTH05=TK_DAT; TK_N=0x01;AURT_1(0x05);AURT_1(TSTH05H);AURT_1(TSTH05L);break;  //TK5触摸数据存入 阈值
            case 0x01:TSTH01=TK_DAT; TK_N=0x00;AURT_1(0x01);AURT_1(TSTH01H);AURT_1(TSTH01L);break;  //TK1触摸数据存入 阈值
            case 0x00:TSTH00=TK_DAT; TK_N=0x11;AURT_1(0x00);AURT_1(TSTH00H);AURT_1(TSTH00L);break;  //TK0触摸数据存入 阈值
            case 0x11:TSTH11=TK_DAT;TK_N=0x12;AURT_1(0x11);AURT_1(TSTH11H);AURT_1(TSTH11L);break;    //TK11触摸数据存入 阈值
            case 0x12:TSTH12=TK_DAT; TK_N=0x10;AURT_1(0x12);AURT_1(TSTH12H);AURT_1(TSTH12L);break;
            case 0x10:TSTH10=TK_DAT; TK_N=0x03;AURT_1(0x10);AURT_1(TSTH10H);AURT_1(TSTH10L);Delay500ms();LED1_G();LED2_G();LED3_G();LED4_G();LED5_G();SPI();break;
    }        

    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:01
  • 签到天数: 139 天

    [LV.7]常住居民III

    26

    主题

    1332

    回帖

    4145

    积分

    论坛元老

    积分
    4145
    发表于 2023-1-6 09:08:19 | 显示全部楼层
    触摸按键的寄存器都是扩展寄存器,配置前需要先设置扩展寄存器访问使能:

    1.png
  • TA的每日心情
    开心
    2024-4-27 15:51
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    15

    主题

    22

    回帖

    241

    积分

    中级会员

    积分
    241
     楼主| 发表于 2023-1-6 12:35:28 | 显示全部楼层
    乘风飞扬 发表于 2023-1-6 09:08
    触摸按键的寄存器都是扩展寄存器,配置前需要先设置扩展寄存器访问使能:

    TSTHn都在扩展RAM,TSTH03 05 01 00 10都能正常读写,唯独TSTH11不能
  • TA的每日心情
    奋斗
    昨天 09:01
  • 签到天数: 139 天

    [LV.7]常住居民III

    26

    主题

    1332

    回帖

    4145

    积分

    论坛元老

    积分
    4145
    发表于 2023-1-6 15:39:18 | 显示全部楼层
    先设置扩展寄存器访问使能,然后再进行配置试试。没设置扩展寄存器访问使能,读写寄存器操作不是在正常的寄存器里执行,你看到的都不是真实寄存器的内容。
  • TA的每日心情
    开心
    2024-4-27 15:51
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    15

    主题

    22

    回帖

    241

    积分

    中级会员

    积分
    241
     楼主| 发表于 2023-1-6 18:32:11 | 显示全部楼层
    乘风飞扬 发表于 2023-1-6 15:39
    先设置扩展寄存器访问使能,然后再进行配置试试。没设置扩展寄存器访问使能,读写寄存器操作不是在正常的寄 ...

    不使能扩展寄存器,就不可能对TSTH03,05,01,0,10进行读写,既然我能对TSTH03,05,01,0,10进行读写,那么就应该能对TSTH11进行读写,实际情况是唯独不能对TSTH11进行读写,我用的是while 与 switch语句,对TSTHn寄存器的操作的几个语句是一样的,其他都正常,唯独不能对TSTH11进行读写。

    该用户从未签到

    551

    主题

    9420

    回帖

    1万

    积分

    管理员

    积分
    13985
    发表于 2023-1-6 18:37:35 | 显示全部楼层
    你先回答,你有没有允许访问扩展的 XSFR寄存器 !!!!!!!!!
    1.png

    该用户从未签到

    551

    主题

    9420

    回帖

    1万

    积分

    管理员

    积分
    13985
    发表于 2023-1-6 18:40:11 | 显示全部楼层
    1.png


    2.png

    3.png

    该用户从未签到

    551

    主题

    9420

    回帖

    1万

    积分

    管理员

    积分
    13985
    发表于 2023-1-6 18:40:50 | 显示全部楼层
    你先回答,你有没有允许访问扩展的 XSFR寄存器 !!!!!!!!!
  • TA的每日心情
    开心
    2024-4-27 15:51
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    15

    主题

    22

    回帖

    241

    积分

    中级会员

    积分
    241
     楼主| 发表于 2023-1-6 20:10:18 | 显示全部楼层
    初始化有这么一句
    P_SW2|=128;         //1000 0000 允许访问片内XSFR  0FA00H~0FFFFH  FB50-FB6F 触摸阈值寄存器
    如果没有这句,那么AURT_1(TSTH11H);AURT_1(TSTH11L);  串口1无任何数据输出。
    下面三句
       TK_DAT=TSDAT;     //取出扫描数据,

    case 0x11:TSTH11=TK_DAT;TK_N=0x12;AURT_1(0x11);AURT_1(TSTH11H);AURT_1(TSTH11L);break;
    //TK11触摸数据存入阈值寄存器TSTH11, 然后串口输出0x11;在输出TSTH11H数据,在输出TSTH11L数据;实际运行输出的是:11 00 00
    case 0x11:TSTH11=0xAAAA;TK_N=0x12;AURT_1(0x11);AURT_1(TSTH11H);AURT_1(TSTH11L);break;
    //阈值寄存器TSTH11写入0xAAAA, 然后串口输出0x11;在输出TSTH11H数据,在输出TSTH11L数据;实际运行输出的是:11 00 00

    tk11-4.png


    case 0x11:TSTH11=TK_DAT;TK_N=0x12;AURT_1(0x11);AURT_1(TSDATH);AURT_1(TSDATHL);break;      
    //TK11触摸数据存入阈值寄存器TSTH11, 然后串口输出0x11;在输出TSDATH数据,  在输出TSDATL数据;  实际运行输出的是:11 9D 02(无触摸) 11 OE B0(有触摸)   
    tk11-6.png





  • TA的每日心情
    奋斗
    昨天 09:01
  • 签到天数: 139 天

    [LV.7]常住居民III

    26

    主题

    1332

    回帖

    4145

    积分

    论坛元老

    积分
    4145
    发表于 2023-1-9 15:38:20 | 显示全部楼层
    分析确认触摸按键门槛值寄存器里面,TSTH11H和TSTH11L被设置成只写模式,不能读取它们的值。其它的是可读可写。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-14 07:02 , Processed in 0.074636 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表