annotate ctrl.pio @ 20:6aaa9658df1e

Don't mark pulse active on slew up/down.
author Daniel O'Connor <darius@dons.net.au>
date Tue, 25 Feb 2025 15:46:03 +1030
parents f1e44afb41a3
children 8d759cf5a9e7
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
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
6 .define TRIGGER_IRQ 0
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
18
f1e44afb41a3 WIP with control and DAC in sync and not hanging.
Daniel O'Connor <darius@dons.net.au>
parents: 16
diff changeset
11 irq clear TRIGGER_IRQ
16
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
12 .wrap_target
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
13 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
14 nop
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
15 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
16 nop
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
17 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
18 nop
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
19 out pins 8
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
20 nop
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) {
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
25 pio_sm_config c = dac_program_get_default_config(offset);
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
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
49 // 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
50 pio_sm_init(pio, sm, offset, &c);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
51 pio_sm_set_enabled(pio, sm, true);
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
52 }
56a79dce90e9 Commit WIP ctrl code
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
53 %}