Module for generating a pulse-width modulated output signal.
More...
|
typedef uint16_t | app_pwm_duty_t |
|
typedef void(* | app_pwm_callback_t )(uint32_t) |
| PWM callback that is executed when a PWM duty change has been completed. More...
|
|
|
enum | app_pwm_polarity_t {
APP_PWM_POLARITY_ACTIVE_LOW = 0,
APP_PWM_POLARITY_ACTIVE_HIGH = 1
} |
| Channel polarity.
|
|
Module for generating a pulse-width modulated output signal.
This module provides a PWM implementation using timers, GPIOTE, and PPI.
Resource usage:
- 2 PPI channels per instance + 2 PPI channels per PWM channel.
- 1 PPI group per instance.
- 1 GPIOTE channel per PWM channel.
For example, a PWM instance with two channels will consume 2 + 4 PPI channels, 1 PPI group, and 2 GPIOTE channels.
The maximum number of PWM channels per instance is 2.
#define APP_PWM_DEFAULT_CONFIG_1CH |
( |
|
period_in_us, |
|
|
|
pin |
|
) |
| |
Value:{ \
.pins = {pin, APP_PWM_NOPIN}, \
.pin_polarity = {APP_PWM_POLARITY_ACTIVE_LOW, APP_PWM_POLARITY_ACTIVE_LOW}, \
.num_of_channels = 1, \
.period_us = period_in_us \
}
PWM instance default configuration (1 channel).
#define APP_PWM_DEFAULT_CONFIG_2CH |
( |
|
period_in_us, |
|
|
|
pin0, |
|
|
|
pin1 |
|
) |
| |
Value:{ \
.pins = {pin0, pin1}, \
.pin_polarity = {APP_PWM_POLARITY_ACTIVE_LOW, APP_PWM_POLARITY_ACTIVE_LOW}, \
.num_of_channels = 2, \
.period_us = period_in_us \
}
PWM instance default configuration (2 channels).
#define APP_PWM_INSTANCE |
( |
|
name, |
|
|
|
num |
|
) |
| |
Value:
app_pwm_cb_t m_pwm_##name##_cb; \
\
.
p_cb = &m_pwm_##name##_cb, \
.p_timer = &m_pwm_##name##_timer, \
}
Macro for creating a PWM instance.
typedef void(* app_pwm_callback_t)(uint32_t) |
PWM callback that is executed when a PWM duty change has been completed.
- Parameters
-
[in] | pwm_id | PWM instance ID. |
bool app_pwm_busy_check |
( |
app_pwm_t const *const |
p_instance | ) |
|
Function for checking if the PWM instance is busy updating the duty cycle.
- Parameters
-
[in] | p_instance | PWM instance. |
- Return values
-
True | If the PWM instance is ready for duty cycle changes. |
False | If a change operation is in progress. |
app_pwm_duty_t app_pwm_channel_duty_get |
( |
app_pwm_t const *const |
p_instance, |
|
|
uint8_t |
channel |
|
) |
| |
Function for retrieving the PWM channel duty cycle in percents.
- Parameters
-
[in] | p_instance | PWM instance. |
[in] | channel | Channel number. |
- Returns
- Duty cycle value.
ret_code_t app_pwm_channel_duty_set |
( |
app_pwm_t const *const |
p_instance, |
|
|
uint8_t |
channel, |
|
|
app_pwm_duty_t |
duty |
|
) |
| |
Function for setting the PWM channel duty cycle in percents.
A duty cycle change requires one full PWM clock period to finish. If another change is attempted for any channel of given instance before the current change is complete, the new attempt will result in the error NRF_ERROR_BUSY.
- Parameters
-
[in] | p_instance | PWM instance. |
[in] | channel | Channel number. |
[in] | duty | Duty cycle (0 - 100). |
- Return values
-
NRF_SUCCESS | If the operation was successful. |
NRF_ERROR_BUSY | If the PWM is not ready yet. |
NRF_ERROR_INVALID_STATE | If the given instance was not initialized. |
uint16_t app_pwm_channel_duty_ticks_get |
( |
app_pwm_t const *const |
p_instance, |
|
|
uint8_t |
channel |
|
) |
| |
Function for retrieving the PWM channel duty cycle in ticks.
This function retrieves the real, currently set duty cycle in ticks. For one full PWM cycle the value might be different than the value set by the last app_pwm_channel_duty_ticks_set function call.
- Parameters
-
[in] | p_instance | PWM instance. |
[in] | channel | Channel number. |
- Returns
- Number of ticks set for selected channel.
ret_code_t app_pwm_channel_duty_ticks_set |
( |
app_pwm_t const *const |
p_instance, |
|
|
uint8_t |
channel, |
|
|
uint16_t |
ticks |
|
) |
| |
Function for setting PWM channel duty cycle in clock ticks.
- Note
- Duty cycle changes require one full PWM clock period to finish. Until that, the next change attempt (for any channel of given instance) will result in an NRF_ERROR_BUSY error.
- Parameters
-
[in] | p_instance | PWM instance. |
[in] | channel | Channel number. |
[in] | ticks | Number of PWM clock ticks. |
- Return values
-
NRF_SUCCESS | If the operation was successful. |
NRF_ERROR_BUSY | If PWM is not ready yet. |
NRF_ERROR_INVALID_STATE | If the given instance was not initialized. |
uint16_t app_pwm_cycle_ticks_get |
( |
app_pwm_t const *const |
p_instance | ) |
|
Function for returning the number of ticks in a whole cycle.
- Parameters
-
[in] | p_instance | PWM instance. |
- Returns
- Number of ticks that corresponds to 100% of the duty cycle.
void app_pwm_disable |
( |
app_pwm_t const *const |
p_instance | ) |
|
Function for disabling a PWM instance after initialization.
- Parameters
-
[in] | p_instance | PWM instance. |
void app_pwm_enable |
( |
app_pwm_t const *const |
p_instance | ) |
|
Function for enabling a PWM instance after initialization.
- Parameters
-
[in] | p_instance | PWM instance. |
Function for initializing a PWM instance.
- Parameters
-
[in] | p_instance | PWM instance. |
[in] | p_config | Initial configuration. |
[in] | p_ready_callback | Pointer to ready callback function (or NULL to disable). |
- Return values
-
NRF_SUCCESS | If initialization was successful. |
NRF_ERROR_NO_MEM | If there were not enough free resources. |
NRF_ERROR_INVALID_PARAM | If an invalid configuration structure was passed. |
NRF_ERROR_INVALID_STATE | If the timer/PWM is already in use or if initialization failed. |
Function for uninitializing a PWM instance and releasing the allocated resources.
- Parameters
-
[in] | p_instance | PWM instance. |
- Return values
-
NRF_SUCCESS | If uninitialization was successful. |
NRF_ERROR_INVALID_STATE | If the given instance was not initialized. |