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