; Klassisches PIO-PWM (Vorlage aus pico-examples). ; Pro Periode: pull noblock holt den neuen Level aus dem FIFO ; (oder recycelt den letzten aus X, wenn das FIFO leer ist). ; Y zaehlt von Periode runter auf 0; sobald X == Y wird der Pin per side-set hoch. ; Beim naechsten pull wird er wieder auf 0 gezogen. .program pio_pwm .side_set 1 opt pull noblock side 0 mov x, osr mov y, isr countloop: jmp x!=y noset jmp skip side 1 noset: nop skip: jmp y-- countloop % c-sdk { static inline void pio_pwm_program_init(PIO pio, uint sm, uint offset, uint pin, float clkdiv) { pio_gpio_init(pio, pin); pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true); pio_sm_config c = pio_pwm_program_get_default_config(offset); sm_config_set_sideset_pins(&c, pin); sm_config_set_clkdiv(&c, clkdiv); pio_sm_init(pio, sm, offset, &c); } %}