5#if defined(USE_NANO33BLE)
13#define IS_I2S_IMPLEMENTED
35 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV8, 32.0 / 8},
36 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV10, 32 / 10},
37 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV11, 32.0 / 11},
38 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV15, 32.0 / 15},
39 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV16, 32.0 / 16},
40 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV21, 32.0 / 21},
41 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV23, 32.0 / 23},
42 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV30, 32.0 / 30},
43 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV31, 32.0 / 31},
44 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV32, 32.0 / 32},
45 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV42, 32.0 / 42},
46 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV63, 32.0 / 63},
47 {I2S_CONFIG_MCKFREQ_MCKFREQ_32MDIV125, 32.0 / 125}};
58 {I2S_CONFIG_RATIO_RATIO_32X, 32.0}, {I2S_CONFIG_RATIO_RATIO_48X, 48.0},
59 {I2S_CONFIG_RATIO_RATIO_64X, 64.0}, {I2S_CONFIG_RATIO_RATIO_96X, 96.0},
60 {I2S_CONFIG_RATIO_RATIO_128X, 128.0}, {I2S_CONFIG_RATIO_RATIO_192X, 192.0},
61 {I2S_CONFIG_RATIO_RATIO_256X, 256.0}, {I2S_CONFIG_RATIO_RATIO_384X, 384.0},
62 {I2S_CONFIG_RATIO_RATIO_512X, 512.0}};
66 if (NRF_I2S->EVENTS_TXPTRUPD == 1) {
86 NRF_I2S->EVENTS_TXPTRUPD = 0;
92 if (NRF_I2S->EVENTS_RXPTRUPD == 1) {
98 NRF_I2S->EVENTS_RXPTRUPD = 0;
108 NRF_I2S->EVENTS_TXPTRUPD = 0;
109 NRF_I2S->EVENTS_RXPTRUPD = 0;
150 LOGE(
"32 bits not supported");
155 LOGE(
"out of memory");
161 NVIC_EnableIRQ(I2S_IRQn);
193 NRF_I2S->TASKS_START = 0;
240 NRF_I2S->CONFIG.TXEN =
241 (I2S_CONFIG_TXEN_TXEN_Enabled << I2S_CONFIG_TXEN_TXEN_Pos);
245 NRF_I2S->CONFIG.RXEN =
246 (I2S_CONFIG_RXEN_RXEN_Enabled << I2S_CONFIG_RXEN_RXEN_Pos);
249 LOGE(
"rx_tx_mode not supported");
260 NRF_I2S->CONFIG.MCKEN =
261 (I2S_CONFIG_MCKEN_MCKEN_Enabled << I2S_CONFIG_MCKEN_MCKEN_Pos);
266 float selected_freq = 0;
269 float freq_value = freq.freq * 1000000 / div.ratio;
270 if (abs(freq_value - freq_requested) <
271 abs(selected_freq - freq_requested)) {
273 NRF_I2S->CONFIG.MCKFREQ = freq.id << I2S_CONFIG_MCKFREQ_MCKFREQ_Pos;
275 NRF_I2S->CONFIG.RATIO = div.id << I2S_CONFIG_RATIO_RATIO_Pos;
276 selected_freq = freq_value;
277 LOGD(
"frequency requested %f vs %f", freq_requested, selected_freq);
281 LOGI(
"Frequency req. %f vs eff. %f", freq_requested, selected_freq);
287 uint16_t swidth = I2S_CONFIG_SWIDTH_SWIDTH_16Bit;
290 NRF_I2S->CONFIG.SWIDTH = I2S_CONFIG_SWIDTH_SWIDTH_8Bit
291 << I2S_CONFIG_SWIDTH_SWIDTH_Pos;
294 NRF_I2S->CONFIG.SWIDTH = I2S_CONFIG_SWIDTH_SWIDTH_16Bit
295 << I2S_CONFIG_SWIDTH_SWIDTH_Pos;
298 NRF_I2S->CONFIG.SWIDTH = I2S_CONFIG_SWIDTH_SWIDTH_24Bit
299 << I2S_CONFIG_SWIDTH_SWIDTH_Pos;
315 NRF_I2S->CONFIG.FORMAT = I2S_CONFIG_FORMAT_FORMAT_I2S
316 << I2S_CONFIG_FORMAT_FORMAT_Pos;
317 NRF_I2S->CONFIG.ALIGN = I2S_CONFIG_ALIGN_ALIGN_Left
318 << I2S_CONFIG_ALIGN_ALIGN_Pos;
323 NRF_I2S->CONFIG.FORMAT = I2S_CONFIG_FORMAT_FORMAT_I2S
324 << I2S_CONFIG_FORMAT_FORMAT_Pos;
325 NRF_I2S->CONFIG.ALIGN = I2S_CONFIG_ALIGN_ALIGN_Right
326 << I2S_CONFIG_ALIGN_ALIGN_Pos;
330 LOGW(
"i2s_format not supported");
338#if defined(USE_ALT_PIN_SUPPORT)
361 << I2S_PSEL_SDOUT_PIN_Pos;
373 unsigned long result = 0;
376 result = I2S_INTENSET_TXPTRUPD_Enabled << I2S_INTENSET_TXPTRUPD_Pos;
379 result = I2S_INTENSET_RXPTRUPD_Enabled << I2S_INTENSET_RXPTRUPD_Pos;
391 NRF_I2S->CONFIG.CHANNELS = I2S_CONFIG_CHANNELS_CHANNELS_Stereo
392 << I2S_CONFIG_CHANNELS_CHANNELS_Pos;
394 NRF_I2S->CONFIG.MODE =
395 cfg.
is_master ? I2S_CONFIG_MODE_MODE_MASTER << I2S_CONFIG_MODE_MODE_Pos
396 : I2S_CONFIG_MODE_MODE_Slave << I2S_CONFIG_MODE_MODE_Pos;
409 NRF_I2S->TASKS_START = 1;
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define TRACEW()
Definition AudioLoggerIDF.h:33
#define TRACEE()
Definition AudioLoggerIDF.h:34
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:26
@ TX_MODE
Definition AudioTypes.h:26
@ RX_MODE
Definition AudioTypes.h:26