[an error occurred while processing this directive]
|
Рассмотрим одноканальный шим.
Во-первых, понятно, что если у нас счетчик равняется 200, то для значений pwm (счетчика пилы, кстати, я забыл его посчитать в списке занятых регистров) < 200 делать ничего не надо вообще.
Далее при pwm == 200 переключаем выход в 0 и ничего не делаем до 256, где начинается новый цикл и выход снова становится 1.
Далее, перейдем к многоканальному.
Таблица состоит из пар счетчик:выход, отсортирована по увеличению счетчика.
При начале цикла в r0 загружается значение счетчика, соответствующее первому изменению выхода. При pwm == r0 выход изменяется, r0 & r1 грузятся новыми значениями, цикл повторяется. Если выход далее обновляться не будет - грузятся 0:0.
Предположим, что значения шима каналов 1:8 должны быть 11,12,13...18.
Тогда таблица будет выглядеть как
0xff, 11:0xfe, 12:0xfc, 13:0xf8 ... 18:0, 0:0
В начале цикла в порт уходит 0xff, r0=11, r1=0xfe.
При значении pwm 11 в порт уходит 0xfe, r0=12, r1=0xfc.
При значении pwm 18 в порт уходит 0x00, r0=0, r1=0.
Теперь до начала нового цикла ничего более происходить не будет.
С r2:r3 & r4:r5 аналогично.
Если значения шима для каналов, привязанных к одному порту, совпадут, то они обязательно должны быть слиты вместе, т.е. вместо 11:0xfe, 11:0xfx должно стоять 11:0xfc.