在线时间240 小时
UID271205
注册时间2016-10-4
NXP金币3237
TA的每日心情 | 开心 昨天 11:10 |
---|
签到天数: 539 天 [LV.9]以坛为家II
金牌会员
- 积分
- 4699
- 最后登录
- 2024-5-3
|
MCX-N947-BRK板上带有触摸板——E1位置,这次尝试使用这个功能
一、电路
N947可以支持使用24个触摸通道
板上使用的是P0_21端口,对应的是TSI0_CH16
二、建立工程
1、打开MCUXpressoIDE,导入例子driver_examples/tsi_v6/tsi_v6_self_cap
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(蓝色)灯反转
- void TSI0_IRQHandler(void)
- {
- #if BOARD_TSI_ELECTRODE_1 > 15
- if ((TSI_GetSelfCapMeasuredChannel(APP_TSI) + 16U) == BOARD_TSI_ELECTRODE_1)
- #else
- if (TSI_GetSelfCapMeasuredChannel(APP_TSI) == BOARD_TSI_ELECTRODE_1)
- #endif
- {
- if (TSI_GetCounter(APP_TSI) > (uint16_t)(buffer.calibratedData[BOARD_TSI_ELECTRODE_1] + TOUCH_DELTA_VALUE))
- {
- LED1_TOGGLE(); /* Toggle the touch event indicating LED */
- s_tsiInProgress = false;
- }
- }
- /* Clear endOfScan flag */
- TSI_ClearStatusFlags(APP_TSI, kTSI_EndOfScanFlag);
- SDK_ISR_EXIT_BARRIER;
- }
复制代码
三、效果
触摸板作为蓝灯的开关
|
|