From cac07dcaa23bebda285011cc8b539aab35438e35 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Sat, 24 Oct 2020 22:52:02 +0200 Subject: [PATCH] Add PDM2PCM library. --- src/Makefile | 3 + src/libpdm/libPDMFilter_CM7_GCC_wc32.a | Bin 0 -> 14716 bytes src/libpdm/pdm2pcm_glo.h | 97 +++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 src/libpdm/libPDMFilter_CM7_GCC_wc32.a create mode 100644 src/libpdm/pdm2pcm_glo.h diff --git a/src/Makefile b/src/Makefile index 66bc89a27..0e2b77cd5 100755 --- a/src/Makefile +++ b/src/Makefile @@ -58,6 +58,7 @@ WINC1500_DIR=winc1500 BOOTLDR_DIR=bootloader UVC_DIR=uvc CUBEAI_DIR=stm32cubeai +LIBPDM_DIR=libpdm OMV_BOARD_CONFIG_DIR=$(TOP_DIR)/$(OMV_DIR)/boards/$(TARGET)/ MP_BOARD_CONFIG_DIR=$(TOP_DIR)/$(MICROPY_DIR)/ports/stm32/boards/$(TARGET)/ @@ -155,6 +156,7 @@ OMV_CFLAGS += -I$(TOP_DIR)/$(MLX_DIR)/include/ OMV_CFLAGS += -I$(TOP_DIR)/$(ST_DIR)/include/ OMV_CFLAGS += -I$(TOP_DIR)/$(TENSORFLOW_DIR)/$(CPU)/ OMV_CFLAGS += -I$(TOP_DIR)/$(WINC1500_DIR)/include/ +OMV_CFLAGS += -I$(TOP_DIR)/$(LIBPDM_DIR)/ UVC_CFLAGS = $(CFLAGS) UVC_CFLAGS += -I$(OMV_BOARD_CONFIG_DIR) @@ -184,6 +186,7 @@ UVC_LDFLAGS = -mcpu=$(CPU) -mabi=aapcs-linux -mthumb -mfpu=$(FPU) -mfloat-abi=ha #------------- Libraries ----------------# LIBS = -lgcc +LIBS += $(TOP_DIR)/$(LIBPDM_DIR)/libPDMFilter_CM7_GCC_wc32.a FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/CommonTables/*.o) FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/FastMathFunctions/*.o) FIRM_OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/MatrixFunctions/*.o) diff --git a/src/libpdm/libPDMFilter_CM7_GCC_wc32.a b/src/libpdm/libPDMFilter_CM7_GCC_wc32.a new file mode 100644 index 0000000000000000000000000000000000000000..b1117d0f305be877724de25784d17655ff2d7fd5 GIT binary patch literal 14716 zcmeHudwf*YweWtNd1f4jBtTxk$xI%TCm{(Cgu-MpIe9|DL&bt*CIrnGkd)Ah-usmS ztpts2G6R?gVnkX&`_&=X`=i`iBWR_ly$PrnQ9n}DhC8RG6B6{8@#UB#6G#uy$qSTHi9nWQE)?SQ{RbyN* zozhc&L`zQ)&R$43KjxIZ-AGyOAgcOdtddSp&CWKgQLm<2{wmRWk8s*vJJMDsl8E{f zI70dXy=~_ze49Fw>iHu?@2%wwE{qL^Gi17XHJN@Yl8Y+1j-$@?(C7gxjc%lhX{U0~ zw9;X0u}d{GY1lBj2+_`|7(QtjBStP;_FYKc?Y1UK!~~VEKO@(L(^iS6-o9&l;p=GS?$Kj?W<{OOfF76cAc1e_YiY+5tq(iMd{un zB;#Bz$yhf+vo2l0S@j;8?K079!>3#}e*|TFYstKG*YUh{C+Yl4Zalw!4b63ZLUIj9 zx%>eu&Tpi2L9>S}h*`@mYR@B!%%ilx@+d9nvndi<5lY}+!?O!k;o0Y=)48R?XzryG zg!dN`-bFZL^|Q!0;2NY<&*2EQ_io}Jb7m3xriCFz6&elkY4ZTi_W7g8* zW6=tWzYtkmgcP>BaiMt)EjpHqiwZ`Ft@;sS8z|xg?^PsNo+Bme@<_?G5n5J%5tm6G zT5d?9<=vlh<=!Kx+_H&OtQ)}<*G|$E^&Y%JT0>VFJ|!!=k8;(GMYtMqbXClLvg+7c zZjCvgtT{DG*Y-V1*V>B}S^wd$+UxZ=-)q5b{q>wj(H8BzAVqgygjzjtLCSHhYCu^V z`>@}jzXCM5FA|3O~{qq}W^J6D6Z5JfodsNhNF9?IPjs_x% zqlb|#BA~jXco-?Rpk$#(GJCVQDnAlXDh@;h=8iQF{~@5b4_RtgtAWd?K*v85b=tRiw>^q3_Mf6J=$>wp3vh^d0)Ba{~3A} zBMN^(Ps!x5#<|z~ehc<^oTN?RiFWooJ@pqPoeQMVeMbYzM*bF;!f#M2{Ja9zq`x9r zUZV%O1C9ZMG_xAyp)^P;SZ}L@TK%yKF(Uc6t!8ZB7k>cxRQY1dKt^_uQKM39OW7c$ z8C2rI)Zc@Y-UMl3@u|dOpHf)NWVKhW3tk)1P%0KhV3S&`P^Sdw7kZIuB19#nho8T3 z=?*4Ad{~xYJU;NZCHTK-P=b0{g8RNX4-zDkB>2PPIUvEm_Ta2#J?;J6(_2r>@#ATU z{feC=r&YqOS;QdWEecUncEWaGP}tcjk=BI(qwAFbJ8pYo&|^nD2080oYaEKMen+$; zB7lZx5Hf?uu0TCno!y14vY8 z43ffYkd)oAlB&AO#^j&Hsbu?%*sKt>K|Op4dPs `mYf*v+X$<->cEpa30WuuhV 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
© COPYRIGHT 2011 STMicroelectronics
+ * + * Licensed under MCD-ST Image SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_image_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __PDM2PCM_FILTER_H +#define __PDM2PCM_FILTER_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include + +/* Exported constants --------------------------------------------------------*/ +#define PDM_FILTER_ENDIANNESS_LE ((uint16_t)0x0000) +#define PDM_FILTER_ENDIANNESS_BE ((uint16_t)0x0001) + +#define PDM_FILTER_BIT_ORDER_LSB ((uint16_t)0x0000) +#define PDM_FILTER_BIT_ORDER_MSB ((uint16_t)0x0001) + +#define PDM_FILTER_DEC_FACTOR_48 ((uint16_t)0x0001) +#define PDM_FILTER_DEC_FACTOR_64 ((uint16_t)0x0002) +#define PDM_FILTER_DEC_FACTOR_80 ((uint16_t)0x0003) +#define PDM_FILTER_DEC_FACTOR_128 ((uint16_t)0x0004) +#define PDM_FILTER_DEC_FACTOR_16 ((uint16_t)0x0005) +#define PDM_FILTER_DEC_FACTOR_24 ((uint16_t)0x0006) +#define PDM_FILTER_DEC_FACTOR_32 ((uint16_t)0x0007) + +#define PDM_FILTER_INIT_ERROR ((uint16_t)0x0010) +#define PDM_FILTER_CONFIG_ERROR ((uint16_t)0x0020) +#define PDM_FILTER_ENDIANNESS_ERROR ((uint16_t)0x0001) +#define PDM_FILTER_BIT_ORDER_ERROR ((uint16_t)0x0002) +#define PDM_FILTER_CRC_LOCK_ERROR ((uint16_t)0x0004) +#define PDM_FILTER_DECIMATION_ERROR ((uint16_t)0x0008) +#define PDM_FILTER_GAIN_ERROR ((uint16_t)0x0040) +#define PDM_FILTER_SAMPLES_NUMBER_ERROR ((uint16_t)0x0080) +#define PDM2PCM_INTERNAL_MEMORY_SIZE 16 + +/* Exported types ------------------------------------------------------------*/ +typedef struct{ + uint16_t bit_order; + uint16_t endianness; + uint32_t high_pass_tap; + uint16_t in_ptr_channels; + uint16_t out_ptr_channels; + uint32_t pInternalMemory[PDM2PCM_INTERNAL_MEMORY_SIZE]; +}PDM_Filter_Handler_t; + +typedef struct{ + uint16_t decimation_factor; + uint16_t output_samples_number; + int16_t mic_gain; +}PDM_Filter_Config_t; + +/* Exported macros -----------------------------------------------------------*/ + +/* Exported functions ------------------------------------------------------- */ +uint32_t PDM_Filter_Init(PDM_Filter_Handler_t *pHandler); +uint32_t PDM_Filter_setConfig(PDM_Filter_Handler_t *pHandler, PDM_Filter_Config_t *pConfig); +uint32_t PDM_Filter_getConfig(PDM_Filter_Handler_t *pHandler, PDM_Filter_Config_t *pConfig); +uint32_t PDM_Filter_deInterleave(void *pDataIn, void *pDataOut, PDM_Filter_Handler_t * pHandler); +uint32_t PDM_Filter(void *pDataIn, void *pDataOut, PDM_Filter_Handler_t *pHandler); + +#ifdef __cplusplus +} +#endif + +#endif /* __PDM2PCM_FILTER_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +