Skip to content

Commit 8a05c75

Browse files
committed
Jira566 I2S DMA improvement: add two extra buffer on TX and RX side
1 parent 3168ede commit 8a05c75

File tree

14 files changed

+3205
-0
lines changed

14 files changed

+3205
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/**
2+
* A simple sketch to test the rx channel of the i2s interface.
3+
* A callback function is used to fill up a buffer whenever data is received
4+
*
5+
* To test this sketch you will need a second Arduino/Genuino 101 board with the I2S_TxCallback sketch uploaded
6+
*
7+
* Connection:
8+
* GND -> GND
9+
* I2S_RSCK(pin 8) -> I2S_TSCK(pin 2)
10+
* I2S_RWS(pin 3) -> I2S_TWS(pin 4)
11+
* I2S_RXD(pin 5) -> I2S_TXD(pin 7)
12+
*
13+
**/
14+
#include <CurieI2SDMA.h>
15+
16+
#define BUFF_SIZE 128
17+
uint32_t dataBuff[BUFF_SIZE+2]; // extra 2 buffer is for the padding zero
18+
19+
uint32_t OFFSET = 0;
20+
uint8_t start_flag = 0;
21+
uint8_t done_flag = 0;
22+
uint32_t loop_count = 0;
23+
24+
void setup()
25+
{
26+
Serial.begin(115200);
27+
while(!Serial);
28+
Serial.println("CurieI2SDMA Rx Callback");
29+
30+
CurieI2SDMA.iniRX();
31+
/*
32+
* CurieI2SDMA.beginTX(sample_rate, resolution, master,mode)
33+
* mode 1 : PHILIPS_MODE
34+
* 2 : RIGHT_JST_MODE
35+
* 3 : LEFT_JST_MODE
36+
* 4 : DSP_MODE
37+
*/
38+
CurieI2SDMA.beginRX(44100, 32,0,1);
39+
40+
}
41+
42+
void loop()
43+
{
44+
int status = CurieI2SDMA.transRX(dataBuff,sizeof(dataBuff));
45+
if(status)
46+
return;
47+
48+
if(start_flag)
49+
{
50+
if( (dataBuff[OFFSET]>>16) != loop_count+1)
51+
Serial.println("+++ loop_count jump +++");
52+
}
53+
else
54+
{
55+
start_flag = 1;
56+
OFFSET = (dataBuff[0] == 0) ? 2 : 0;
57+
}
58+
loop_count = (dataBuff[OFFSET] >> 16);
59+
60+
done_flag = 1;
61+
for(uint32_t i = 0 ;i < BUFF_SIZE;++i)
62+
{
63+
//Serial.println(dataBuff[i+OFFSET],HEX);
64+
if ((dataBuff[i+OFFSET] & 0XFFFF0000) == (loop_count <<16)
65+
&& (dataBuff[i+OFFSET] & 0XFFFF) == (i+1))
66+
;
67+
else
68+
{
69+
done_flag = 0;
70+
Serial.println(dataBuff[i+OFFSET],HEX);
71+
Serial.println("ERROR");
72+
break;
73+
}
74+
}
75+
76+
if(done_flag)
77+
Serial.println("RX done");
78+
delay(100);
79+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//I2S_TX -> Pin 7
2+
//I2S_TSK -> Pin 4
3+
//I2S_TSCK -> pin 2
4+
5+
#include <CurieI2SDMA.h>
6+
7+
#define BUFF_SIZE 128
8+
boolean blinkState = true; // state of the LED
9+
uint32_t dataBuff[BUFF_SIZE];
10+
uint32_t loop_count = 0;
11+
void setup()
12+
{
13+
Serial.begin(115200);
14+
while(!Serial);
15+
Serial.println("CurieI2SDMA Tx Callback");
16+
17+
CurieI2SDMA.iniTX();
18+
/*
19+
* CurieI2SDMA.beginTX(sample_rate, resolution, master,mode)
20+
* mode 1 : PHILIPS_MODE
21+
* 2 : RIGHT_JST_MODE
22+
* 3 : LEFT_JST_MODE
23+
* 4 : DSP_MODE
24+
*/
25+
CurieI2SDMA.beginTX(44100, 32,1, 1);
26+
digitalWrite(13, blinkState);
27+
}
28+
29+
void loop()
30+
{
31+
for(uint32_t i = 0; i <BUFF_SIZE; ++i)
32+
{
33+
dataBuff[i] = i + 1 + (loop_count<<16);
34+
}
35+
loop_count++;
36+
int status = CurieI2SDMA.transTX(dataBuff,sizeof(dataBuff));
37+
if(status)
38+
return;
39+
40+
blinkState = !blinkState;
41+
digitalWrite(13, blinkState);
42+
43+
//when the TX set to be slave, the two lines below will introduce delay.
44+
//Please remove them.
45+
Serial.println("done transmitting");
46+
delay(1000);
47+
48+
}
49+
50+

libraries/CurieI2SDMA/keywords.txt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#######################################
2+
# Syntax Coloring Map For CurieI2S
3+
#######################################
4+
5+
#######################################
6+
# Datatypes (KEYWORD1)
7+
#######################################
8+
9+
Curie_I2S KEYWORD1
10+
11+
#######################################
12+
# Methods and Functions (KEYWORD2)
13+
#######################################
14+
15+
begin KEYWORD2
16+
start KEYWORD2
17+
stop KEYWORD2
18+
begin KEYWORD2
19+
enableRX KEYWORD2
20+
enableTX KEYWORD2
21+
startRX KEYWORD2
22+
startTX KEYWORD2
23+
stopRX KEYWORD2
24+
stopTX KEYWORD2
25+
setI2SMode KEYWORD2
26+
setResolution KEYWORD2
27+
initRX KEYWORD2
28+
initTX KEYWORD2
29+
end KEYWORD2
30+
pushData KEYWORD2
31+
fastPushData KEYWORD2
32+
write KEYWORD2
33+
pullData KEYWORD2
34+
read KEYWORD2
35+
requestdword KEYWORD2
36+
available KEYWORD2
37+
availableTx KEYWORD2
38+
attachRxInterrupt KEYWORD2
39+
detachRxInterrupt KEYWORD2
40+
attachTxInterrupt KEYWORD2
41+
detachTxInterrupt KEYWORD2
42+
#######################################
43+
# Instances (KEYWORD2)
44+
#######################################
45+
CurieI2S KEYWORD2
46+
#######################################
47+
# Constants (LITERAL1)
48+
#######################################
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
name=CurieI2SDMA
2+
version=1.0
3+
author=Intel
4+
maintainer=Intel
5+
6+
sentence=Curie I2S DMA Library for Arduino/Genuino 101
7+
paragraph=
8+
category=Communication
9+
url=http://makers.intel.com
10+
architectures=arc32
11+
core-dependencies=arduino (>=1.6.3)

0 commit comments

Comments
 (0)