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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 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 zcmeAS@N?(olHy`uVBq!ia0y~yU~FJuU{v5>V_;xBb!W&1vEE&Pk4mTh-|{ zx%gPRO|rdQ-TnTSG|TsUp6{u9W`15LO(tr0+1r!B%l+2M%F3So;W_K%i4zjMOJ5(f zez(K|^|Ak3OxazISi*G5<{i_&*CAl{o zV_LJ3AzSBw6jtV~#hV){-j}-Nf0vR@`5hs&w>G6(<5$;<;QgN;-?f|e@y@@8&zT*| z4MJO+_VwC^?&MPWQ}!c7;H3Mlx+5Z%@4lRG_{ylFeIY$XJ8aDlD`Vr&bqym7M2{QKK-Z@;U!y?34T``?Qn@2t(u zeLK(nvEGz(a&>Og*2x>&a$Wi-H|5=>Z_d};Svd`+l`#IPJFfn1SLdy~+CL|i7>{W* z7;+`_Fi9+CpoppSl4;4O)whmqzWeLPWLKu1rGKwKSZXbl@TUEJV2=W?u=cnAb)Vv= zs71axKf7HaS>%8OtAQJ1Pas3G$bpC;)*a>V<20?W>AijXw)gDWv$gMvpEt2cBs!l5ng?a(mwW zeSc?I+t>d3V*T#Vg$n_G7BX@@Js*GFI`)45|9{K*)wx>VxvndJe)r`hRd1_1-*c

jSwd>@&`>&sW-_CSrS82A}8{RvQ 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 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`.