Skip to content

Commit 3810682

Browse files
committed
Fix Double buffer fill
1 parent c58e95b commit 3810682

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

libraries/PDM/src/stm32/PDM.cpp

+19-8
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ int PDMClass::begin(int channels, int sampleRate) {
7070
_gain = 24;
7171
}
7272

73-
if(py_audio_init(channels, sampleRate, _gain, 0.9883f)) {
73+
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
74+
_doubleBuffer.swap(0);
75+
76+
if(py_audio_init(channels, sampleRate, gain_db, 0.9883f)) {
7477
py_audio_start_streaming();
7578
_init = 1;
7679
return 1;
@@ -119,16 +122,24 @@ size_t PDMClass::getBufferSize()
119122
return _doubleBuffer.getSize();
120123
}
121124

125+
#define HALF_TRANSFER_SIZE (64*_channels)
126+
static int g_pcmbuf_size=0;
127+
122128
void PDMClass::IrqHandler(bool halftranfer)
123129
{
124-
if (_doubleBuffer.available() == 0) {
125-
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
130+
if (g_pcmbuf_size < _doubleBuffer.getSize()) {
126131
audio_pendsv_callback();
127-
_doubleBuffer.swap(_doubleBuffer.availableForWrite());
128-
}
129-
130-
if (_onReceive) {
131-
_onReceive();
132+
g_pcmbuf += (HALF_TRANSFER_SIZE/2);
133+
g_pcmbuf_size += HALF_TRANSFER_SIZE;
134+
135+
if(g_pcmbuf_size == _doubleBuffer.getSize()) {
136+
_doubleBuffer.swap(g_pcmbuf_size);
137+
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
138+
g_pcmbuf_size = 0;
139+
if (_onReceive) {
140+
_onReceive();
141+
}
142+
}
132143
}
133144
}
134145

0 commit comments

Comments
 (0)