104 lines
3.0 KiB
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;
|
|
}
|