@@ -138,7 +138,7 @@ void AutoAnalog::begin(bool enADC, bool enDAC, uint8_t _useI2S){
138
138
139
139
void AutoAnalog::setSampleRate (uint32_t sampRate, bool stereo){
140
140
141
- if (! useI2S){
141
+ if (useI2S == 0 ){
142
142
NRF_PWM0->TASKS_STOP = 1 ;
143
143
uint32_t timer = millis ();
144
144
while (NRF_PWM0->EVENTS_STOPPED == 0 ){ if (millis () - timer > 1000 ){break ;} }
@@ -254,6 +254,12 @@ bool adcWhichBuf = 0;
254
254
void AutoAnalog::getADC (uint32_t samples){
255
255
256
256
if (useI2S == 2 || useI2S == 3 ){
257
+
258
+ if (NRF_I2S->ENABLE == 0 ){
259
+ NRF_I2S->ENABLE = 1 ;
260
+ NRF_I2S->TASKS_START = 1 ;
261
+ }
262
+
257
263
while (NRF_I2S->EVENTS_RXPTRUPD == 0 ){}
258
264
259
265
uint8_t divider = 2 ;
@@ -375,13 +381,30 @@ void AutoAnalog::feedDAC(uint8_t dacChannel, uint32_t samples, bool startInterru
375
381
NRF_PWM0->EVENTS_SEQEND [0 ] = 0 ;
376
382
377
383
if (dacBitsPerSample > 8 ){
378
- memcpy (dacBuf0, dacBuffer16, samples * 2 );
384
+ if (whichBuf){
385
+ memcpy (dacBuf0, dacBuffer16, samples * 2 );
386
+ }else {
387
+ memcpy (dacBuf1, dacBuffer16, samples * 2 );
388
+ }
379
389
}else {
380
- for (uint32_t i=0 ; i<samples; i++){
381
- dacBuf0[i] = (uint16_t )(dacBuffer[i] << 1 ) ;
390
+ if (whichBuf){
391
+ for (uint32_t i=0 ; i<samples; i++){
392
+ dacBuf0[i] = (uint16_t )(dacBuffer[i] << 1 ) ;
393
+ }
394
+ }else {
395
+ for (uint32_t i=0 ; i<samples; i++){
396
+ dacBuf1[i] = (uint16_t )(dacBuffer[i] << 1 ) ;
397
+ }
382
398
}
399
+
383
400
}
384
- NRF_PWM0->SEQ [0 ].PTR = ((uint32_t )(&dacBuf0[0 ]) << PWM_SEQ_PTR_PTR_Pos);
401
+ if (whichBuf){
402
+ NRF_PWM0->SEQ [0 ].PTR = ((uint32_t )(&dacBuf0[0 ]) << PWM_SEQ_PTR_PTR_Pos);
403
+ }else {
404
+ NRF_PWM0->SEQ [0 ].PTR = ((uint32_t )(&dacBuf1[0 ]) << PWM_SEQ_PTR_PTR_Pos);
405
+ }
406
+ whichBuf = !whichBuf;
407
+
385
408
NRF_PWM0->SEQ [0 ].CNT = (samples << PWM_SEQ_CNT_CNT_Pos);
386
409
NRF_PWM0->TASKS_SEQSTART [0 ] = 1 ;
387
410
}
@@ -440,10 +463,7 @@ if(useI2S == 2 || useI2S == 3){
440
463
441
464
// Configure data pointer
442
465
NRF_I2S->RXD .PTR = (uint32_t )adcBuf0;
443
- NRF_I2S->RXTXD .MAXCNT = 16 ;// / sizeof(uint32_t);
444
-
445
- NRF_I2S->ENABLE = 1 ;
446
- NRF_I2S->TASKS_START = 1 ;
466
+ NRF_I2S->RXTXD .MAXCNT = 16 ;// / sizeof(uint32_t);
447
467
448
468
}else {
449
469
@@ -602,14 +622,6 @@ void AutoAnalog::dacSetup(void){
602
622
NRF_I2S->RXD .PTR = (uint32_t )dacBuf1;
603
623
NRF_I2S->RXTXD .MAXCNT = 16 ;// / sizeof(uint32_t);
604
624
605
-
606
- // NRF_I2S->INTENSET = I2S_INTENSET_TXPTRUPD_Enabled << I2S_INTENSET_TXPTRUPD_Pos;
607
- // NVIC_EnableIRQ(I2S_IRQn);
608
- // NRF_I2S->TXD.PTR = (uint32_t)&sine_table[0];
609
- // NRF_I2S->RXTXD.MAXCNT = sizeof(sine_table) / sizeof(uint32_t);
610
- NRF_I2S->ENABLE = 1 ;
611
- NRF_I2S->TASKS_START = 1 ;
612
-
613
625
}else {
614
626
615
627
NRF_PWM0->PSEL .OUT [0 ] = (DEFAULT_PWM_PIN << PWM_PSEL_OUT_PIN_Pos) | (PWM_PSEL_OUT_CONNECT_Connected << PWM_PSEL_OUT_CONNECT_Pos | DEFAULT_PWM_PORT << PWM_PSEL_OUT_PORT_Pos);
0 commit comments