diff --git a/.gitignore b/.gitignore index 5c702ba..09cb13e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ *.pretty *.step build +hardware/fp-info-cache +hardware/noisecard-backups hardware/production diff --git a/board.c b/board.c index 3e81227..3ec4581 100644 --- a/board.c +++ b/board.c @@ -40,6 +40,21 @@ void __early_init(void) { * @note Add your board-specific code, if any. */ void boardInit(void) { - //palSetLineMode(LINE_LED_GREEN, PAL_MODE_OUTPUT_PUSHPULL); + palSetLineMode(LINE_LED0, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED0); + palSetLineMode(LINE_LED1, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED1); + palSetLineMode(LINE_LED2, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED2); + palSetLineMode(LINE_LED3, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED3); + palSetLineMode(LINE_LED4, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED4); + palSetLineMode(LINE_LED5, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED5); + palSetLineMode(LINE_LED6, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED6); + palSetLineMode(LINE_LED7, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED7); + palSetLineMode(LINE_LED8, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED8); + palSetLineMode(LINE_LED9, PAL_MODE_OUTPUT_PUSHPULL); palSetLine(LINE_LED9); + + palSetLineMode(LINE_TP1, PAL_MODE_OUTPUT_PUSHPULL); palClearLine(LINE_TP1); + + palSetLineMode(LINE_I2S_SD, PAL_MODE_ALTERNATE(0)); + palSetLineMode(LINE_I2S_WS, PAL_MODE_ALTERNATE(0)); + palSetLineMode(LINE_I2S_CK, PAL_MODE_ALTERNATE(0)); } diff --git a/board.h b/board.h index 55ef0aa..801cf6b 100644 --- a/board.h +++ b/board.h @@ -53,13 +53,22 @@ /* * IO lines assignments. */ -//#define LINE_LED_GREEN PAL_LINE(GPIOA, 12U) - -#define LINE_I2S_SD PAL_LINE(GPIOA, 12U) // or PB5 -#define LINE_I2S_WS PAL_LINE(GPIOB, 0U) -#define LINE_I2S_CK PAL_LINE(GPIOA, 1U) - -#define LINE_USART2_TX PAL_LINE(GPIOA, 14U) +#define LINE_I2S_SD PAL_LINE(GPIOA, 7U) +#define LINE_I2S_WS PAL_LINE(GPIOA, 4U) +#define LINE_I2S_CK PAL_LINE(GPIOA, 5U) + +#define LINE_TP1 PAL_LINE(GPIOA, 12U) + +#define LINE_LED0 PAL_LINE(GPIOB, 7U) +#define LINE_LED1 PAL_LINE(GPIOC, 14U) +#define LINE_LED2 PAL_LINE(GPIOC, 15U) +#define LINE_LED3 PAL_LINE(GPIOA, 0U) +#define LINE_LED4 PAL_LINE(GPIOA, 1U) +#define LINE_LED5 PAL_LINE(GPIOA, 2U) +#define LINE_LED6 PAL_LINE(GPIOA, 3U) +#define LINE_LED7 PAL_LINE(GPIOA, 6U) +#define LINE_LED8 PAL_LINE(GPIOB, 0U) +#define LINE_LED9 PAL_LINE(GPIOB, 3U) /* * I/O ports initial setup, this configuration is established soon after reset diff --git a/cfg/halconf.h b/cfg/halconf.h index 3a05139..164616c 100644 --- a/cfg/halconf.h +++ b/cfg/halconf.h @@ -142,7 +142,7 @@ * @brief Enables the SERIAL subsystem. */ #if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) -#define HAL_USE_SERIAL TRUE +#define HAL_USE_SERIAL FALSE #endif /** diff --git a/cfg/mcuconf.h b/cfg/mcuconf.h index 3905c30..8c768d7 100644 --- a/cfg/mcuconf.h +++ b/cfg/mcuconf.h @@ -172,7 +172,7 @@ * SERIAL driver system settings. */ #define STM32_SERIAL_USE_USART1 FALSE -#define STM32_SERIAL_USE_USART2 TRUE +#define STM32_SERIAL_USE_USART2 FALSE #define STM32_SERIAL_USE_LPUART1 FALSE /* diff --git a/hardware/noisecard.kicad_pcb b/hardware/noisecard.kicad_pcb index 1bb0b9e..323da7c 100755 --- a/hardware/noisecard.kicad_pcb +++ b/hardware/noisecard.kicad_pcb @@ -7416,7 +7416,7 @@ (gr_text "FABRICATION DRAWING" (at 150 25) (layer "Dwgs.User") (tstamp d68f8496-1f7a-4583-b409-3c765734f735) (effects (font (size 2 2) (thickness 0.25) bold)) ) - (gr_text "NOTES\n\n 1. PRINTED CIRCUIT BOARD MADE FROM NEMA GRADE FR-4 EPOXY LAMINATE.\n 2. ALL DIMENSIONS ARE GIVEN IN MILLIMETERS.\n 3. CIRCUIT PATHS ARE FOR REFERENCE ONLY.\n 4. HOLE SIZES SHOWN ARE FINISHED DIAMETERS AFTER PLATING.\n 5. APPLY GREEN SOLDER MASK ON PLATED SURFACES.\n 6. SILKSCREEN TOP SIDE USING WHITE INK.\n 7. ALL VIAS ARE TENTED ON BOTH SIDES.\n 8. 2 COPPER LAYERS.\n 9. 1.6MM BOARD THICKNESS.\n10. COPPER THICKNESS 1 OZ." (at 38.75 139) (layer "Dwgs.User") (tstamp d939a69e-194e-46a0-9c0c-335c0a91742c) + (gr_text "NOTES\n\n 1. PRINTED CIRCUIT BOARD MADE FROM NEMA GRADE FR-4 EPOXY LAMINATE.\n 2. ALL DIMENSIONS ARE GIVEN IN MILLIMETERS.\n 3. CIRCUIT PATHS ARE FOR REFERENCE ONLY.\n 4. HOLE SIZES SHOWN ARE FINISHED DIAMETERS AFTER PLATING.\n 5. APPLY GREEN SOLDER MASK ON PLATED SURFACES.\n 6. SILKSCREEN TOP SIDE USING WHITE INK.\n 7. ALL VIAS ARE TENTED ON BOTH SIDES.\n 8. 2 COPPER LAYERS.\n 9. 0.8MM BOARD THICKNESS.\n10. COPPER THICKNESS 1 OZ." (at 38.75 139) (layer "Dwgs.User") (tstamp d939a69e-194e-46a0-9c0c-335c0a91742c) (effects (font (size 1.5 1.5) (thickness 0.1875)) (justify left top)) ) (gr_text "{\\H2.0000;www.hammondmfg.com}" (at 602.59387 247.297935) (layer "User.3") (tstamp 05fdb0fe-aa41-4d1c-9218-ed7330023c5e) diff --git a/hardware/noisecard.kicad_sch b/hardware/noisecard.kicad_sch index 6b94dfc..3ce1d91 100755 --- a/hardware/noisecard.kicad_sch +++ b/hardware/noisecard.kicad_sch @@ -1876,7 +1876,7 @@ (property "Reference" "C3" (at 73.66 32.766 0) (effects (font (size 1.27 1.27)) (justify left)) ) - (property "Value" "330u" (at 73.66 35.306 0) + (property "Value" "330uF" (at 73.66 35.306 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_Tantalum_SMD:CP_EIA-7343-15_Kemet-W" (at 71.4502 38.735 0) @@ -1971,8 +1971,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 102.87 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f5)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89e)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -2000,8 +2000,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 115.57 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f6)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89f)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -2029,8 +2029,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 96.52 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f7)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f8a0)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -2104,7 +2104,7 @@ (property "Reference" "C8" (at 50.165 114.9413 0) (effects (font (size 1.27 1.27)) (justify right)) ) - (property "Value" "2U2" (at 50.165 117.4813 0) + (property "Value" "2.2uF" (at 50.165 117.4813 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 53.34 115.57 0) @@ -2183,7 +2183,7 @@ (property "Reference" "C9" (at 61.595 114.9413 0) (effects (font (size 1.27 1.27)) (justify right)) ) - (property "Value" "0.1U" (at 61.595 117.4813 0) + (property "Value" "0.1uF" (at 61.595 117.4813 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" (at 58.42 115.57 0) @@ -2212,7 +2212,7 @@ (property "Reference" "C1" (at 102.87 33.655 0) (effects (font (size 1.27 1.27)) (justify left)) ) - (property "Value" "4u7" (at 102.87 36.195 0) + (property "Value" "4.7uF" (at 102.87 36.195 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 100.0252 38.735 0) @@ -2253,8 +2253,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 121.92 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f8)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f8a1)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -2346,7 +2346,7 @@ (property "Reference" "C2" (at 148.59 33.655 0) (effects (font (size 1.27 1.27)) (justify left)) ) - (property "Value" "10u" (at 148.59 36.195 0) + (property "Value" "10uF" (at 148.59 36.195 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 146.3802 38.735 0) @@ -2387,8 +2387,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 128.27 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f9)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f8a2)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -2442,10 +2442,10 @@ (effects (font (size 1.27 1.27)) hide) ) (pin "1" (uuid bd037501-f2bd-4716-a242-b9d25cf98220)) - (pin "6" (uuid 3278223c-3fa9-40df-bb18-ef628deff05e)) + (pin "6" (uuid 3278223c-3fa9-40df-bb18-ef628deff05f)) (pin "3" (uuid 11f70334-c848-47e5-a24d-625d53901c27)) - (pin "4" (uuid d24118b6-8fda-400d-b722-8d6333a5a013)) - (pin "5" (uuid 175b6856-006f-44d2-9833-9acdf94689ee)) + (pin "4" (uuid d24118b6-8fda-400d-b722-8d6333a5a014)) + (pin "5" (uuid 175b6856-006f-44d2-9833-9acdf94689ef)) (pin "2" (uuid ce0b9538-62de-4592-920a-f74542d66135)) (instances (project "noisecard" @@ -2819,8 +2819,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 147.32 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15fa)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f8a3)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -2836,7 +2836,7 @@ (property "Reference" "C4" (at 88.9 32.766 0) (effects (font (size 1.27 1.27)) (justify left)) ) - (property "Value" "330u" (at 88.9 35.306 0) + (property "Value" "330uF" (at 88.9 35.306 0) (effects (font (size 1.27 1.27)) (justify left)) ) (property "Footprint" "Capacitor_Tantalum_SMD:CP_EIA-7343-15_Kemet-W" (at 86.0552 38.735 0) @@ -2915,7 +2915,7 @@ (property "Reference" "L1" (at 135.255 24.765 90) (effects (font (size 1.27 1.27))) ) - (property "Value" "10u" (at 135.255 27.305 90) + (property "Value" "10uH" (at 135.255 27.305 90) (effects (font (size 1.27 1.27))) ) (property "Footprint" "Inductor_SMD:L_0805_2012Metric" (at 135.255 29.845 0) @@ -2956,8 +2956,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 153.67 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15fb)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f8a4)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -2973,7 +2973,7 @@ (property "Reference" "C6" (at 245.11 38.7413 0) (effects (font (size 1.27 1.27)) (justify right)) ) - (property "Value" "0.1U" (at 245.11 41.2813 0) + (property "Value" "0.1uF" (at 245.11 41.2813 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" (at 241.935 39.37 0) @@ -3027,7 +3027,7 @@ (property "Reference" "C5" (at 66.675 90.1763 0) (effects (font (size 1.27 1.27)) (justify right)) ) - (property "Value" "0.1U" (at 66.675 92.7163 0) + (property "Value" "0.1uF" (at 66.675 92.7163 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" (at 63.5 90.805 0) @@ -3209,8 +3209,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 140.97 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15fc)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f8a5)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" @@ -3226,7 +3226,7 @@ (property "Reference" "C7" (at 254 38.7413 0) (effects (font (size 1.27 1.27)) (justify right)) ) - (property "Value" "200P" (at 254 41.2813 0) + (property "Value" "200pF" (at 254 41.2813 0) (effects (font (size 1.27 1.27)) (justify right)) ) (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" (at 250.825 39.37 0) @@ -3341,8 +3341,8 @@ (property "Part Number" "APTD1608LSURCK" (at 214.63 109.22 0) (effects (font (size 1.27 1.27)) hide) ) - (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15f4)) - (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f89d)) + (pin "2" (uuid 455ac6a2-863b-43b8-9272-a864429f15fd)) + (pin "1" (uuid d1a0fde7-e9af-40b6-a11b-543a47a2f8a6)) (instances (project "noisecard" (path "/2019f223-1307-408a-bf87-dad398f72c59" diff --git a/main.cpp b/main.cpp index 298c3f8..de9e093 100644 --- a/main.cpp +++ b/main.cpp @@ -34,7 +34,7 @@ static constexpr auto MIC_BITS = 18u; static constexpr auto SAMPLE_RATE = 48000u; static constexpr unsigned I2S_BUFSIZ = 1024; -static constexpr unsigned I2S_STRIDE = 16; +static constexpr unsigned I2S_USESIZ = 16; // Calculate reference amplitude value at compile time static const auto MIC_REF_AMPL = sos_t((1 << (MIC_BITS - 1)) - 1) * @@ -45,6 +45,7 @@ static std::array i2sBuffer; static sos_t Leq_sum_sqr (0.f); static unsigned Leq_samples = 0; +static void blinkDb(int db); static void i2sCallback(I2SDriver *i2s); static constexpr unsigned I2SPRval = 16'000'000 / SAMPLE_RATE / 32 / 2; @@ -64,45 +65,66 @@ int main(void) { halInit(); osalSysEnable(); - osalThreadSleepMilliseconds(2000); - - palSetPadMode(GPIOB, 7, PAL_MODE_OUTPUT_PUSHPULL); - palSetPadMode(GPIOF, 2, PAL_MODE_UNCONNECTED); - palSetLineMode(LINE_I2S_SD, PAL_MODE_ALTERNATE(0)); - palSetLineMode(LINE_I2S_WS, PAL_MODE_ALTERNATE(0)); - palSetLineMode(LINE_I2S_CK, PAL_MODE_ALTERNATE(0)); - palSetLineMode(LINE_USART2_TX, PAL_MODE_ALTERNATE(1)); - - sdStart(&SD2, NULL); - sdWrite(&SD2, (uint8_t *)"Noisemeter\n", 11); - osalThreadSleepMilliseconds(2); + i2sReady.store(true); i2sStart(&I2SD1, &i2sConfig); i2sStartExchange(&I2SD1); + // Microphone warmup time + osalThreadSleepMilliseconds(140); + // Reach filter delay steady state + i2sReady.store(false); + osalThreadSleepMilliseconds(120); + // Discard initial readings + Leq_sum_sqr = 0.f; + Leq_samples = 0; - uint8_t strbuf[7] = { 0, 0, 0, 'd', 'B', '\n', '\0' }; for (;;) { i2sReady.store(false); SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk; + //palClearLine(LINE_TP1); __WFI(); + //palSetLine(LINE_TP1); - palSetPad(GPIOB, 7); - const sos_t Leq_RMS = qfp_fsqrt(Leq_sum_sqr / qfp_uint2float(Leq_samples)); + const auto sum_sqr = std::exchange(Leq_sum_sqr, sos_t(0.f)); + const auto count = std::exchange(Leq_samples, 0); + const sos_t Leq_RMS = qfp_fsqrt(sum_sqr / qfp_uint2float(count)); const sos_t Leq_dB = MIC_OFFSET_DB + MIC_REF_DB + sos_t(20.f) * qfp_flog10(Leq_RMS / MIC_REF_AMPL); - Leq_sum_sqr = sos_t(0.f); - Leq_samples = 0; - - auto n = std::clamp(qfp_float2int(Leq_dB), 0, 999); - strbuf[2] = n % 10 + '0'; n /= 10; - strbuf[1] = n % 10 + '0'; n /= 10; - strbuf[0] = n ? n + '0' : ' '; - sdWrite(&SD2, strbuf, sizeof(strbuf)); - osalThreadSleepMilliseconds(2); - palClearPad(GPIOB, 7); + const auto n = std::clamp(qfp_float2int(Leq_dB), 0, 999); + blinkDb(n); } } +void blinkDb(int db) +{ + auto line = LINE_LED0; + + if (db < 45) + line = LINE_LED0; + else if (db < 55) + line = LINE_LED1; + else if (db < 65) + line = LINE_LED2; + else if (db < 75) + line = LINE_LED3; + else if (db < 82) + line = LINE_LED4; + else if (db < 87) + line = LINE_LED5; + else if (db < 92) + line = LINE_LED6; + else if (db < 97) + line = LINE_LED7; + else if (db < 102) + line = LINE_LED8; + else + line = LINE_LED9; + + palClearLine(line); + osalThreadSleepMilliseconds(100); + palSetLine(line); +} + __attribute__((section(".data"))) int32_t fixsample(uint32_t s) { return (int32_t)(((s & 0xFFFF) << 16) | (s >> 16)) >> (32 - MIC_BITS); @@ -114,27 +136,29 @@ void i2sCallback(I2SDriver *i2s) if (i2sReady.load()) return; - palSetPad(GPIOB, 7); + //palSetLine(LINE_TP1); + const auto halfsize = i2sBuffer.size() / 2; const auto source = i2sBuffer.data() + (i2sIsBufferComplete(i2s) ? halfsize : 0); auto samples = reinterpret_cast(source); std::ranges::copy( - std::views::counted(source, halfsize / I2S_STRIDE) + std::views::counted(source, I2S_USESIZ * 2) | std::ranges::views::stride(2) | std::views::transform([](uint32_t s) { return sos_t(qfp_int2float_asm(fixsample(s))); }), samples); - auto samps = std::views::counted(samples, halfsize / (2 * I2S_STRIDE)); + auto samps = std::views::counted(samples, I2S_USESIZ); // Accumulate Leq sum MIC_EQUALIZER.filter(samps); Leq_sum_sqr += WEIGHTING.filter_sum_sqr(samps); - Leq_samples += samps.size(); + Leq_samples += halfsize / 2; - // Wakeup main thread for dB calculation every second - if (Leq_samples >= SAMPLE_RATE / I2S_STRIDE) { + // Wakeup main thread for dB calculation every half second + if (Leq_samples >= SAMPLE_RATE / 2) { i2sReady.store(true); SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk; } - palClearPad(GPIOB, 7); + + //palClearLine(LINE_TP1); }