Skip to content

Commit 2e76fc0

Browse files
committed
adding a simple example
1 parent 23e45a4 commit 2e76fc0

File tree

2 files changed

+89
-2
lines changed

2 files changed

+89
-2
lines changed

Diff for: cores/esp32/esp32-hal-rmt.h

+26-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
#ifdef __cplusplus
32
extern "C" {
43
#endif
@@ -19,17 +18,42 @@ typedef struct rmt_obj_s rmt_obj_t;
1918
*/
2019
rmt_obj_t* rmtInit(int pin, bool tx_not_rx, int entries, int period);
2120

21+
/**
22+
* Sets the clock/divider of timebase the nearest tick to the supplied value in nanoseconds
23+
* return the real actual tick value in ns
24+
*/
2225
float rmtSetTick(rmt_obj_t* rmt, float tick);
2326

27+
/**
28+
* Sending data in one-go mode (more data must span over multiple channels)
29+
*
30+
*/
2431
bool rmtSend(rmt_obj_t* rmt, uint32_t* data, size_t size);
2532

33+
/**
34+
* Sending data in one-go mode (more data being send while updating buffers in interrupts)
35+
*
36+
*/
2637
bool rmtSendQueued(rmt_obj_t* rmt, uint32_t* data, size_t size);
2738

39+
/**
40+
* Initiates simple data receive without interrupts
41+
*
42+
*/
2843
bool rmtReceive(rmt_obj_t* rmt, size_t idle_thres);
2944

45+
/**
46+
* Wait method for synchronous receive
47+
*
48+
*/
49+
bool rmtWaitForData(rmt_obj_t* rmt, uint32_t* data, size_t size);
50+
51+
/**
52+
* Initiates async receive, event flag indicates data received
53+
*
54+
*/
3055
bool rmtReceiveAsync(rmt_obj_t* rmt, size_t idle_thres, uint32_t* data, size_t size, void* event_flags);
3156

32-
bool rmtWaitForData(rmt_obj_t* rmt, uint32_t* data, size_t size);
3357

3458

3559
// TODO:

Diff for: libraries/ESP32/examples/RMTLoopback/RMTLoopbakc.ino

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#include "freertos/FreeRTOS.h"
2+
#include "freertos/task.h"
3+
#include "freertos/event_groups.h"
4+
#include "Arduino.h"
5+
6+
#include "esp32-hal-rmt.h"
7+
8+
uint32_t my_data[256];
9+
10+
uint32_t data[256];
11+
12+
rmt_obj_t* rmt_send = NULL;
13+
rmt_obj_t* rmt_recv = NULL;
14+
15+
16+
void setup()
17+
{
18+
if ((rmt_send = rmtInit(18, true, 2, 1000)) == NULL)
19+
{
20+
printf("init sender failed\n");
21+
}
22+
if ((rmt_recv = rmtInit(21, false, 2, 1000)) == NULL)
23+
{
24+
printf("init receiver failed\n");
25+
}
26+
27+
28+
float realTick = rmtSetTick(rmt_send, 400);
29+
printf("real tick set to: %f\n", realTick);
30+
realTick = rmtSetTick(rmt_recv, 400);
31+
printf("real tick set to: %f\n", realTick);
32+
33+
events = xEventGroupCreate();
34+
}
35+
36+
void loop()
37+
{
38+
// Init data
39+
int i;
40+
for (i=0; i<255; i++) {
41+
data[i] = 0x80010001 + ((i%13)<<16) + 13-(i%13);
42+
}
43+
data[255] = 0;
44+
45+
// Start receiving
46+
rmtReceiveAsync(rmt_recv, 0x4F, my_data, 60, events);
47+
48+
// Send in continous mode
49+
rmtSendQueued(rmt_send, data, 56);
50+
51+
// Wait for data
52+
xEventGroupWaitBits(events, RMT_FLAG_RX_DONE, 1, 1, portMAX_DELAY);
53+
54+
// Printout the received data plus the original values
55+
for (i=0; i<60; i++)
56+
{
57+
printf("%08x=%08x ", my_data[i], data[i] );
58+
if (!((i+1)%4)) printf("\n");
59+
}
60+
printf("\n");
61+
62+
delay(2000);
63+
}

0 commit comments

Comments
 (0)