Skip to content

fix(pwm): implement CSR.DIVMODE — B-pin gated and edge-count modes#55

Merged
begeistert merged 1 commit into
masterfrom
fix/pwm-divmode
Jul 14, 2026
Merged

fix(pwm): implement CSR.DIVMODE — B-pin gated and edge-count modes#55
begeistert merged 1 commit into
masterfrom
fix/pwm-divmode

Conversation

@begeistert

Copy link
Copy Markdown
Collaborator

Implements PWM CSR.DIVMODE (B-pin gated and edge-count modes). Verified: unit 521/0. First stable BUSL release: 1.0.1.

The PWM slices always advanced at clk_sys/DIV, ignoring DIVMODE, and the
B pins had no input path into the peripheral. CircuitPython's countio —
which programs DIVMODE=rising-edge on a B pin — therefore counted clock
cycles instead of edges (253M "edges" in 4 s of a 4 Hz square wave).

IoBank0 now fans out pad-input transitions (OnInputChanged) and the
machine routes odd GPIOs muxed to PWM (FUNCSEL 4) into their slice's
SetBInput, which drives the gated (count while B high) and rising/falling
edge-count modes. Free-running slices behave exactly as before.

Verified: 5 new DIVMODE unit tests; suites 521/0 unit + 162/0 integration;
E2E in-circuit CircuitPython countio on GP17 counts 16/16 rising edges of
a 4 Hz rail.

Claude-Session: https://claude.ai/code/session_01LzMZxpFZefZTzGPCfg2AHq
@begeistert begeistert requested a review from lmSeryi as a code owner July 14, 2026 08:04
@begeistert begeistert merged commit 6d6fb2d into master Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant