annotate ctrl.pio @ 27:e1d8fe3e418a

Run PIOs at 1x with delays and sync. Can now use a single trigger to set both DAC & ctrl. DAC [still] jitters against the ctrl though..
author Daniel O'Connor <darius@dons.net.au>
date Wed, 26 Feb 2025 11:03:59 +1030
parents 6070d2e66b4c
children 600a394629e6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
1 ;
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
2 ; Copyright (c) 2025 Daniel O'Connor
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
3 ;
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
4
27
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
5 .define TRIGGER_IRQ 0
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
6
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
7 .program ctrl
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
8 ; Assert all 0s
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
9 mov pins, null
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
10 ; Wait for start trigger and clear IRQ
27
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
11 wait 1 irq TRIGGER_IRQ
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
12 .wrap_target
27
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
13 out pins 8 [1]
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
14 nop [1]
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
15 out pins 8 [1]
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
16 nop [1]
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
17 out pins 8 [1]
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
18 nop [1]
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
19 out pins 8 [1]
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
20 nop [1]
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
21 .wrap
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
22
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
23 % c-sdk {
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
24 static inline void ctrl_program_init(PIO pio, uint sm, uint offset, uint pin, uint clkdiv) {
21
8d759cf5a9e7 Load correct program, use a separate IRQ
Daniel O'Connor <darius@dons.net.au>
parents: 18
diff changeset
25 pio_sm_config c = ctrl_program_get_default_config(offset);
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
26
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
27 // Set the OUT base pin to the provided `pin` parameter.
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
28 // Note: We only need 6 pins but pull a byte at a time to make
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 // generating the data simpler
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
30 sm_config_set_out_pins(&c, pin, 6);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31 // Set the pin directions to output at the PIO
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
32 pio_sm_set_consecutive_pindirs(pio, sm, pin, 6, true);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
33 // Connect these GPIOs to this PIO block
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
34 for (int i = 0; i < 6; i++)
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
35 pio_gpio_init(pio, pin + i);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
36
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
37 sm_config_set_out_shift(
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
38 &c,
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
39 true, // Shift-to-right
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
40 true, // Autopull enabled
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
41 32 // Autopull threshold (bits!)
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
42 );
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
43
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
44 // We only send, so disable the RX FIFO to make the TX FIFO deeper.
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
45 sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
46
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
47 sm_config_set_clkdiv(&c, clkdiv);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
48
27
e1d8fe3e418a Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents: 25
diff changeset
49 // Load our configuration
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
50 pio_sm_init(pio, sm, offset, &c);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
51 }
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
52 %}