+void pwm_set(unsigned char n, uint16_t stride)
+{
+ if (((stride + (1 << PWM_STEP_SHIFT)) >> PWM_STEP_SHIFT) >= PWM_MAX)
+ stride = PWM_MAX << PWM_STEP_SHIFT;
+
+ pwm[n] = stride;
+ pwm_update_hw(n);
+}
+
+void pwm_timer()
+{
+ unsigned char i;
+
+ if (++step >= (1 << PWM_STEP_SHIFT))
+ step = 0;
+
+ for (i = 0; i < N_PWMLEDS; i++)
+ if (pwm[i])
+ pwm_update_hw(i);
+}
+