1 /*
2  * Copyright 2018-2022 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include "fsl_powerquad.h"
9 
10 /*******************************************************************************
11  * Definitions
12  ******************************************************************************/
13 
14 /* Component ID definition, used by tools. */
15 #ifndef FSL_COMPONENT_ID
16 #define FSL_COMPONENT_ID "platform.drivers.powerquad_transform"
17 #endif
18 
19 /*******************************************************************************
20  * Code
21  ******************************************************************************/
PQ_TransformCFFT(POWERQUAD_Type * base,uint32_t length,void * pData,void * pResult)22 void PQ_TransformCFFT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
23 {
24     assert(NULL != pData);
25     assert(NULL != pResult);
26 
27     base->OUTBASE = (uint32_t)(uint32_t *)pResult;
28     base->INABASE = (uint32_t)(uint32_t *)pData;
29     base->LENGTH  = length;
30     base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_CFFT;
31 }
32 
PQ_TransformRFFT(POWERQUAD_Type * base,uint32_t length,void * pData,void * pResult)33 void PQ_TransformRFFT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
34 {
35     assert(NULL != pData);
36     assert(NULL != pResult);
37 
38     /* Set 0's for imaginary inputs as not be reading them in by the machine */
39     base->GPREG[1]  = 0U;
40     base->GPREG[3]  = 0U;
41     base->GPREG[5]  = 0U;
42     base->GPREG[7]  = 0U;
43     base->GPREG[9]  = 0U;
44     base->GPREG[11] = 0U;
45     base->GPREG[13] = 0U;
46     base->GPREG[15] = 0U;
47     base->OUTBASE   = (uint32_t)(uint32_t *)pResult;
48     base->INABASE   = (uint32_t)(uint32_t *)pData;
49     base->LENGTH    = length;
50     base->CONTROL   = (CP_FFT << 4U) | PQ_TRANS_RFFT;
51 }
52 
PQ_TransformIFFT(POWERQUAD_Type * base,uint32_t length,void * pData,void * pResult)53 void PQ_TransformIFFT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
54 {
55     assert(NULL != pData);
56     assert(NULL != pResult);
57 
58     base->OUTBASE = (uint32_t)(uint32_t *)pResult;
59     base->INABASE = (uint32_t)(uint32_t *)pData;
60     base->LENGTH  = length;
61     base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_IFFT;
62 }
63 
PQ_TransformCDCT(POWERQUAD_Type * base,uint32_t length,void * pData,void * pResult)64 void PQ_TransformCDCT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
65 {
66     assert(NULL != pData);
67     assert(NULL != pResult);
68 
69     base->OUTBASE = (uint32_t)(uint32_t *)pResult;
70     base->INABASE = (uint32_t)(uint32_t *)pData;
71     base->LENGTH  = length;
72     base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_CDCT;
73 }
74 
PQ_TransformRDCT(POWERQUAD_Type * base,uint32_t length,void * pData,void * pResult)75 void PQ_TransformRDCT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
76 {
77     assert(NULL != pData);
78     assert(NULL != pResult);
79 
80     base->GPREG[1]  = 0U;
81     base->GPREG[3]  = 0U;
82     base->GPREG[5]  = 0U;
83     base->GPREG[7]  = 0U;
84     base->GPREG[9]  = 0U;
85     base->GPREG[11] = 0U;
86     base->GPREG[13] = 0U;
87     base->GPREG[15] = 0U;
88     base->OUTBASE   = (uint32_t)(uint32_t *)pResult;
89     base->INABASE   = (uint32_t)(uint32_t *)pData;
90     base->LENGTH    = length;
91     base->CONTROL   = (CP_FFT << 4U) | PQ_TRANS_RDCT;
92 }
93 
PQ_TransformIDCT(POWERQUAD_Type * base,uint32_t length,void * pData,void * pResult)94 void PQ_TransformIDCT(POWERQUAD_Type *base, uint32_t length, void *pData, void *pResult)
95 {
96     assert(NULL != pData);
97     assert(NULL != pResult);
98 
99     base->OUTBASE = (uint32_t)(uint32_t *)pResult;
100     base->INABASE = (uint32_t)(uint32_t *)pData;
101     base->LENGTH  = length;
102     base->CONTROL = (CP_FFT << 4U) | PQ_TRANS_IDCT;
103 }
104