Skip to content

Commit 07d7b94

Browse files
committed
debug I2S to 1.3.1
1 parent e416beb commit 07d7b94

File tree

6 files changed

+113
-307
lines changed

6 files changed

+113
-307
lines changed
File renamed without changes.

cores/nRF5/nordic/nrfx_config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define NRFX_CONFIG_H__
33

44
#define NRFX_POWER_ENABLED 1
5+
#define NRFX_I2S_ENABLED 1
56
#define NRFX_POWER_DEFAULT_CONFIG_IRQ_PRIORITY 7
67

78
#define NRFX_CLOCK_ENABLED 0
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/**
2+
* @file LookBack.ino
3+
* @author rakwireless.com
4+
* @brief This example is used to test I2S read and write, you need to connect the I2S read and write pins together.
5+
* @version 0.1
6+
* @date 2022-06-20
7+
* @copyright Copyright (c) 2022
8+
*/
9+
#include "audio.h"
10+
#include "I2S.h"
11+
#include "Arduino.h"
12+
13+
#define I2S_DATA_BLOCK_WORDS 512
14+
15+
i2s_channels_t channels = Left ;//Stereo ;// Right //
16+
int frequency = 16000; // sample rate in Hz
17+
int sampleBit = 16;
18+
19+
uint32_t readbuff[512]= {0};
20+
uint32_t writebuff[512]= {0};
21+
22+
uint16_t leftChannel[512] = {0};
23+
uint16_t rightChannel[512] = {0};
24+
25+
volatile uint8_t rx_flag = 0;
26+
volatile uint8_t tx_flag = 0;
27+
28+
void i2s_config();
29+
void tx_irq();
30+
void rx_irq();
31+
void setup()
32+
{
33+
pinMode(WB_IO2,OUTPUT);
34+
digitalWrite(WB_IO2,HIGH);
35+
// Initialize Serial for debug output
36+
time_t timeout = millis();
37+
Serial.begin(115200);
38+
while (!Serial)
39+
{
40+
if ((millis() - timeout) < 3000)
41+
{
42+
delay(100);
43+
}
44+
else
45+
{
46+
break;
47+
}
48+
}
49+
for(int i=0;i<512;i++)
50+
{
51+
writebuff[i] = i+1;
52+
}
53+
54+
i2s_config();
55+
delay(200);
56+
I2S.write(&writebuff,sizeof(writebuff));
57+
Serial.println("=====================================");
58+
}
59+
60+
void loop()
61+
{
62+
if(rx_flag==1)
63+
{
64+
rx_flag = 0;
65+
Serial.println("I2S read---------------------------------------");
66+
I2S.read(&readbuff,512);
67+
for(int i=0;i<512;i++)
68+
{
69+
uint32_t const * p_word = &readbuff[i];
70+
leftChannel[i] = ((uint16_t const *)p_word)[0];
71+
rightChannel[i] = ((uint16_t const *)p_word)[1];
72+
73+
Serial.printf("%08X\t\tL:%04X\tR:%04X\t\r\n",readbuff[i],leftChannel[i],rightChannel[i]);
74+
}
75+
Serial.println("I2S write ########################################");
76+
if(tx_flag == 1)
77+
{
78+
I2S.write(&writebuff,sizeof(writebuff));
79+
tx_flag = 0;
80+
}
81+
}
82+
}
83+
84+
void rx_irq() ///< Pointer to the buffer for received data.
85+
{
86+
rx_flag = 1;
87+
// I2S.read(&readbuff,sizeof(readbuff));
88+
}
89+
void tx_irq() ///< Pointer to the buffer with data to be sent.
90+
{
91+
tx_flag = 1;
92+
}
93+
void i2s_config()
94+
{
95+
I2S.TxIRQCallBack(tx_irq);
96+
I2S.RxIRQCallBack(rx_irq);
97+
I2S.begin(channels,frequency,sampleBit);
98+
I2S.start();
99+
}
100+
101+

