annotate ctrl.pio @ 24:c7845db23ab2

Add sideset for trigger output. Trigger both SMs
author Daniel O'Connor <darius@dons.net.au>
date Tue, 25 Feb 2025 16:47:00 +1030
parents 8d759cf5a9e7
children 6070d2e66b4c
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
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
5 .program ctrl
21
8d759cf5a9e7 Load correct program, use a separate IRQ
Daniel O'Connor <darius@dons.net.au>
parents: 18
diff changeset
6 .define TRIGGER_IRQ 1
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
7 ; Assert all 0s
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
8 mov pins, null
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
9 ; Wait for start trigger and clear IRQ
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
10 wait 1 irq TRIGGER_IRQ
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
11 .wrap_target
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
12 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
13 nop
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
14 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
15 nop
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
16 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
17 nop
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
18 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
19 nop
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
20 .wrap
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
21
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
22 % c-sdk {
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
23 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
24 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
25
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
26 // 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
27 // 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
28 // generating the data simpler
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 sm_config_set_out_pins(&c, pin, 6);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
30 // Set the pin directions to output at the PIO
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31 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
32 // Connect these GPIOs to this PIO block
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
33 for (int i = 0; i < 6; i++)
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
34 pio_gpio_init(pio, pin + i);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
35
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
36 sm_config_set_out_shift(
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
37 &c,
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
38 true, // Shift-to-right
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
39 true, // Autopull enabled
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
40 32 // Autopull threshold (bits!)
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
41 );
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 // 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
44 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
45
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
46 sm_config_set_clkdiv(&c, clkdiv);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
47
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
48 // Load our configuration, and start the program from the beginning
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
49 pio_sm_init(pio, sm, offset, &c);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
50 pio_sm_set_enabled(pio, sm, true);
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 %}