查看: 4223|回复: 5

[CodeWarrior] CodeWarrior v10.3 PE工具模拟触摸按键功能

[复制链接]

该用户从未签到

2

主题

14

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
发表于 2013-5-30 14:36:27 | 显示全部楼层 |阅读模式
请问大牛们,如何实现一次只能触摸一个按键,如果手指放在某个触摸键上,那么其他按键将无法被检测到。
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

10

主题

459

帖子

0

中级会员

Rank: 3Rank: 3

积分
303
最后登录
2024-10-24
发表于 2013-5-30 14:51:14 | 显示全部楼层

RE:CodeWarrior v10.3 PE工具模拟触摸按键功能

你把问题描述的再清楚一点,你采用的芯片是哪个?硬件上大致如何连接?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

14

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
 楼主| 发表于 2013-5-30 22:30:28 | 显示全部楼层

RE:CodeWarrior v10.3 PE工具模拟触摸按键功能

采用的是MKL25Z128VLK4芯片,现在使用codewarrior v10.3 PE工具的TSS实现触摸按键,全部9个按键触摸功能已实现,问题是现在的按键是多点触摸的,可以同时触摸多个按键,现在需要解决的问题是单个按键触摸,如果同时多个按键被触摸只能识别最早被触摸的那个,请问如何实现,使用PE工具实现还是自己重新写代码解决?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

14

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
 楼主| 发表于 2013-6-4 13:55:57 | 显示全部楼层

回复:CodeWarrior v10.3 PE工具模拟触摸按键功能

回复第 2 楼 于2013-05-30 14:51:14发表:
你把问题描述的再清楚一点,你采用的芯片是哪个?硬件上大致如何连接? 

采用的是MKL25Z128VLK4芯片,现在使用codewarrior v10.3 PE工具的TSS实现触摸按键,全部9个按键触摸功能已实现,问题是现在的按键是多点触摸的,可以同时触摸多个按键,现在需要解决的问题是单个按键触摸,如果同时多个按键被触摸只能识别最早被触摸的那个,请问如何实现,使用PE工具实现还是自己重新写代码解决?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

14

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
 楼主| 发表于 2013-6-4 14:01:50 | 显示全部楼层

回复:CodeWarrior v10.3 PE工具模拟触摸按键功能

回复第 3 楼 于2013-05-30 22:30:28发表:
采用的是MKL25Z128VLK4芯片,现在使用codewarrior v10.3 PE工具的TSS实现触摸按键,全部9个按键触摸功能已实现,问题是现在的按键是多点触摸的,可以同时触摸多个按键,现在需要解决的问题是单个按键触摸,如果同时多个按键被触摸只能识别最早被触摸的那个,请问如何实现,使用PE工具实现还是自己重新写代码解决? 

 
 
