/*FUNCTION********************************************************************** * * Function Name : TSI_DRV_DisableLowPower * Description : Enables/Disables the low power module. * *END**************************************************************************/ tsi_status_t TSI_DRV_DisableLowPower(uint32_t instance, const tsi_modes_t mode) { assert(instance < TSI_INSTANCE_COUNT); TSI_Type * base = g_tsiBase[instance]; tsi_state_t * tsiState = g_tsiStatePtr[instance]; tsi_status_t status; /* Critical section. Access to global variable */ if (kStatus_OSA_Success != OSA_MutexLock(&tsiState->lock, OSA_WAIT_FOREVER)) { return kStatus_TSI_Error; } if (tsiState->status != kStatus_TSI_LowPower) { /* End of critical section. */ OSA_MutexUnlock(&tsiState->lock); return tsiState->status; } TSI_HAL_DisableLowPower(base); TSI_HAL_EnableInterrupt(base); TSI_HAL_EnableEndOfScanInterrupt(base); TSI_HAL_EnableSoftwareTriggerScan(base); tsiState->status = kStatus_TSI_Initialized; /* End of critical section. */ OSA_MutexUnlock(&tsiState->lock); status = TSI_DRV_ChangeMode(instance, mode); return status; }
/*FUNCTION********************************************************************** * * Function Name : TSI_DRV_EnableLowPower * Description : Enables/Disables the low power module. * *END**************************************************************************/ tsi_status_t TSI_DRV_EnableLowPower(uint32_t instance) { assert(instance < TSI_INSTANCE_COUNT); TSI_Type * base = g_tsiBase[instance]; tsi_state_t * tsiState = g_tsiStatePtr[instance]; tsi_status_t status; uint32_t i; int32_t channel = -1; /* Critical section. Access to global variable */ if (kStatus_OSA_Success != OSA_MutexLock(&tsiState->lock, OSA_WAIT_FOREVER)) { return kStatus_TSI_Error; } if((tsiState->opModesData[tsiState->opMode].config.thresl == 0) || (tsiState->opModesData[tsiState->opMode].config.thresh == 0)) { /* End of critical section. */ OSA_MutexUnlock(&tsiState->lock); return kStatus_TSI_Error; } if ((status = TSI_DRV_ChangeMode(instance, tsi_OpModeLowPower)) != kStatus_TSI_Success) { /* End of critical section. */ OSA_MutexUnlock(&tsiState->lock); return status; } if(tsiState->opModesData[tsiState->opMode].enabledElectrodes == 0) { /* End of critical section. */ OSA_MutexUnlock(&tsiState->lock); return kStatus_TSI_InvalidChannel; } /* Configurate the peripheral for next use */ TSI_HAL_EnableOutOfRangeInterrupt(base); TSI_HAL_EnableHardwareTriggerScan(base); for(i = 0; i < FSL_FEATURE_TSI_CHANNEL_COUNT; i++) { if((uint32_t)(1 << i) & tsiState->opModesData[tsiState->opMode].enabledElectrodes) { channel = i; break; } } if(channel == -1) { /* End of critical section. */ OSA_MutexUnlock(&tsiState->lock); return kStatus_TSI_InvalidChannel; } tsiState->status = kStatus_TSI_LowPower; TSI_HAL_EnableLowPower(base); TSI_HAL_SetMeasuredChannelNumber(base, channel); TSI_HAL_EnableInterrupt(base); TSI_HAL_EnableModule(base); /* End of critical section. */ OSA_MutexUnlock(&tsiState->lock); return kStatus_TSI_Success; }