Zephyr API Documentation
2.7.0-rc2
A Scalable Open Source RTOS
|
PWM Interface. More...
Data Structures | |
struct | pwm_driver_api |
PWM driver API definition. More... | |
Typedefs | |
typedef uint8_t | pwm_flags_t |
Provides a type to hold PWM configuration flags. More... | |
typedef int(* | pwm_pin_set_t) (const struct device *dev, uint32_t pwm, uint32_t period_cycles, uint32_t pulse_cycles, pwm_flags_t flags) |
Callback API upon setting the pin See pwm_pin_set_cycles() for argument description. More... | |
typedef void(* | pwm_capture_callback_handler_t) (const struct device *dev, uint32_t pwm, uint32_t period_cycles, uint32_t pulse_cycles, int status, void *user_data) |
PWM capture callback handler function signature. More... | |
typedef int(* | pwm_pin_configure_capture_t) (const struct device *dev, uint32_t pwm, pwm_flags_t flags, pwm_capture_callback_handler_t cb, void *user_data) |
Callback API upon configuring PWM pin capture See pwm_pin_configure_capture() for argument description. More... | |
typedef int(* | pwm_pin_enable_capture_t) (const struct device *dev, uint32_t pwm) |
Callback API upon enabling PWM pin capture See pwm_pin_enable_capture() for argument description. More... | |
typedef int(* | pwm_pin_disable_capture_t) (const struct device *dev, uint32_t pwm) |
Callback API upon disabling PWM pin capture See pwm_pin_disable_capture() for argument description. More... | |
typedef int(* | pwm_get_cycles_per_sec_t) (const struct device *dev, uint32_t pwm, uint64_t *cycles) |
Callback API upon getting cycles per second See pwm_get_cycles_per_sec() for argument description. More... | |
Functions | |
int | pwm_pin_set_cycles (const struct device *dev, uint32_t pwm, uint32_t period, uint32_t pulse, pwm_flags_t flags) |
Set the period and pulse width for a single PWM output. More... | |
static int | pwm_pin_configure_capture (const struct device *dev, uint32_t pwm, pwm_flags_t flags, pwm_capture_callback_handler_t cb, void *user_data) |
Configure PWM period/pulse width capture for a single PWM input. More... | |
int | pwm_pin_enable_capture (const struct device *dev, uint32_t pwm) |
Enable PWM period/pulse width capture for a single PWM input. More... | |
int | pwm_pin_disable_capture (const struct device *dev, uint32_t pwm) |
Disable PWM period/pulse width capture for a single PWM input. More... | |
int | pwm_pin_capture_cycles (const struct device *dev, uint32_t pwm, pwm_flags_t flags, uint32_t *period, uint32_t *pulse, k_timeout_t timeout) |
Capture a single PWM period/pulse width in clock cycles for a single PWM input. More... | |
int | pwm_get_cycles_per_sec (const struct device *dev, uint32_t pwm, uint64_t *cycles) |
Get the clock rate (cycles per second) for a single PWM output. More... | |
static int | pwm_pin_set_usec (const struct device *dev, uint32_t pwm, uint32_t period, uint32_t pulse, pwm_flags_t flags) |
Set the period and pulse width for a single PWM output. More... | |
static int | pwm_pin_set_nsec (const struct device *dev, uint32_t pwm, uint32_t period, uint32_t pulse, pwm_flags_t flags) |
Set the period and pulse width for a single PWM output. More... | |
static int | pwm_pin_cycles_to_usec (const struct device *dev, uint32_t pwm, uint32_t cycles, uint64_t *usec) |
Convert from PWM cycles to microseconds. More... | |
static int | pwm_pin_cycles_to_nsec (const struct device *dev, uint32_t pwm, uint32_t cycles, uint64_t *nsec) |
Convert from PWM cycles to nanoseconds. More... | |
static int | pwm_pin_capture_usec (const struct device *dev, uint32_t pwm, pwm_flags_t flags, uint64_t *period, uint64_t *pulse, k_timeout_t timeout) |
Capture a single PWM period/pulse width in microseconds for a single PWM input. More... | |
static int | pwm_pin_capture_nsec (const struct device *dev, uint32_t pwm, pwm_flags_t flags, uint64_t *period, uint64_t *pulse, k_timeout_t timeout) |
Capture a single PWM period/pulse width in nanoseconds for a single PWM input. More... | |
PWM capture configuration flags | |
#define | PWM_CAPTURE_TYPE_PERIOD (1U << PWM_CAPTURE_TYPE_SHIFT) |
#define | PWM_CAPTURE_TYPE_PULSE (2U << PWM_CAPTURE_TYPE_SHIFT) |
#define | PWM_CAPTURE_TYPE_BOTH |
#define | PWM_CAPTURE_MODE_SINGLE (0U << PWM_CAPTURE_MODE_SHIFT) |
#define | PWM_CAPTURE_MODE_CONTINUOUS (1U << PWM_CAPTURE_MODE_SHIFT) |
PWM Interface.
#define PWM_CAPTURE_MODE_CONTINUOUS (1U << PWM_CAPTURE_MODE_SHIFT) |
#include <include/drivers/pwm.h>
PWM pin capture captures period/pulse width continuously.
#define PWM_CAPTURE_MODE_SINGLE (0U << PWM_CAPTURE_MODE_SHIFT) |
#include <include/drivers/pwm.h>
PWM pin capture captures a single period/pulse width.
#define PWM_CAPTURE_TYPE_BOTH |
#include <include/drivers/pwm.h>
PWM pin capture captures both period and pulse width.
#define PWM_CAPTURE_TYPE_PERIOD (1U << PWM_CAPTURE_TYPE_SHIFT) |
#include <include/drivers/pwm.h>
PWM pin capture captures period.
#define PWM_CAPTURE_TYPE_PULSE (2U << PWM_CAPTURE_TYPE_SHIFT) |
#include <include/drivers/pwm.h>
PWM pin capture captures pulse width.
pwm_capture_callback_handler_t |
#include <include/drivers/pwm.h>
PWM capture callback handler function signature.
embed:rst:inline :kconfig:`CONFIG_PWM_CAPTURE`must be selected to enable PWM capture support.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
period_cycles | Captured PWM period width (in clock cycles). HW specific. |
pulse_cycles | Captured PWM pulse width (in clock cycles). HW specific. |
status | Status for the PWM capture (0 if no error, negative errno otherwise. See pwm_pin_capture_cycles() return value descriptions for details). |
user_data | User data passed to pwm_pin_configure_capture() |
typedef uint8_t pwm_flags_t |
#include <include/drivers/pwm.h>
Provides a type to hold PWM configuration flags.
pwm_get_cycles_per_sec_t |
#include <include/drivers/pwm.h>
Callback API upon getting cycles per second See pwm_get_cycles_per_sec() for argument description.
pwm_pin_configure_capture_t |
#include <include/drivers/pwm.h>
Callback API upon configuring PWM pin capture See pwm_pin_configure_capture() for argument description.
pwm_pin_disable_capture_t |
#include <include/drivers/pwm.h>
Callback API upon disabling PWM pin capture See pwm_pin_disable_capture() for argument description.
pwm_pin_enable_capture_t |
#include <include/drivers/pwm.h>
Callback API upon enabling PWM pin capture See pwm_pin_enable_capture() for argument description.
pwm_pin_set_t |
#include <include/drivers/pwm.h>
Callback API upon setting the pin See pwm_pin_set_cycles() for argument description.
#include <include/drivers/pwm.h>
Get the clock rate (cycles per second) for a single PWM output.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
cycles | Pointer to the memory to store clock rate (cycles per sec). HW specific. |
0 | If successful. |
Negative | errno code if failure. |
int pwm_pin_capture_cycles | ( | const struct device * | dev, |
uint32_t | pwm, | ||
pwm_flags_t | flags, | ||
uint32_t * | period, | ||
uint32_t * | pulse, | ||
k_timeout_t | timeout | ||
) |
#include <include/drivers/pwm.h>
Capture a single PWM period/pulse width in clock cycles for a single PWM input.
This API function wraps calls to pwm_pin_configure_capture(), pwm_pin_enable_capture(), and pwm_pin_disable_capture() and passes the capture result to the caller. The function is blocking until either the PWM capture is completed or a timeout occurs.
embed:rst:inline :kconfig:`CONFIG_PWM_CAPTURE`must be selected for this function to be available.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
flags | PWM capture flags. |
period | Pointer to the memory to store the captured PWM period width (in clock cycles). HW specific. |
pulse | Pointer to the memory to store the captured PWM pulse width (in clock cycles). HW specific. |
timeout | Waiting period for the capture to complete. |
0 | If successful. |
-EBUSY | PWM capture already in progress. |
-EAGAIN | Waiting period timed out. |
-EIO | IO error while capturing. |
-ERANGE | If result is too large. |
|
inlinestatic |
#include <include/drivers/pwm.h>
Capture a single PWM period/pulse width in nanoseconds for a single PWM input.
This API function wraps calls to pwm_pin_capture_cycles() and pwm_pin_cycles_to_nsec() and passes the capture result to the caller. The function is blocking until either the PWM capture is completed or a timeout occurs.
embed:rst:inline :kconfig:`CONFIG_PWM_CAPTURE`must be selected for this function to be available.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
flags | PWM capture flags. |
period | Pointer to the memory to store the captured PWM period width (in nsec). |
pulse | Pointer to the memory to store the captured PWM pulse width (in nsec). |
timeout | Waiting period for the capture to complete. |
0 | If successful. |
-EBUSY | PWM capture already in progress. |
-EAGAIN | Waiting period timed out. |
-EIO | IO error while capturing. |
-ERANGE | If result is too large. |
|
inlinestatic |
#include <include/drivers/pwm.h>
Capture a single PWM period/pulse width in microseconds for a single PWM input.
This API function wraps calls to pwm_pin_capture_cycles() and pwm_pin_cycles_to_usec() and passes the capture result to the caller. The function is blocking until either the PWM capture is completed or a timeout occurs.
embed:rst:inline :kconfig:`CONFIG_PWM_CAPTURE`must be selected for this function to be available.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
flags | PWM capture flags. |
period | Pointer to the memory to store the captured PWM period width (in usec). |
pulse | Pointer to the memory to store the captured PWM pulse width (in usec). |
timeout | Waiting period for the capture to complete. |
0 | If successful. |
-EBUSY | PWM capture already in progress. |
-EAGAIN | Waiting period timed out. |
-EIO | IO error while capturing. |
-ERANGE | If result is too large. |
|
inlinestatic |
#include <include/drivers/pwm.h>
Configure PWM period/pulse width capture for a single PWM input.
After configuring PWM capture using this function, the capture can be enabled/disabled using pwm_pin_enable_capture() and pwm_pin_disable_capture().
embed:rst:inline :kconfig:`CONFIG_PWM_CAPTURE`must be selected for this function to be available.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
flags | PWM capture flags |
cb | Application callback handler function to be called upon capture |
user_data | User data to pass to the application callback handler function |
-EINVAL | if invalid function parameters were given |
-ENOSYS | if PWM capture is not supported or the given flags are not supported |
-EIO | if IO error occurred while configuring |
-EBUSY | if PWM capture is already in progress |
|
inlinestatic |
#include <include/drivers/pwm.h>
Convert from PWM cycles to nanoseconds.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
cycles | Cycles to be converted. |
nsec | Pointer to the memory to store the calculated nsec. |
0 | If successful. |
-EIO | If cycles per second cannot be determined. |
-ERANGE | If result is too large. |
|
inlinestatic |
#include <include/drivers/pwm.h>
Convert from PWM cycles to microseconds.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
cycles | Cycles to be converted. |
usec | Pointer to the memory to store calculated usec. |
0 | If successful. |
-EIO | If cycles per second cannot be determined. |
-ERANGE | If result is too large. |
#include <include/drivers/pwm.h>
Disable PWM period/pulse width capture for a single PWM input.
embed:rst:inline :kconfig:`CONFIG_PWM_CAPTURE`must be selected for this function to be available.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
0 | If successful. |
-EINVAL | if invalid function parameters were given |
-ENOSYS | if PWM capture is not supported |
-EIO | if IO error occurred while disabling PWM capture |
#include <include/drivers/pwm.h>
Enable PWM period/pulse width capture for a single PWM input.
The PWM pin must be configured using pwm_pin_configure_capture() prior to calling this function.
embed:rst:inline :kconfig:`CONFIG_PWM_CAPTURE`must be selected for this function to be available.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
0 | If successful. |
-EINVAL | if invalid function parameters were given |
-ENOSYS | if PWM capture is not supported |
-EIO | if IO error occurred while enabling PWM capture |
-EBUSY | if PWM capture is already in progress |
int pwm_pin_set_cycles | ( | const struct device * | dev, |
uint32_t | pwm, | ||
uint32_t | period, | ||
uint32_t | pulse, | ||
pwm_flags_t | flags | ||
) |
#include <include/drivers/pwm.h>
Set the period and pulse width for a single PWM output.
The PWM period and pulse width will synchronously be set to the new values without glitches in the PWM signal, but the call will not block for the change to take effect.
Passing 0 as pulse
will cause the pin to be driven to a constant inactive level. Passing a non-zero pulse
equal to period
will cause the pin to be driven to a constant active level.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
period | Period (in clock cycle) set to the PWM. HW specific. |
pulse | Pulse width (in clock cycle) set to the PWM. HW specific. |
flags | Flags for pin configuration (polarity). |
0 | If successful. |
Negative | errno code if failure. |
|
inlinestatic |
#include <include/drivers/pwm.h>
Set the period and pulse width for a single PWM output.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
period | Period (in nanoseconds) set to the PWM. |
pulse | Pulse width (in nanoseconds) set to the PWM. |
flags | Flags for pin configuration (polarity). |
0 | If successful. |
Negative | errno code if failure. |
|
inlinestatic |
#include <include/drivers/pwm.h>
Set the period and pulse width for a single PWM output.
dev | Pointer to the device structure for the driver instance. |
pwm | PWM pin. |
period | Period (in microseconds) set to the PWM. |
pulse | Pulse width (in microseconds) set to the PWM. |
flags | Flags for pin configuration (polarity). |
0 | If successful. |
Negative | errno code if failure. |