Merge branch 'refactor/mcpwm_rcc_atomic' into 'master'

MCPWM: add RCC low level functions

Closes IDF-7731, IDF-7722, IDF-7716, IDF-7738, and IDF-7713

See merge request espressif/esp-idf!25959
This commit is contained in:
morris
2023-09-16 01:04:54 +08:00
16 changed files with 317 additions and 59 deletions
+12 -1
View File
@@ -111,6 +111,10 @@ MCPWM 比较器
反之,调用 :cpp:func:`mcpwm_del_comparator` 函数将释放已分配的比较器。
.. only:: SOC_MCPWM_SUPPORT_EVENT_COMPARATOR
MCPWM 中还有另外一种比较器 —— “事件比较器”,它不能直接控制 PWM 的输出,只能用来产生 EMT 子系统中使用到的事件。事件比较器能够设置的阈值也是可配的。调用 :cpp:func:`mcpwm_new_event_comparator` 函数可以申请一个事件比较器,该函数返回的句柄类型和 :cpp:func:`mcpwm_new_comparator` 函数一样,但是需要的配置结构体是不同的。事件比较器的配置位于 :cpp:type:`mcpwm_event_comparator_config_t`。更多相关内容请参阅 :ref:`mcpwm-etm-event-and-task`
MCPWM 生成器
~~~~~~~~~~~~~~~~
@@ -187,7 +191,7 @@ MCPWM 组有一个专用定时器,用于捕获特定事件发生时的时间
- :cpp:member:`mcpwm_capture_timer_config_t::clk_src` 设置捕获定时器的时钟源。
- :cpp:member:`mcpwm_capture_timer_config_t::resolution_hz` 设置捕获定时器的预期分辨率。内部驱动将根据时钟源和分辨率设置合适的分频器。设置为 ``0`` 时,驱动会自己选取一个适当的分辨率,后续你可以通过 :cpp:func:`mcpwm_capture_timer_get_resolution` 查看当前定时器的分辨率。
.. only:: not SOC_MCPWM_CAPTURE_CLK_FROM_GROUP
.. only:: not SOC_MCPWM_CAPTURE_CLK_FROM_GROUP
.. note::
@@ -279,6 +283,12 @@ MCPWM 比较器可以在定时器计数器等于比较值时发送通知。若
此函数会延迟安装 MCPWM 比较器的中断服务。中断服务只能通过 :cpp:type:`mcpwm_del_comparator` 移除。
.. only:: SOC_MCPWM_SUPPORT_EVENT_COMPARATOR
.. note::
对于事件比较器,你无法通过该函数来注册回调函数,因为事件比较器触发产生任何中断事件。
设置比较值
~~~~~~~~~~~~~~~~~
@@ -1026,6 +1036,7 @@ API Reference
.. include-build-file:: inc/mcpwm_fault.inc
.. include-build-file:: inc/mcpwm_sync.inc
.. include-build-file:: inc/mcpwm_cap.inc
.. include-build-file:: inc/mcpwm_etm.inc
.. include-build-file:: inc/components/driver/mcpwm/include/driver/mcpwm_types.inc
.. include-build-file:: inc/components/hal/include/hal/mcpwm_types.inc
@@ -27,7 +27,7 @@ PCNT 的功能从以下几个方面进行说明:
- :ref:`pcnt-watch-points` - 说明如何配置观察点,即当计数达到某个数值时,命令 PCNT 单元触发某个事件。
- :ref:`pcnt-register-event-callbacks` - 说明如何将您的代码挂载到观察点事件的回调函数上。
- :ref:`pcnt-set-glitch-filter` - 说明如何使能毛刺滤波器并设置其时序参数。
:SOC_PCNT_SUPPORT_CLEAR_SIGNAL: - :ref:`pcnt-set-clear-signal` - 说明如何使能清零信号并设置其参数。
:SOC_PCNT_SUPPORT_CLEAR_SIGNAL: - :ref:`pcnt-set-clear-signal` - 说明如何使能外部清零信号并设置其参数。
- :ref:`pcnt-enable-disable-unit` - 说明如何使能和关闭 PCNT 单元。
- :ref:`pcnt-unit-io-control` - 说明 PCNT 单元的 IO 控制功能,例如使能毛刺滤波器,开启和停用 PCNT 单元,获取和清除计数。
- :ref:`pcnt-power-management` - 说明哪些功能会阻止芯片进入低功耗模式。
@@ -205,16 +205,16 @@ PCNT 单元的滤波器可滤除信号中的短时毛刺,:cpp:type:`pcnt_glitc
.. _pcnt-set-clear-signal:
设置清零信号
使用外部清零信号
^^^^^^^^^^^^^^^^
PCNT 单元的可以接收来自 GPIO 的清零信号,:cpp:type:`pcnt_clear_signal_config_t` 中列出了清零信号的配置参数:
- :cpp:member:`pcnt_clear_signal_config_t::zero_input_gpio_num` 用于指定 **清零** 信号对应的 GPIO 编号。默认有效电平为高,使能下拉输入。
- :cpp:member:`pcnt_clear_signal_config_t::invert_zero_input` 用于确定信号在输入 PCNT 之前是否需要被翻转,信号翻转由 GPIO 矩阵 (不是 PCNT 单元) 执行。翻转时使能上拉输入。
- :cpp:member:`pcnt_clear_signal_config_t::io_loop_back` 仅用于调试,它可以使能 GPIO 的输入和输出路径。这样,就可以通过调用位于同一 GPIO 上的函数 :cpp:func:`gpio_set_level` 来模拟脉冲清零信号。
- :cpp:member:`pcnt_clear_signal_config_t::clear_signal_gpio_num` 用于指定 **清零** 信号对应的 GPIO 编号。默认有效电平为高,使能下拉输入。
- :cpp:member:`pcnt_clear_signal_config_t::invert_clear_signal` 用于确定信号在输入 PCNT 之前是否需要被翻转,信号翻转由 GPIO 矩阵 (不是 PCNT 单元) 执行。驱动会使能上拉输入,以确保信号在未连接时保持高电平
- :cpp:member:`pcnt_clear_signal_config_t::io_loop_back` 仅用于调试,它可以使能 GPIO 的输入和输出路径。这样,就可以通过 :cpp:func:`gpio_set_level` 函数来模拟外部输入的清零信号。
该信号作用与调用 :cpp:func:`pcnt_unit_clear_count` 相同,但不受软件延迟的限制,适用于对延迟要求较高的场合
输入信号作用与调用 :cpp:func:`pcnt_unit_clear_count` 函数相同,但不受软件延迟的限制,适用于需要低延迟的场合。请注意,该信号的翻转频率不能太高
.. code:: c