예제 #1
0
void capElectrodeWakeableSleep(int electrodeIdx)
{
    Electrode* wakeElectrode = electrodeList + electrodeIdx;

    TSI0_GENCS &= ~TSI_GENCS_TSIEN_MASK;

    isSleeping = 1;
    TSI0_TSHD = TSI_TSHD_THRESL(wakeElectrode->baseline / 2) | TSI_TSHD_THRESH(wakeElectrode->baseline + 5);
    TSI0_DATA = TSI_DATA_TSICH(wakeElectrode->channel);
    TSI0_GENCS = // Fields to clear
        TSI_GENCS_OUTRGF_MASK | TSI_GENCS_EOSF_MASK
            |
            // Fields to set: 16uA ref charge, 8uA ext charge, 0.43V DVolt, 1 scans, enable interrupt & module, enable in low power, hardware trigger
            TSI_GENCS_REFCHRG(5) | TSI_GENCS_DVOLT(2) | TSI_GENCS_EXTCHRG(4) | TSI_GENCS_STPE_MASK |
            TSI_GENCS_PS(1) | TSI_GENCS_NSCN(0) | TSI_GENCS_TSIEN_MASK | TSI_GENCS_TSIIEN_MASK | TSI_GENCS_STM_MASK;
}
예제 #2
0
void capElectrodeInit()
{
#if defined(CAPELECTRODE_TIMESTAMPS)
    tpmEnableTimer(TPM_TIMER);
    tpmStartTimer(TPM_TIMER, TPM_CLOCKS_PER_MILLISECOND, 0);
#endif

    SIM_SCGC5 |= SIM_SCGC5_TSI_MASK;

    TSI0_GENCS = // Fields to clear
        TSI_GENCS_OUTRGF_MASK | TSI_GENCS_EOSF_MASK
            |
            // Fields to set: int on end scan, 16uA ref charge, 8uA ext charge, 0.43V DVolt, X scans, enable interrupt & module, enable in low power
            TSI_GENCS_ESOR_MASK | TSI_GENCS_REFCHRG(5) | TSI_GENCS_DVOLT(2) | TSI_GENCS_EXTCHRG(4) | TSI_GENCS_STPE_MASK |
            TSI_GENCS_PS(4) | TSI_GENCS_NSCN(TSI_SCAN_COUNT - 1) | TSI_GENCS_TSIEN_MASK | TSI_GENCS_TSIIEN_MASK;
}
예제 #3
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);
}
예제 #4
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();
}
예제 #5
0
파일: TSIDrv.c 프로젝트: cerik/PrjMoveCtrl
/*******************************************************************
 * 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();
}