在线时间0 小时
UID2015161
注册时间2013-5-30
NXP金币0
该用户从未签到
新手上路

- 积分
- 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一直都是在计数,溢出后能自动清零从新开始 |
|