libraries/I2S/src/I2S.cpp

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ void I2SClass::irqHander(nrfx_i2s_buffers_t const * p_released)
3030
_onRxIRQ();
3131
_readBuffer.swap();
3232
NRF_I2S->RXD.PTR = (uint32_t)_readBuffer.data();
33-
34-
}
33+
}
34+
3535
}
3636

3737
if(p_released->p_tx_buffer!=NULL)
3838
{
3939
if (_onTxIRQ)
4040
{
41-
_onTxIRQ();
41+
_onTxIRQ();
4242
_writeBuffer.swap();
43-
NRF_I2S->TXD.PTR = (uint32_t)_writeBuffer.data();
44-
}
43+
NRF_I2S->TXD.PTR = (uint32_t)_writeBuffer.data();
44+
}
4545

4646
}
4747
}
@@ -186,15 +186,7 @@ uint32_t I2SClass::begin(i2s_mode_t mode,i2s_channels_t channel,uint8_t sampleWi
186186
setChannels(channel);
187187
setFs(fs);
188188
_readBuffer.reset();
189-
_writeBuffer.reset();
190-
if(_readBuffer.size()>_writeBuffer.size())
191-
{
192-
_bufferlength = _readBuffer.size();
193-
}
194-
else
195-
{
196-
_bufferlength = _writeBuffer.size();
197-
}
189+
_writeBuffer.reset();
198190
return(nrfx_i2s_init(&_i2s_config, data_handler));
199191
}
200192
uint32_t I2SClass::begin(i2s_mode_t mode)
@@ -207,37 +199,21 @@ uint32_t I2SClass::begin(i2s_mode_t mode)
207199
_readBuffer.reset();
208200
_writeBuffer.reset();
209201

210-
if(_readBuffer.size()>_writeBuffer.size())
211-
{
212-
_bufferlength = _readBuffer.size();
213-
}
214-
else
215-
{
216-
_bufferlength = _writeBuffer.size();
217-
}
218-
219202
return(nrfx_i2s_init(&_i2s_config, data_handler));
220203
}
221204
uint32_t I2SClass::begin(i2s_channels_t channel,uint32_t fs,uint8_t sampleWidth)
222205
{
223206
_i2s_config.irq_priority = I2S_IRQ_PRIORITY;
224207
setMode(I2S_Master);
225208
setPin(I2S_SCK_PIN,I2S_LRCK_PIN,I2S_MCK_PIN,I2S_SDOUT_PIN,I2S_SDIN_PIN);
226-
setFrameFormat(FORMAT_I2S);
227-
setAlignment(ALIGN_Left);
209+
setFrameFormat(FORMAT_I2S ); //FORMAT_ALIGNED
210+
setAlignment(ALIGN_Left); //ALIGN_Right
228211
setSampleWidth(sampleWidth);
229212
setChannels(channel);
230213
setFs(fs);
231214
_readBuffer.reset();
232215
_writeBuffer.reset();
233-
if(_readBuffer.size()>_writeBuffer.size())
234-
{
235-
_bufferlength = _readBuffer.size();
236-
}
237-
else
238-
{
239-
_bufferlength = _writeBuffer.size();
240-
}
216+
241217
return(nrfx_i2s_init(&_i2s_config, data_handler));
242218
}
243219
void I2SClass::start(void)
@@ -246,7 +222,7 @@ void I2SClass::start(void)
246222
.p_rx_buffer = (uint32_t*)_readBuffer.data(),
247223
.p_tx_buffer = (uint32_t*)_writeBuffer.data()
248224
};
249-
nrfx_i2s_start(&initial_buffers,_bufferlength,0);
225+
nrfx_i2s_start(&initial_buffers,512,0);
250226
}
251227

252228
void I2SClass::stop(void)
@@ -255,8 +231,6 @@ void I2SClass::stop(void)
255231
}
256232
void I2SClass::end()
257233
{
258-
// _readBuffer.end();
259-
// _writeBuffer.end();
260234
nrfx_i2s_uninit();
261235
}
262236

0 commit comments

Comments
 (0)