查看: 114|回复: 0

[原创] 【MCX-N947分享】4、试用触摸功能

[复制链接]
  • TA的每日心情
    开心
    昨天 11:10
  • 签到天数: 539 天

    [LV.9]以坛为家II

    6

    主题

    2856

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    4699
    最后登录
    2024-5-3
    发表于 2024-4-8 11:23:51 | 显示全部楼层 |阅读模式
    MCX-N947-BRK板上带有触摸板——E1位置,这次尝试使用这个功能



    一、电路
    N947可以支持使用24个触摸通道
    TSI_CH.jpg

    板上使用的是P0_21端口,对应的是TSI0_CH16
    TSI_电路图.jpg

    二、建立工程
    1、打开MCUXpressoIDE,导入例子driver_examples/tsi_v6/tsi_v6_self_cap
    project1.jpg project.jpg

    2、初始化
    main函数中
    (1)在BOARD_InitPins();中初始化P0_21引脚
    (2)TSI模式设置与初始化
        /* TSI default hardware configuration for self-cap mode */
        TSI_GetSelfCapModeDefaultConfig(&tsiConfig_selfCap);
        /* Initialize the TSI */
        TSI_InitSelfCapMode(APP_TSI, &tsiConfig_selfCap);
        /* Enable noise cancellation function */
        TSI_EnableNoiseCancellation(APP_TSI, true);





        NVIC_EnableIRQ(TSI0_IRQn);
        TSI_EnableModule(APP_TSI, true); /* Enable module */

    (3)校准
        /*********  CALIBRATION PROCESS ************/
        memset((void *)&buffer, 0, sizeof(buffer));
        TSI_SelfCapCalibrate(APP_TSI, &buffer);






    (4)中断启用
        TSI_EnableHardwareTriggerScan(APP_TSI, false); /* Enable software trigger scan */
        TSI_DisableInterrupts(APP_TSI, kTSI_EndOfScanInterruptEnable);
        TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
        TSI_SetSelfCapMeasuredChannel(APP_TSI, BOARD_TSI_ELECTRODE_1);
        TSI_StartSoftwareTrigger(APP_TSI);
        while (!(TSI_GetStatusFlags(APP_TSI) & kTSI_EndOfScanFlag))
        {
        }
        TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag | kTSI_OutOfRangeFlag);


        TSI_EnableInterrupts(APP_TSI, kTSI_GlobalInterruptEnable);
        TSI_EnableInterrupts(APP_TSI, kTSI_EndOfScanInterruptEnable);
        TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
        TSI_SetSelfCapMeasuredChannel(APP_TSI, BOARD_TSI_ELECTRODE_1);

        while (s_tsiInProgress)
        {
            TSI_StartSoftwareTrigger(APP_TSI);
        }
        s_tsiInProgress = true;


        TSI_EnableModule(APP_TSI, false);
        TSI_EnableHardwareTriggerScan(APP_TSI, true);
        TSI_EnableInterrupts(APP_TSI, kTSI_EndOfScanInterruptEnable);
        TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);

        TSI_SetSelfCapMeasuredChannel(APP_TSI,
                                      BOARD_TSI_ELECTRODE_1); /* Select BOARD_TSI_ELECTRODE_1 as detecting electrode. */
        TSI_EnableModule(APP_TSI, true);






    3、功能实现
    在tsi_v6_self_cap.c建立触摸中断函数,当触摸时,LED1(蓝色)灯反转
    1. void TSI0_IRQHandler(void)
    2. {
    3. #if BOARD_TSI_ELECTRODE_1 > 15
    4. if ((TSI_GetSelfCapMeasuredChannel(APP_TSI) + 16U) == BOARD_TSI_ELECTRODE_1)
    5. #else
    6. if (TSI_GetSelfCapMeasuredChannel(APP_TSI) == BOARD_TSI_ELECTRODE_1)
    7. #endif
    8. {
    9. if (TSI_GetCounter(APP_TSI) > (uint16_t)(buffer.calibratedData[BOARD_TSI_ELECTRODE_1] + TOUCH_DELTA_VALUE))
    10. {
    11. LED1_TOGGLE(); /* Toggle the touch event indicating LED */
    12. s_tsiInProgress = false;
    13. }
    14. }

    15. /* Clear endOfScan flag */
    16. TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
    17. SDK_ISR_EXIT_BARRIER;
    18. }
    复制代码



    三、效果
    触摸板作为蓝灯的开关
    微信图片_20240408112141.jpg




    开心
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-4 02:55 , Processed in 0.112625 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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