-void pwm_off(unsigned char n)
-{
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
- pwm[n] = 0;
-
- switch (n) {
- case 0: DDRB &= ~_BV(PB1); break;
- case 1: DDRB &= ~_BV(PB3); break;
- case 2: DDRB &= ~_BV(PB5); break;
- }
- }
-}
-
-static void pwm_update_hw(unsigned char n)
-{
- unsigned char hi, lo;
- uint16_t stride = (pwm[n] + step) >> PWM_STEP_SHIFT;
-
- if (n == 2)
- stride = PWM_TOP - stride;
-
- hi = stride >> 8;
- lo = stride & 0xFF;
-
- switch (n) {
- case 0:
- TC1H = hi;
- OCR1A = lo;
- break;
- case 1:
- TC1H = hi;
- OCR1B = lo;
- break;
- case 2:
- TC1H = hi;
- OCR1D = lo;
- break;
- }
-}
-
-void pwm_set(unsigned char n, uint16_t stride)