1 #ifndef SPWM_H_INCLUDED
2 #define SPWM_H_INCLUDED
43 #include <util/atomic.h>
44 #include "spwm_config.h"
78 #ifndef SPWM_OUTPUTS_ALL
79 #define SPWM_OUTPUTS_ALL (EPPL_NP, 0, 0)
80 #warning No SPWM_OUTPUTS_ALL definition found. PWM would not be generated.
90 #define SPWM_TOPCNT 255
91 #warning No SPWM_TOPCNT definition found. Using default value.
107 #define SPWM_PIN_SC(pin, off, on) EPPL_SC(pin, off)
116 #define SPWM_PIN_SC_GENERATE(n, arg) SPWM_PIN_SC arg
124 #define SPWM_PIN_HOTPIN(pin, off, on) EPPL_SR(pin, off, on)
133 #define SPWM_PIN_HOTPINS_GENERATE(n, arg) SPWM_PIN_HOTPIN arg
140 #define SPWM_PIN_ONRESET(pin, off, on) \
142 eppl_reinitFromISR(EPPL_SR(pin, off, on)); \
151 #define SPWM_PIN_ONRESET_GENERATE(n, arg) SPWM_PIN_ONRESET arg
159 #define SPWM_PIN_ONTICK(pin, off, on) \
160 if(spwm_cnt >= *pval++) { \
161 eppl_reinitFromISR(EPPL_SR(pin, on, off)); \
170 #define SPWM_PIN_ONTICK_GENERATE(n, arg) SPWM_PIN_ONTICK arg
187 #define SPWM_PINCONFIG EPPL_PROCESSEVERYARG(SPWM_PIN_SC_GENERATE, com, SPWM_OUTPUTS_ALL)
195 #define SPWM_HOTPINS EPPL_PROCESSEVERYARG(SPWM_PIN_HOTPINS_GENERATE, com, SPWM_OUTPUTS_ALL)
204 #if SPWM_TOPCNT > UINT32_MAX
205 #error SPWM_TOPCNT out of supported range
206 #elif SPWM_TOPCNT > UINT16_MAX
207 typedef uint32_t spwm_val_T;
208 #elif SPWM_TOPCNT > UINT8_MAX
209 typedef uint16_t spwm_val_T;
211 typedef uint8_t spwm_val_T;
244 static inline void spwm_set(uint8_t ch, spwm_val_T val)
248 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)