还想请教个kl25  TPM问题
TPM模块代码如下(使用PE生成):
LDD_TDeviceData* TU1_Init(LDD_TUserData *UserDataPtr)
{
    TU1_TDeviceData *DeviceDataPrv;
   DeviceDataPrv = &DeviceDataPrv__DEFAULT_RTOS_ALLOC;
  DeviceDataPrv->UserDataPtr = UserDataPtr; /* Store the RTOS device structure */
   DeviceDataPrv->SavedISRSettings_TUInterrupt.isrData = _int_get_isr_data(LDD_ivIndex_INT_TPM1);
  DeviceDataPrv->SavedISRSettings_TUInterrupt.isrFunction = _int_install_isr(LDD_ivIndex_INT_TPM1, TU1_Interrupt, DeviceDataPrv);
    //SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1);
  SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK;                                                   
  TPM1_SC = 0x00U;                     /* Clear status and control register */
   TPM1_CNT = 0x00U;                    /* Reset counter register */
   TPM1_C0SC = 0x00U;                   /* Clear channel status and control register */
   TPM1_C1SC = 0x00U;                   /* Clear channel status and control register */
  TPM1_MOD = TPM_MOD_MOD(0xFFFF);      /* Set up modulo register */
   TPM1_C1SC = TPM_CnSC_CHIE_MASK |
              TPM_CnSC_MSB_MASK |
              TPM_CnSC_ELSB_MASK |
              TPM_CnSC_ELSA_MASK;      /* Set up channel status and control register */
    TPM1_C1V = TPM_CnV_VAL(0x0);      /* Set up channel value register */
  PORTE_PCR21 = (uint32_t)((PORTE_PCR21 & (uint32_t)~(uint32_t)(
                 PORT_PCR_ISF_MASK |
                 PORT_PCR_MUX(0x04)
                )) | (uint32_t)(
                 PORT_PCR_MUX(0x03)
                ));                                                 
  DeviceDataPrv->EnEvents = 0x01u;     /* Enable selected events */
   NVIC_IPR4 = (uint32_t)((NVIC_IPR4 & (uint32_t)~(uint32_t)(
               NVIC_IP_PRI_18(0x7F)
              )) | (uint32_t)(
               NVIC_IP_PRI_18(0x80)
              ));                                                 
  /* NVIC_ISER: SETENA|=0x00040000 */
  NVIC_ISER |= NVIC_ISER_SETENA(0x00040000);                                                   
    TPM1_SC = TPM_SC_CMOD(0x01) | TPM_SC_TOIE_MASK | TPM_SC_PS(4);         /* Set up status and control register */
  TPM1_SC |= TPM_SC_TOF_MASK;
  TPM1_C1SC |= TPM_CnSC_CHF_MASK;
  /* Registration of the device structure */
  PE_LDD_RegisterDeviceStructure(PE_LDD_COMPONENT_TU1_ID,DeviceDataPrv);
  return ((LDD_TDeviceData *)DeviceDataPrv); /* Return pointer to the device data structure */
}
 
void TU1_Interrupt(LDD_RTOS_TISRParameter _isrParameter)
{
  TPM1_SC &= ~TPM_SC_TOF_MASK;
  TPM1_C1SC &= ~TPM_CnSC_CHF_MASK;
   TU1_TDeviceDataPtr DeviceDataPrv = (TU1_TDeviceDataPtr)_isrParameter;
  LDD_TEventMask State = 0U;
  if ((TPM_PDD_GetChannelInterruptFlag(TPM1_BASE_PTR, ChannelDevice[0])) != 0U) { 
    State |= LDD_TIMERUNIT_ON_CHANNEL_0; /* and set mask */
  }
  State &= DeviceDataPrv->EnEvents;    /* Handle only enabled interrupts */
  if (State & LDD_TIMERUNIT_ON_CHANNEL_0) { /* Is the channel 0 interrupt flag pending? */
    TPM_PDD_ClearChannelInterruptFlag(TPM1_BASE_PTR, ChannelDevice[0]); /* Clear flag */
    TU1_OnChannel0(DeviceDataPrv->UserDataPtr); /* Invoke OnChannel0 event */
  }
}
 
具体问题如下:
 TU1_interrupt(); 只是初始进入一次,其后都不能进入
但是TPM1_CNT一直都是在计数,溢出后能自动清零从新开始
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

14

帖子

0

新手上路

Rank: 1

积分
5
最后登录
1970-1-1
 楼主| 发表于 2013-6-4 17:03:07 | 显示全部楼层

回复:CodeWarrior v10.3 PE工具模拟触摸按键功能

回复第 2 楼 于2013-05-30 14:51:14发表:
你把问题描述的再清楚一点,你采用的芯片是哪个?硬件上大致如何连接? 

