MCUXpresso_LPC55S69/devices/LPC55S69/drivers/fsl_powerquad_transform.c

104 lines
3.0 KiB
C

/*
* Copyright 2018-2022 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "fsl_powerquad.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/* Component ID definition, used by tools. */
#ifndef FSL_COMPONENT_ID
#define FSL_COMPONENT_ID "platform.drivers.powerquad_transform"
#endif
/*******************************************************************************
* Code
******************************************************************************/
void PQ_TransformCFFT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
{
assert(NULL != pData);
assert(NULL != pResult);
base->OUTBASE = (uint32_t)(uint32_t *)pResult;
base->INABASE = (uint32_t)(uint32_t *)pData;
base->LENGTH = length;
base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_CFFT;
}
void PQ_TransformRFFT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
{
assert(NULL != pData);
assert(NULL != pResult);
/* Set 0's for imaginary inputs as not be reading them in by the machine */
base->GPREG[1] = 0U;
base->GPREG[3] = 0U;
base->GPREG[5] = 0U;
base->GPREG[7] = 0U;
base->GPREG[9] = 0U;
base->GPREG[11] = 0U;
base->GPREG[13] = 0U;
base->GPREG[15] = 0U;
base->OUTBASE = (uint32_t)(uint32_t *)pResult;
base->INABASE = (uint32_t)(uint32_t *)pData;
base->LENGTH = length;
base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_RFFT;
}
void PQ_TransformIFFT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
{
assert(NULL != pData);
assert(NULL != pResult);
base->OUTBASE = (uint32_t)(uint32_t *)pResult;
base->INABASE = (uint32_t)(uint32_t *)pData;
base->LENGTH = length;
base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_IFFT;
}
void PQ_TransformCDCT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
{
assert(NULL != pData);
assert(NULL != pResult);
base->OUTBASE = (uint32_t)(uint32_t *)pResult;
base->INABASE = (uint32_t)(uint32_t *)pData;
base->LENGTH = length;
base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_CDCT;
}
void PQ_TransformRDCT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
{
assert(NULL != pData);
assert(NULL != pResult);
base->GPREG[1] = 0U;
base->GPREG[3] = 0U;
base->GPREG[5] = 0U;
base->GPREG[7] = 0U;
base->GPREG[9] = 0U;
base->GPREG[11] = 0U;
base->GPREG[13] = 0U;
base->GPREG[15] = 0U;
base->OUTBASE = (uint32_t)(uint32_t *)pResult;
base->INABASE = (uint32_t)(uint32_t *)pData;
base->LENGTH = length;
base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_RDCT;
}
void PQ_TransformIDCT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
{
assert(NULL != pData);
assert(NULL != pResult);
base->OUTBASE = (uint32_t)(uint32_t *)pResult;
base->INABASE = (uint32_t)(uint32_t *)pData;
base->LENGTH = length;
base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_IDCT;
}