feat(rmt): support calling rmt_receive in ISR callback
This commit is contained in:
@@ -550,7 +550,9 @@ There is a Kconfig option :ref:`CONFIG_RMT_ISR_IRAM_SAFE` that has the following
|
||||
2. Place all functions used by the ISR into IRAM [2]_
|
||||
3. Place the driver object into DRAM in case it is mapped to PSRAM by accident
|
||||
|
||||
This Kconfig option allows the interrupt to run while the cache is disabled but comes at the cost of increased IRAM consumption.
|
||||
This Kconfig option allows the interrupt handler to run while the cache is disabled but comes at the cost of increased IRAM consumption.
|
||||
|
||||
Another Kconfig option :ref:`CONFIG_RMT_RECV_FUNC_IN_IRAM` can place :cpp:func:`rmt_receive` into the IRAM as well. So that the receive function can be used even when the flash cache is disabled.
|
||||
|
||||
.. _rmt-thread-safety:
|
||||
|
||||
@@ -560,6 +562,10 @@ Thread Safety
|
||||
The factory function :cpp:func:`rmt_new_tx_channel`, :cpp:func:`rmt_new_rx_channel` and :cpp:func:`rmt_new_sync_manager` are guaranteed to be thread-safe by the driver, which means, user can call them from different RTOS tasks without protection by extra locks.
|
||||
Other functions that take the :cpp:type:`rmt_channel_handle_t` and :cpp:type:`rmt_sync_manager_handle_t` as the first positional parameter, are not thread-safe. which means the user should avoid calling them from multiple tasks.
|
||||
|
||||
The following functions are allowed to use under ISR context as well.
|
||||
|
||||
- :cpp:func:`rmt_receive`
|
||||
|
||||
.. _rmt-kconfig-options:
|
||||
|
||||
Kconfig Options
|
||||
@@ -567,6 +573,7 @@ Kconfig Options
|
||||
|
||||
- :ref:`CONFIG_RMT_ISR_IRAM_SAFE` controls whether the default ISR handler can work when cache is disabled, see also :ref:`rmt-iram-safe` for more information.
|
||||
- :ref:`CONFIG_RMT_ENABLE_DEBUG_LOG` is used to enable the debug log at the cost of increased firmware binary size.
|
||||
- :ref:`CONFIG_RMT_RECV_FUNC_IN_IRAM` controls where to place the RMT receive function (IRAM or Flash), see :ref:`rmt-iram-safe` for more information.
|
||||
|
||||
Application Examples
|
||||
--------------------
|
||||
|
||||
@@ -552,6 +552,8 @@ IRAM 安全
|
||||
|
||||
启用该选项可以保证 cache 禁用时的中断运行,但会相应增加 IRAM 占用。
|
||||
|
||||
另外一个 Kconfig 选项 :ref:`CONFIG_RMT_RECV_FUNC_IN_IRAM` 可以将 :cpp:func:`rmt_receive` 函数放进内部的 IRAM 中,从而当 flash cache 被关闭的时候,这个函数也能够被使用。
|
||||
|
||||
.. _rmt-thread-safety:
|
||||
|
||||
线程安全
|
||||
@@ -560,6 +562,10 @@ IRAM 安全
|
||||
RMT 驱动程序会确保工厂函数 :cpp:func:`rmt_new_tx_channel`、:cpp:func:`rmt_new_rx_channel` 和 :cpp:func:`rmt_new_sync_manager` 的线程安全。使用时,可以直接从不同的 RTOS 任务中调用此类函数,无需额外锁保护。
|
||||
其他以 :cpp:type:`rmt_channel_handle_t` 和 :cpp:type:`rmt_sync_manager_handle_t` 作为第一个位置参数的函数均非线程安全,在没有设置互斥锁保护的任务中,应避免从多个任务中调用这类函数。
|
||||
|
||||
以下函数允许在 ISR 上下文中使用:
|
||||
|
||||
- :cpp:func:`rmt_receive`
|
||||
|
||||
.. _rmt-kconfig-options:
|
||||
|
||||
Kconfig 选项
|
||||
@@ -567,6 +573,7 @@ Kconfig 选项
|
||||
|
||||
- :ref:`CONFIG_RMT_ISR_IRAM_SAFE` 控制默认 ISR 处理程序能否在禁用 cache 的情况下工作。详情请参阅 :ref:`rmt-iram-safe`。
|
||||
- :ref:`CONFIG_RMT_ENABLE_DEBUG_LOG` 用于启用调试日志输出,启用此选项将增加固件的二进制文件大小。
|
||||
- :ref:`CONFIG_RMT_RECV_FUNC_IN_IRAM` 用于控制 RMT 接收函数被链接到系统内存的哪个位置(IRAM 还是 Flash)。详情请参阅 :ref:`rmt-iram-safe`。
|
||||
|
||||
应用示例
|
||||
--------------------
|
||||
|
||||
Reference in New Issue
Block a user