no-OS
no_os_pwm.h
Go to the documentation of this file.
1 /***************************************************************************/
39 #ifndef _NO_OS_PWM_H_
40 #define _NO_OS_PWM_H_
41 
42 /******************************************************************************/
43 /***************************** Include Files **********************************/
44 /******************************************************************************/
45 #include <stdint.h>
46 #include <stdbool.h>
47 
48 /******************************************************************************/
49 /********************** Macros and Constants Definitions **********************/
50 /******************************************************************************/
51 
52 #define PWM_MAX_NUMBER 4
53 
54 /******************************************************************************/
55 /*************************** Types Declarations *******************************/
56 /******************************************************************************/
66 };
67 
74  uint32_t id;
76  uint32_t period_ns;
78  uint32_t duty_cycle_ns;
80  uint32_t phase_ns;
85  /* IRQ ID */
86  uint32_t irq_id;
88  void (*pwm_callback)(void *arg);
92  void *extra;
93 };
94 
101  void *mutex;
103  uint32_t id;
105  uint32_t period_ns;
107  uint32_t duty_cycle_ns;
109  uint32_t phase_ns;
113  bool enabled;
116  /* IRQ ID */
117  uint32_t irq_id;
119  void (*pwm_callback)(void* arg);
123  void *extra;
124 };
125 
133  int32_t (*pwm_ops_init)(struct no_os_pwm_desc **,
134  const struct no_os_pwm_init_param *);
136  int32_t (*pwm_ops_enable)(struct no_os_pwm_desc *);
138  int32_t (*pwm_ops_disable)(struct no_os_pwm_desc *);
140  int32_t (*pwm_ops_set_period)(struct no_os_pwm_desc *, uint32_t);
142  int32_t (*pwm_ops_get_period)(struct no_os_pwm_desc *, uint32_t *);
144  int32_t (*pwm_ops_set_duty_cycle)(struct no_os_pwm_desc *, uint32_t);
146  int32_t (*pwm_ops_get_duty_cycle)(struct no_os_pwm_desc *, uint32_t *);
148  int32_t (*pwm_ops_set_phase)(struct no_os_pwm_desc *, uint32_t);
150  int32_t (*pwm_ops_get_phase)(struct no_os_pwm_desc *, uint32_t *);
153  enum no_os_pwm_polarity);
156  enum no_os_pwm_polarity *);
158  int32_t(*pwm_ops_remove)(struct no_os_pwm_desc *);
159 };
160 
161 /******************************************************************************/
162 /************************ Functions Declarations ******************************/
163 /******************************************************************************/
164 /* Initialize the PWM generator device */
165 int32_t no_os_pwm_init(struct no_os_pwm_desc **desc,
166  const struct no_os_pwm_init_param *param);
167 
168 /* Free the resources used by the PWM generator device */
169 int32_t no_os_pwm_remove(struct no_os_pwm_desc *desc);
170 
171 /* Enable PWM generator device */
172 int32_t no_os_pwm_enable(struct no_os_pwm_desc *desc);
173 
174 /* Disable PWM generator device */
175 int32_t no_os_pwm_disable(struct no_os_pwm_desc *desc);
176 
177 /* Set period of PWM generator device */
178 int32_t no_os_pwm_set_period(struct no_os_pwm_desc *desc,
179  uint32_t period_ns);
180 
181 /* Get period of PWM generator device */
182 int32_t no_os_pwm_get_period(struct no_os_pwm_desc *desc,
183  uint32_t *period_ns);
184 
185 /* Set duty cycle of PWM generator device */
186 int32_t no_os_pwm_set_duty_cycle(struct no_os_pwm_desc *desc,
187  uint32_t duty_cycle_ns);
188 
189 /* Get period of PWM generator device */
190 int32_t no_os_pwm_get_duty_cycle(struct no_os_pwm_desc *desc,
191  uint32_t *duty_cycle_ns);
192 
193 /* Set the phase of PWM generator channel */
194 int32_t no_os_pwm_set_phase(struct no_os_pwm_desc *desc,
195  uint32_t phase_ns);
196 
197 /* Get the phase of PWM generator channel */
198 int32_t no_os_pwm_get_phase(struct no_os_pwm_desc *desc,
199  uint32_t *phase_ns);
200 
201 /* Set polarity of PWM generator device */
202 int32_t no_os_pwm_set_polarity(struct no_os_pwm_desc *desc,
204 
205 /* Set polarity of PWM generator device */
206 int32_t no_os_pwm_get_polarity(struct no_os_pwm_desc *desc,
208 
209 #endif // _NO_OS_PWM_H_
no_os_pwm_desc::mutex
void * mutex
Definition: no_os_pwm.h:101
no_os_gpio_init_param
Structure holding the parameters for GPIO initialization.
Definition: no_os_gpio.h:85
no_os_pwm_desc::duty_cycle_ns
uint32_t duty_cycle_ns
Definition: no_os_pwm.h:107
no_os_pwm_init_param
Structure containing the init parameters needed by the PWM generator.
Definition: no_os_pwm.h:72
no_os_pwm_platform_ops::pwm_ops_get_period
int32_t(* pwm_ops_get_period)(struct no_os_pwm_desc *, uint32_t *)
Definition: no_os_pwm.h:142
no_os_pwm_remove
int32_t no_os_pwm_remove(struct no_os_pwm_desc *desc)
Free the resources allocated by no_os_pwm_init().
Definition: no_os_pwm.c:85
no_os_pwm_desc::id
uint32_t id
Definition: no_os_pwm.h:103
no_os_pwm_platform_ops::pwm_ops_set_phase
int32_t(* pwm_ops_set_phase)(struct no_os_pwm_desc *, uint32_t)
Definition: no_os_pwm.h:148
no_os_pwm_platform_ops::pwm_ops_get_polarity
int32_t(* pwm_ops_get_polarity)(struct no_os_pwm_desc *, enum no_os_pwm_polarity *)
Definition: no_os_pwm.h:155
no_os_pwm_init_param::period_ns
uint32_t period_ns
Definition: no_os_pwm.h:76
no_os_pwm_set_polarity
int32_t no_os_pwm_set_polarity(struct no_os_pwm_desc *desc, enum no_os_pwm_polarity polarity)
Set the PWM polarity.
Definition: no_os_pwm.c:249
no_os_pwm_desc::phase_ns
uint32_t phase_ns
Definition: no_os_pwm.h:109
no_os_pwm_init_param::id
uint32_t id
Definition: no_os_pwm.h:74
no_os_pwm_polarity
no_os_pwm_polarity
Possible polarities of the PWM signal.
Definition: no_os_pwm.h:61
no_os_pwm_platform_ops::pwm_ops_get_phase
int32_t(* pwm_ops_get_phase)(struct no_os_pwm_desc *, uint32_t *)
Definition: no_os_pwm.h:150
no_os_pwm_set_period
int32_t no_os_pwm_set_period(struct no_os_pwm_desc *desc, uint32_t period_ns)
Set the PWM period value.
Definition: no_os_pwm.c:139
no_os_pwm_desc::period_ns
uint32_t period_ns
Definition: no_os_pwm.h:105
no_os_pwm_platform_ops::pwm_ops_remove
int32_t(* pwm_ops_remove)(struct no_os_pwm_desc *)
Definition: no_os_pwm.h:158
no_os_pwm_get_phase
int32_t no_os_pwm_get_phase(struct no_os_pwm_desc *desc, uint32_t *phase_ns)
Get the PWM phase value.
Definition: no_os_pwm.c:229
no_os_pwm_platform_ops::pwm_ops_get_duty_cycle
int32_t(* pwm_ops_get_duty_cycle)(struct no_os_pwm_desc *, uint32_t *)
Definition: no_os_pwm.h:146
no_os_pwm_get_period
int32_t no_os_pwm_get_period(struct no_os_pwm_desc *desc, uint32_t *period_ns)
Get the PWM period value.
Definition: no_os_pwm.c:157
no_os_pwm_desc::pwm_gpio
struct no_os_gpio_desc * pwm_gpio
Definition: no_os_pwm.h:115
no_os_pwm_enable
int32_t no_os_pwm_enable(struct no_os_pwm_desc *desc)
Enable PWM signal generation.
Definition: no_os_pwm.c:104
no_os_pwm_init_param::irq_id
uint32_t irq_id
Definition: no_os_pwm.h:86
no_os_pwm_init_param::polarity
enum no_os_pwm_polarity polarity
Definition: no_os_pwm.h:82
no_os_pwm_disable
int32_t no_os_pwm_disable(struct no_os_pwm_desc *desc)
Disable PWM signal generation.
Definition: no_os_pwm.c:121
no_os_pwm_set_phase
int32_t no_os_pwm_set_phase(struct no_os_pwm_desc *desc, uint32_t phase_ns)
Set the PWM phase value.
Definition: no_os_pwm.c:211
no_os_pwm_platform_ops::pwm_ops_init
int32_t(* pwm_ops_init)(struct no_os_pwm_desc **, const struct no_os_pwm_init_param *)
Definition: no_os_pwm.h:133
no_os_pwm_platform_ops::pwm_ops_set_polarity
int32_t(* pwm_ops_set_polarity)(struct no_os_pwm_desc *, enum no_os_pwm_polarity)
Definition: no_os_pwm.h:152
no_os_pwm_desc::polarity
enum no_os_pwm_polarity polarity
Definition: no_os_pwm.h:111
no_os_pwm_desc::irq_id
uint32_t irq_id
Definition: no_os_pwm.h:117
no_os_pwm_platform_ops::pwm_ops_set_period
int32_t(* pwm_ops_set_period)(struct no_os_pwm_desc *, uint32_t)
Definition: no_os_pwm.h:140
no_os_pwm_desc::enabled
bool enabled
Definition: no_os_pwm.h:113
no_os_pwm_init_param::extra
void * extra
Definition: no_os_pwm.h:92
no_os_pwm_get_polarity
int32_t no_os_pwm_get_polarity(struct no_os_pwm_desc *desc, enum no_os_pwm_polarity *polarity)
Get the PWM polarity.
Definition: no_os_pwm.c:269
no_os_gpio_desc
Structure holding the GPIO descriptor.
Definition: no_os_gpio.h:102
NO_OS_PWM_POLARITY_HIGH
@ NO_OS_PWM_POLARITY_HIGH
Definition: no_os_pwm.h:63
no_os_pwm_init_param::pwm_callback
void(* pwm_callback)(void *arg)
Definition: no_os_pwm.h:88
no_os_pwm_set_duty_cycle
int32_t no_os_pwm_set_duty_cycle(struct no_os_pwm_desc *desc, uint32_t duty_cycle_ns)
Set the PWM duty cycle.
Definition: no_os_pwm.c:175
no_os_pwm_desc
Structure representing an PWM generator device.
Definition: no_os_pwm.h:99
no_os_pwm_init_param::duty_cycle_ns
uint32_t duty_cycle_ns
Definition: no_os_pwm.h:78
no_os_pwm_init
int32_t no_os_pwm_init(struct no_os_pwm_desc **desc, const struct no_os_pwm_init_param *param)
Initialize the PWM peripheral.
Definition: no_os_pwm.c:57
no_os_pwm_platform_ops
Structure holding PWM function pointers that point to the platform specific function.
Definition: no_os_pwm.h:131
no_os_pwm_desc::extra
void * extra
Definition: no_os_pwm.h:123
no_os_pwm_desc::pwm_callback
void(* pwm_callback)(void *arg)
Definition: no_os_pwm.h:119
no_os_pwm_init_param::pwm_gpio
struct no_os_gpio_init_param * pwm_gpio
Definition: no_os_pwm.h:84
no_os_pwm_platform_ops::pwm_ops_enable
int32_t(* pwm_ops_enable)(struct no_os_pwm_desc *)
Definition: no_os_pwm.h:136
no_os_pwm_platform_ops::pwm_ops_disable
int32_t(* pwm_ops_disable)(struct no_os_pwm_desc *)
Definition: no_os_pwm.h:138
no_os_pwm_platform_ops::pwm_ops_set_duty_cycle
int32_t(* pwm_ops_set_duty_cycle)(struct no_os_pwm_desc *, uint32_t)
Definition: no_os_pwm.h:144
no_os_pwm_get_duty_cycle
int32_t no_os_pwm_get_duty_cycle(struct no_os_pwm_desc *desc, uint32_t *duty_cycle_ns)
Get the PWM duty cycle.
Definition: no_os_pwm.c:193
no_os_pwm_init_param::phase_ns
uint32_t phase_ns
Definition: no_os_pwm.h:80
no_os_pwm_init_param::platform_ops
const struct no_os_pwm_platform_ops * platform_ops
Definition: no_os_pwm.h:90
NO_OS_PWM_POLARITY_LOW
@ NO_OS_PWM_POLARITY_LOW
Definition: no_os_pwm.h:65
no_os_pwm_desc::platform_ops
const struct no_os_pwm_platform_ops * platform_ops
Definition: no_os_pwm.h:121