static void BSP_TSI_Init (void) { BSP_TSI_Slider.EndFlg = DEF_FALSE; /* Initialize global variables. */ BSP_TSI_Slider.Electrodes[0].PinNbr = BSP_TSI_PIN9; BSP_TSI_Slider.Electrodes[1].PinNbr = BSP_TSI_PIN10; BSP_TSI_Slider.Electrodes[0].Threshold = BSP_TSI_THRESHOLD; BSP_TSI_Slider.Electrodes[1].Threshold = BSP_TSI_THRESHOLD; SIM_SCGC5 |= SIM_SCGC5_TSI_MASK; /* Enable clock gating for TSI. */ /* Enable proper GPIO as TSI channels. */ PORTB_PCR16 = PORT_PCR_MUX(0); /* PTB16 as TSI channel 9. */ PORTB_PCR17 = PORT_PCR_MUX(0); /* PTB17 as TSI channel 10. */ BSP_IntVectSet(BSP_INT_ID_TSI0, BSP_TSI_IntHandler); /* Register the interrupt handler. */ BSP_IntEn(BSP_INT_ID_TSI0); /* Enable the TSI module interrupts. */ TSI0_GENCS |= (TSI_GENCS_ESOR_MASK | TSI_GENCS_MODE(0) | TSI_GENCS_REFCHRG(4) | TSI_GENCS_DVOLT(0) | TSI_GENCS_EXTCHRG(7) | TSI_GENCS_PS(4) | TSI_GENCS_NSCN(11) | TSI_GENCS_TSIIEN_MASK | TSI_GENCS_STPE_MASK); TSI0_GENCS |= TSI_GENCS_TSIEN_MASK; /* Enable the TSI module. */ BSP_TSI_SelfCal(); /* Self calibration. */ }
void TSI_Init (void) { SIM_SCGC5 |= SIM_SCGC5_TSI_MASK; // Enable clock gating for TSI /* Enable proper GPIO as TSI channels */ PORTB_PCR17 = PORT_PCR_MUX(0); // PTA1 as TSI channel 2 PORTB_PCR16 = PORT_PCR_MUX(0); // PTA2 as TSI channel 3 enable_irq(TSI_irq_no); TSI0_GENCS |= (TSI_GENCS_ESOR_MASK | TSI_GENCS_MODE(0) | TSI_GENCS_REFCHRG(4) | TSI_GENCS_DVOLT(0) | TSI_GENCS_EXTCHRG(7) | TSI_GENCS_PS(4) | TSI_GENCS_NSCN(11) | TSI_GENCS_TSIIEN_MASK | TSI_GENCS_STPE_MASK //| TSI_GENCS_STM_MASK //Trigger for the module 0=Sofware ); TSI0_GENCS |= TSI_GENCS_TSIEN_MASK; TSI_SelfCalibration(); }
// Initialize touch input void touchInit(uint32_t channelMask) { int i; // Turn on clock gating for TSI and configure touch input clkEnable(CLK_TSI); TSI0_GENCS |= ( TSI_GENCS_ESOR_MASK // Enable end of scan interrupt | TSI_GENCS_MODE(0) // Capacitive sensing | TSI_GENCS_REFCHRG(4) // Reference charge 4 uA | TSI_GENCS_DVOLT(0) // Voltage rails | TSI_GENCS_EXTCHRG(7) // External osc charge | TSI_GENCS_PS(4) // Pre-scalar divide by 4 | TSI_GENCS_NSCN(11) // Scans per electrode | TSI_GENCS_TSIIEN_MASK // Input interrupt enable | TSI_GENCS_STPE_MASK // Enable in STOP mode ); TSI0_GENCS |= TSI_GENCS_TSIEN_MASK; // Read initial (baseline) values for each enabled channel sEnableMask = channelMask; for (i = (NUM_CHANNELS - 1); i >= 0; i--) { if ((1 << i) & sEnableMask) { scanStart(i); while (!(TSI0_GENCS & TSI_GENCS_EOSF_MASK)) // Wait until done ; sBaseCounts[i] = scanData(); } } // Enable TSI interrupts and start the scan timer irqRegister(INT_TSI0, tsiIrqHandler, 0); irqEnable(INT_TSI0); { osTimerDef_t tDef; tDef.ptimer = startTimerCb; tDef.millisec = TOUCH_SCAN_TIME; tDef.name = "touch"; sStartTimer = osTimerCreate(&tDef, osTimerPeriodic, 0); osTimerStart(sStartTimer, TOUCH_SCAN_TIME); } }
// Initialize touch input void touch_init(uint32_t channel_mask) { // Turn on clock gating for TSI and configure touch input SIM_SCGC5 |= SIM_SCGC5_TSI_MASK; TSI0_GENCS |= (TSI_GENCS_ESOR_MASK // Enable end of scan interrupt | TSI_GENCS_MODE(0) // Capactive sensing | TSI_GENCS_REFCHRG(4) // Reference charge 4 uA | TSI_GENCS_DVOLT(0) // Voltage rails | TSI_GENCS_EXTCHRG(7) // External osc charge | TSI_GENCS_PS(4) // Prescalar divide by 4 | TSI_GENCS_NSCN(11) // Scans per electrode | TSI_GENCS_TSIIEN_MASK // Input interrupt enable | TSI_GENCS_STPE_MASK // Enable in STOP mode ); TSI0_GENCS |= TSI_GENCS_TSIEN_MASK; // Enable touch I/O pins for Freedom board, and configure // the scan sequence PORTB_PCR16 = PORT_PCR_MUX(0); // PTB16 as touch channel 9 PORTB_PCR17 = PORT_PCR_MUX(0); // PTB17 as touch channel 10 // Read initial (baseline) values for each enabled channel int i, first_channel = 0; enable_mask = channel_mask; for(i=15; i>=0; i--) { if((1 << i) & enable_mask) { scan_start(i); while(!(TSI0_GENCS & TSI_GENCS_EOSF_MASK)) // Wait until done ; base_counts[i] = scan_data(); first_channel = i; } } // Enable TSI interrupts and start the first scan enable_irq(INT_TSI0); scan_start(first_channel); }
void TSISensor::TSISensor_reset(void) { SIM->SCGC5 |= SIM_SCGC5_PORTB_MASK; SIM->SCGC5 |= SIM_SCGC5_TSI_MASK; TSI0->GENCS |= (TSI_GENCS_ESOR_MASK | TSI_GENCS_MODE(0) | TSI_GENCS_REFCHRG(4) | TSI_GENCS_DVOLT(0) | TSI_GENCS_EXTCHRG(7) | TSI_GENCS_PS(4) | TSI_GENCS_NSCN(11) | TSI_GENCS_TSIIEN_MASK | TSI_GENCS_STPE_MASK ); TSI0->GENCS |= TSI_GENCS_TSIEN_MASK; //NVIC_SetVector(TSI0_IRQn, (uint32_t)&tsi_irq); //NVIC_EnableIRQ(TSI0_IRQn); selfCalibration(); }
/******************************************************************* * TSI module initialization. */ void TSI_Init (void) { SIM_SCGC5 |= SIM_SCGC5_TSI_MASK; // Enable clock gating for TSI /* Enable proper GPIO as TSI channels */ PORTA_PCR13 = PORT_PCR_MUX(0); // PTB16 as TSI channel 9 PORTB_PCR12 = PORT_PCR_MUX(0); // PTB17 as TSI channel 8 enable_irq(INT_TSI0-16); TSI0_GENCS |= (TSI_GENCS_ESOR_MASK | TSI_GENCS_MODE(0) | TSI_GENCS_REFCHRG(4) | TSI_GENCS_DVOLT(0) | TSI_GENCS_EXTCHRG(7) | TSI_GENCS_PS(4) | TSI_GENCS_NSCN(11) | TSI_GENCS_TSIIEN_MASK | TSI_GENCS_STPE_MASK //| TSI_GENCS_STM_MASK //Trigger for the module 0=Sofware ); TSI0_GENCS |= TSI_GENCS_TSIEN_MASK; //Enable TSI module. TSI_SelfCalibration(); }