还想请教个kl25  TPM问题
TPM模块代码如下(使用PE生成):
LDD_TDeviceData* TU1_Init(LDD_TUserData *UserDataPtr)
{
    TU1_TDeviceData *DeviceDataPrv;
   DeviceDataPrv = &DeviceDataPrv__DEFAULT_RTOS_ALLOC;
  DeviceDataPrv->UserDataPtr = UserDataPtr; /* Store the RTOS device structure */
   DeviceDataPrv->SavedISRSettings_TUInterrupt.isrData = _int_get_isr_data(LDD_ivIndex_INT_TPM1);
  DeviceDataPrv->SavedISRSettings_TUInterrupt.isrFunction = _int_install_isr(LDD_ivIndex_INT_TPM1, TU1_Interrupt, DeviceDataPrv);
    //SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1);
  SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK;                                                   
  TPM1_SC = 0x00U;                     /* Clear status and control register */
   TPM1_CNT = 0x00U;                    /* Reset counter register */
   TPM1_C0SC = 0x00U;                   /* Clear channel status and control register */
   TPM1_C1SC = 0x00U;                   /* Clear channel status and control register */
  TPM1_MOD = TPM_MOD_MOD(0xFFFF);      /* Set up modulo register */
   TPM1_C1SC = TPM_CnSC_CHIE_MASK |
              TPM_CnSC_MSB_MASK |
              TPM_CnSC_ELSB_MASK |
              TPM_CnSC_ELSA_MASK;      /* Set up channel status and control register */
    TPM1_C1V = TPM_CnV_VAL(0x0);      /* Set up channel value register */
  PORTE_PCR21 = (uint32_t)((PORTE_PCR21 & (uint32_t)~(uint32_t)(
                 PORT_PCR_ISF_MASK |
                 PORT_PCR_MUX(0x04)
                )) | (uint32_t)(
                 PORT_PCR_MUX(0x03)
                ));                                                 
  DeviceDataPrv->EnEvents = 0x01u;     /* Enable selected events */
   NVIC_IPR4 = (uint32_t)((NVIC_IPR4 & (uint32_t)~(uint32_t)(
               NVIC_IP_PRI_18(0x7F)
              )) | (uint32_t)(
               NVIC_IP_PRI_18(0x80)
              ));                                                 
  /* NVIC_ISER: SETENA|=0x00040000 */
  NVIC_ISER |= NVIC_ISER_SETENA(0x00040000);                                                   
    TPM1_SC = TPM_SC_CMOD(0x01) | TPM_SC_TOIE_MASK | TPM_SC_PS(4);         /* Set up status and control register */
  TPM1_SC |= TPM_SC_TOF_MASK;
  TPM1_C1SC |= TPM_CnSC_CHF_MASK;
  /* Registration of the device structure */
  PE_LDD_RegisterDeviceStructure(PE_LDD_COMPONENT_TU1_ID,DeviceDataPrv);
  return ((LDD_TDeviceData *)DeviceDataPrv); /* Return pointer to the device data structure */
}
 
void TU1_Interrupt(LDD_RTOS_TISRParameter _isrParameter)
{
  TPM1_SC &= ~TPM_SC_TOF_MASK;
  TPM1_C1SC &= ~TPM_CnSC_CHF_MASK;
   TU1_TDeviceDataPtr DeviceDataPrv = (TU1_TDeviceDataPtr)_isrParameter;
  LDD_TEventMask State = 0U;
  if ((TPM_PDD_GetChannelInterruptFlag(TPM1_BASE_PTR, ChannelDevice[0])) != 0U) { 
    State |= LDD_TIMERUNIT_ON_CHANNEL_0; /* and set mask */
  }
  State &= DeviceDataPrv->EnEvents;    /* Handle only enabled interrupts */
  if (State & LDD_TIMERUNIT_ON_CHANNEL_0) { /* Is the channel 0 interrupt flag pending? */
    TPM_PDD_ClearChannelInterruptFlag(TPM1_BASE_PTR, ChannelDevice[0]); /* Clear flag */
    TU1_OnChannel0(DeviceDataPrv->UserDataPtr); /* Invoke OnChannel0 event */
  }
}
 
具体问题如下:
 TU1_interrupt(); 只是初始进入一次,其后都不能进入
但是TPM1_CNT一直都是在计数,溢出后能自动清零从新开始
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-22 20:24 , Processed in 0.189622 second(s), 26 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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