Esempio n. 1
0
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.                                    */
}
Esempio n. 2
0
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();
}
Esempio n. 3
0
// 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);
   }
}
Esempio n. 4
0
// 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);
}
Esempio n. 5
0
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();
}
Esempio n. 6
0
/*******************************************************************
 * 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();
}