From 2b010d4bc92b2f72724f3eb7e815d25cb899eea4 Mon Sep 17 00:00:00 2001 From: krzychb Date: Thu, 23 Nov 2017 23:53:06 +0100 Subject: [PATCH] RMT transmitter and receiver overview pictures --- docs/_static/rmt-carrier.png | Bin 0 -> 4491 bytes docs/_static/rmt-waveform-modulated.png | Bin 0 -> 4250 bytes docs/_static/rmt-waveform.png | Bin 0 -> 3270 bytes docs/api-reference/peripherals/rmt.rst | 83 +++++++++++++++++++++++- 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 docs/_static/rmt-carrier.png create mode 100644 docs/_static/rmt-waveform-modulated.png create mode 100644 docs/_static/rmt-waveform.png diff --git a/docs/_static/rmt-carrier.png b/docs/_static/rmt-carrier.png new file mode 100644 index 0000000000000000000000000000000000000000..41d1c8d8d0b168261e0f9514c444a87d7c1aa0a1 GIT binary patch literal 4491 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 PSAZk#K5mt+VJZIviM`tb literal 0 HcmV?d00001 diff --git a/docs/_static/rmt-waveform-modulated.png b/docs/_static/rmt-waveform-modulated.png new file mode 100644 index 0000000000000000000000000000000000000000..448b73758c35b285581ff6a1b57001225fdb814d GIT binary patch literal 4250 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 L?>5R8hyL<+yx(#S literal 0 HcmV?d00001 diff --git a/docs/api-reference/peripherals/rmt.rst b/docs/api-reference/peripherals/rmt.rst index 2f7787c207..77c3e06956 100644 --- a/docs/api-reference/peripherals/rmt.rst +++ b/docs/api-reference/peripherals/rmt.rst @@ -3,6 +3,87 @@ RMT The RMT (Remote Control) module driver can be used to send and receive infrared remote control signals. Due to flexibility of RMT module, the driver can also be used to generate or receive many other types of signals. +The signal, that consists of a series of pulses, is generated by RMT's transmitter basing on a list of values. The values define the pulse duration and a binary level, see below. The transmitter can also provide a carrier and modulate it with provided pulses. + +.. blockdiag:: + :scale: 100 + :caption: RMT Transmitter Overview + :align: center + + blockdiag rmt_tx { + + node_width = 80; + node_height = 60; + default_group_color = lightgrey; + + a -> b -> c -> d; + e -> f -> g -- h; + d -> o [label=GPIO]; + h -> d [folded]; + + a [style=none, width=100, label="{11,high,7,low},\n{5,high,5,low},\n..."] + b [label="Waveform\nGenerator"] + c [style=none, label="", background="_static/rmt-waveform.png"] + d [shape=beginpoint, label="mod"] + e [style=none, width=60, height=40, label="Carrier\nenable"] + f [label="Carrier\nGenerator"] + g [style=none, label="", background="_static/rmt-carrier.png"] + h [shape=none] + o [style=none, label="", background="_static/rmt-waveform-modulated.png"] + + group { + label = Input + a,e; + } + group { + label = "RMT Transmitter" + b,f,c,g,d,h; + } + group { + label = Output + o; + } + } + +Reverse operation is performed by the receiver, where a series of pulses is decoded into a list of values containing the pulse duration and binary level. A filter may be applied to remove high frequency noise from the input signal. + +.. blockdiag:: + :scale: 90 + :caption: RMT Receiver Overview + :align: center + + blockdiag rmt_rx { + + node_width = 80; + node_height = 60; + default_group_color = lightgrey; + + a -> b [label=GPIO]; + b -> c -> d; + e -- f; + f -> b [folded]; + + a [style=none, label="", background="_static/rmt-waveform.png"] + b [label=Filter] + c [label="Edge\nDetect"] + d [style=none, width=100, label="{11,high,7,low},\n{5,high,5,low},\n..."] + e [style=none, width=60, height=40, label="Filter\nenable"] + f [shape=none, label=""] + + group { + label = Input + a,e; + } + group { + label = "RMT Receiver" + b,c; + } + group { + label = Output + d; + } + } + There couple of typical steps to setup and operate the RMT and they are discussed in the following sections: 1. `Configure Driver`_ @@ -155,9 +236,9 @@ Registering of an interrupt handler for the RMT controller is done be calling :c The RMT controller triggers interrupts on four specific events describes below. To enable interrupts on these events, the following functions are provided: * RMT's receiver has finished receiving a signal - :cpp:func:`rmt_set_rx_intr_en` -* Ownership to the RMT memory block has been violated - :cpp:func:`rmt_set_err_intr_en` * RMT's transmitter has finished transmitting the signal - :cpp:func:`rmt_set_tx_intr_en` * The number of events the transmitter has sent matches a threshold value :cpp:func:`rmt_set_tx_thr_intr_en` +* Ownership to the RMT memory block has been violated - :cpp:func:`rmt_set_err_intr_en` Setting or clearing an interrupt enable mask for specific channels and events may be also done by calling :cpp:func:`rmt_set_intr_enable_mask` or :cpp:func:`rmt_clr_intr_enable_mask`.