From 90b8fe26cc0225f527dc1e4f9cbcd37656200e4d Mon Sep 17 00:00:00 2001 From: xross Date: Mon, 8 Jan 2018 11:37:02 +0000 Subject: [PATCH 1/2] Added XUA_ENDPOINT_COUNT_CUSTOM_IN/OUT define --- lib_xua/api/xua_conf_default.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib_xua/api/xua_conf_default.h b/lib_xua/api/xua_conf_default.h index 52a26abd..a4273ce5 100644 --- a/lib_xua/api/xua_conf_default.h +++ b/lib_xua/api/xua_conf_default.h @@ -1193,7 +1193,7 @@ enum USBEndpointNumber_In ENDPOINT_NUMBER_IN_IAP_EA_NATIVE_TRANS, #endif #endif - ENDPOINT_COUNT_IN /* End marker */ + XUA_ENDPOINT_COUNT_IN /* End marker */ }; enum USBEndpointNumber_Out @@ -1209,9 +1209,21 @@ enum USBEndpointNumber_Out ENDPOINT_NUMBER_OUT_IAP_EA_NATIVE_TRANS, #endif #endif - ENDPOINT_COUNT_OUT /* End marker */ + XUA_ENDPOINT_COUNT_OUT /* End marker */ }; + +#ifndef XUA_ENDPOINT_COUNT_CUSTOM_OUT +#define XUA_ENDPOINT_COUNT_CUSTOM_OUT 0 +#endif + +#ifndef XUA_ENDPOINT_COUNT_CUSTOM_IN +#define XUA_ENDPOINT_COUNT_CUSTOM_IN 0 +#endif + +#define ENDPOINT_COUNT_IN (XUA_ENDPOINT_COUNT_IN + XUA_ENDPOINT_COUNT_CUSTOM_IN) +#define ENDPOINT_COUNT_OUT (XUA_ENDPOINT_COUNT_OUT + XUA_ENDPOINT_COUNT_CUSTOM_OUT) + #endif /*** Internal defines below here. NOT FOR MODIFICATION ***/ From 727de0ac11b7e20f26da56eb5393cf5640241ea7 Mon Sep 17 00:00:00 2001 From: xross Date: Mon, 8 Jan 2018 11:38:26 +0000 Subject: [PATCH 2/2] Added basic PDM mic delay (based on MIC_BUFFER_DEPTH). Default, 1 sample. --- lib_xua/src/core/pdm_mics/pdm_mic.xc | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib_xua/src/core/pdm_mics/pdm_mic.xc b/lib_xua/src/core/pdm_mics/pdm_mic.xc index 1b55b333..9ebd40b3 100644 --- a/lib_xua/src/core/pdm_mics/pdm_mic.xc +++ b/lib_xua/src/core/pdm_mics/pdm_mic.xc @@ -34,6 +34,10 @@ extern unsafe port p_mclk_in; /* Delcared in main.xc */ extern clock clk_pdm; +#ifndef MIC_BUFFER_DEPTH +#define MIC_BUFFER_DEPTH 1 +#endif + int mic_decimator_fir_data[8][THIRD_STAGE_COEFS_PER_STAGE * MAX_DECIMATION_FACTOR] = {{0}}; mic_array_frame_time_domain mic_audio[2]; @@ -50,7 +54,7 @@ void pdm_buffer(streaming chanend c_ds_output[2], chanend c_audio) { unsigned buffer; unsigned samplerate; - int output[NUM_PDM_MICS]; + int output[MIC_BUFFER_DEPTH][NUM_PDM_MICS]; #ifdef MIC_PROCESSING_USE_INTERFACE i_mic_process.init(); @@ -64,6 +68,9 @@ void pdm_buffer(streaming chanend c_ds_output[2], chanend c_audio) unsigned decimatorCount = 1; #endif + unsigned micBufferWrite = (MIC_BUFFER_DEPTH -1); + unsigned micBufferRead = 0; + mic_array_decimator_conf_common_t dcc; const int * unsafe fir_coefs[7]; mic_array_frame_time_domain * unsafe current; @@ -154,8 +161,11 @@ void pdm_buffer(streaming chanend c_ds_output[2], chanend c_audio) #pragma loop unroll for(int i = 0; i < NUM_PDM_MICS; i++) { - c_audio <: output[i]; + c_audio <: output[micBufferRead][i]; } + micBufferRead++; + if(micBufferRead == MIC_BUFFER_DEPTH) + micBufferRead = 0; } /* Get a new frame of mic data */ @@ -171,8 +181,11 @@ void pdm_buffer(streaming chanend c_ds_output[2], chanend c_audio) #pragma loop unroll for(int i = 0; i < NUM_PDM_MICS; i++) { - output[i] = current->data[i][0]; + output[micBufferWrite][i] = current->data[i][0]; } + micBufferWrite++; + if(micBufferWrite == MIC_BUFFER_DEPTH) + micBufferWrite = 0; } else unsafe{ @@ -199,8 +212,11 @@ void pdm_buffer(streaming chanend c_ds_output[2], chanend c_audio) #pragma loop unroll for(int i = 0; i < NUM_PDM_MICS; i++) { - output[i] = current->data[i][0]; + output[micBufferWrite][i] = current->data[i][0]; } + micBufferWrite++; + if(micBufferWrite == MIC_BUFFER_DEPTH) + micBufferWrite = 0; } break; } /* select */