9 #include <avr/interrupt.h>
10 #include "../hardware.h"
21 #ifdef SOFTPWM_ENABLED
22 # define SYSTICK_ENABLED
24 # if SPWM_COUNT > SPWM_MAX
25 # error "You have defined too many software PWM outputs"
34 #ifdef SYSTICK_ENABLED
37 static volatile uint16_t g_systicks = 0;
40 static volatile uint8_t g_ticklet = 0;
62 TIMSK |= (1 << TOIE1);
85 uint16_t now = g_systicks;
87 return now + (65535 - reference);
88 return now - reference;
97 #ifdef SOFTPWM_ENABLED
109 for(uint8_t index=0; index<
SPWM_COUNT; index++)
142 g_pwmout[pwm] = value;
155 return g_pwmout[pwm];
166 #if defined(SOFTPWM_ENABLED) || defined(SYSTICK_ENABLED)
173 #ifdef SOFTPWM_ENABLED
176 if((g_pwmout[0]>0)&&(g_ticklet<=g_pwmout[0]))
182 if((g_pwmout[1]!=0)&&(g_ticklet<=g_pwmout[1]))
188 if((g_pwmout[2]!=0)&&(g_ticklet<=g_pwmout[2]))
194 if((g_pwmout[3]!=0)&&(g_ticklet<=g_pwmout[3]))
void spwmOut(SPWM pwm, uint8_t value)
uint16_t ticksElapsed(uint16_t reference)
uint8_t spwmValue(SPWM pwm)