Skip to content

Commit 6f5453a

Browse files
committed
PDM: rp2040: use dynamically allocate memory for LUT
1 parent 09446df commit 6f5453a

File tree

1 file changed

+61
-6
lines changed

1 file changed

+61
-6
lines changed

libraries/PDM/src/rp2040/OpenPDMFilter.c renamed to libraries/PDM/src/rp2040/OpenPDMFilter.cpp

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,19 @@
3030
/* Includes ------------------------------------------------------------------*/
3131

3232
#include "OpenPDMFilter.h"
33-
33+
#include <Arduino.h>
34+
#include "FlashIAPBlockDevice.h"
3435

3536
/* Variables -----------------------------------------------------------------*/
3637

3738
uint32_t div_const = 0;
3839
int64_t sub_const = 0;
39-
uint32_t sinc[DECIMATION_MAX * SINCN];
40-
uint32_t sinc1[DECIMATION_MAX];
41-
uint32_t sinc2[DECIMATION_MAX * 2];
42-
uint32_t coef[SINCN][DECIMATION_MAX];
40+
uint32_t* sinc;
41+
uint32_t* sinc1;
42+
uint32_t* sinc2;
43+
uint32_t** coef;
4344
#ifdef USE_LUT
44-
int32_t lut[256][DECIMATION_MAX / 8][SINCN];
45+
int32_t*** lut;
4546
#endif
4647

4748

@@ -166,6 +167,23 @@ void Open_PDM_Filter_Init(TPDMFilter_InitStruct *Param)
166167
uint16_t i, j;
167168
int64_t sum = 0;
168169

170+
sinc = (uint32_t*)malloc(DECIMATION_MAX * SINCN * sizeof(uint32_t));
171+
sinc1 = (uint32_t*)malloc(DECIMATION_MAX * sizeof(uint32_t));
172+
sinc2 = (uint32_t*)malloc(DECIMATION_MAX * 2 * sizeof(uint32_t));
173+
coef = (uint32_t**)malloc(SINCN * sizeof(uint32_t*));
174+
for (int i = 0; i < SINCN; i++) {
175+
coef[i] = (uint32_t*)malloc(DECIMATION_MAX * sizeof(uint32_t));
176+
}
177+
#ifdef USE_LUT
178+
lut = (int32_t***)malloc(256 * sizeof(int32_t**));
179+
for (int i = 0; i < 256; i++) {
180+
lut[i] = (int32_t**)malloc(DECIMATION_MAX / 8 * sizeof(int32_t*));
181+
for (int j = 0; j < DECIMATION_MAX / 8; j++) {
182+
lut[i][j] = (int32_t*)malloc(SINCN * sizeof(int32_t));
183+
}
184+
}
185+
#endif
186+
169187
uint8_t decimation = Param->Decimation;
170188

171189
for (i = 0; i < SINCN; i++) {
@@ -213,6 +231,43 @@ void Open_PDM_Filter_Init(TPDMFilter_InitStruct *Param)
213231
((c >> 1) & 0x01) * coef_p[d * 8 + 6] +
214232
((c ) & 0x01) * coef_p[d * 8 + 7];
215233
}
234+
235+
236+
#if 0
237+
// 1MB block device, 1MB into flash storage
238+
static FlashIAPBlockDevice bd(XIP_BASE + 0x100000, 0x100000);
239+
int err = bd.init();
240+
err = bd.program(lut, 0, DECIMATION_MAX / 8 * SINCN * 256 * sizeof(int32_t));
241+
242+
int32_t*** _lut = lut;
243+
244+
lut = (int32_t***)(XIP_BASE + 0x100000);
245+
246+
/*
247+
for (int i = 0; i < 256; i++) {
248+
for (int j = 0; j < DECIMATION_MAX / 8; j++) {
249+
for (int k = 0; k < SINCN; k++) {
250+
Serial.println(lut[i][j][k]);
251+
}
252+
}
253+
}
254+
*/
255+
256+
for (int i = 0; i < 256; i++) {
257+
for (int j = 0; j < DECIMATION_MAX / 8; j++) {
258+
free(_lut[i][j]);
259+
}
260+
free(_lut[i]);
261+
}
262+
#endif
263+
264+
free(sinc);
265+
free(sinc1);
266+
free(sinc2);
267+
for (int i = 0; i < SINCN; i++) {
268+
free(coef[i]);
269+
}
270+
216271
#endif
217272
}
218273

0 commit comments

Comments
 (0)