annotate dac.pio @ 10:98880b18bcc1

Reset DAC PIO and use force trigger to do manual trigger.
author Daniel O'Connor <darius@dons.net.au>
date Mon, 24 Feb 2025 12:12:09 +1030
parents 3acdebd7eec7
children f1e44afb41a3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
1 ;
9
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
2 ; Copyright (c) 2025 Daniel O'Connor
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
3 ;
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
4
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
5 .program dac
9
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
6 .define TRIGGER_IRQ 0
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
7 ; Need 1 side set pin, the clock
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
8 .side_set 1
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
9
9
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
10 ; Clock in a 0 byte
10
98880b18bcc1 Reset DAC PIO and use force trigger to do manual trigger.
Daniel O'Connor <darius@dons.net.au>
parents: 9
diff changeset
11 mov pins, null side 0
98880b18bcc1 Reset DAC PIO and use force trigger to do manual trigger.
Daniel O'Connor <darius@dons.net.au>
parents: 9
diff changeset
12 nop side 1
98880b18bcc1 Reset DAC PIO and use force trigger to do manual trigger.
Daniel O'Connor <darius@dons.net.au>
parents: 9
diff changeset
13 ; Wait for start trigger and clear IRQ
98880b18bcc1 Reset DAC PIO and use force trigger to do manual trigger.
Daniel O'Connor <darius@dons.net.au>
parents: 9
diff changeset
14 wait 1 irq TRIGGER_IRQ side 0
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
15 ; Clock DAC and write data from the FIFO
9
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
16 ; DAC clocks data in on the rising clock edge
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
17 ; Autopull is enabled so no need to pull
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
18 .wrap_target
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
19 out pins 8 side 0
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
20 nop side 1
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
21 out pins 8 side 0
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
22 nop side 1
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
23 out pins 8 side 0
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
24 nop side 1
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
25 out pins 8 side 0
9
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
26 nop side 1
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
27 .wrap
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
28
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 % c-sdk {
5
Daniel O'Connor <darius@dons.net.au>
parents: 2
diff changeset
30 static inline void dac_program_init(PIO pio, uint sm, uint offset, uint pin, uint clkdiv) {
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31 pio_sm_config c = dac_program_get_default_config(offset);
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
32
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
33 // Set the OUT base pin to the provided `pin` parameter.
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
34 // First 8 pins are data, last is clock
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
35 sm_config_set_out_pins(&c, pin, 9);
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
36 // Set the pin directions to output at the PIO
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
37 pio_sm_set_consecutive_pindirs(pio, sm, pin, 9, true);
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
38 // Connect these GPIOs to this PIO block
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
39 for (int i = 0; i < 9; i++)
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
40 pio_gpio_init(pio, pin + i);
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
41
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
42 sm_config_set_out_shift(
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
43 &c,
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
44 true, // Shift-to-right
9
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
45 true, // Autopull enabled
5
Daniel O'Connor <darius@dons.net.au>
parents: 2
diff changeset
46 32 // Autopull threshold (bits!)
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
47 );
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
48
9
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
49 // Configure sideset pin to use for clock
3acdebd7eec7 Make it actually work
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
50 sm_config_set_sideset_pins(&c, pin + 8);
2
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
51
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
52 // We only send, so disable the RX FIFO to make the TX FIFO deeper.
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
53 sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
0d653f60dec8 Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
54
5
Daniel O'Connor <darius@dons.net.au>
parents: 2
diff changeset
55 sm_config_set_clkdiv(&c, clkdiv);
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
56
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
57 // Load our configuration, and start the program from the beginning
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
58 pio_sm_init(pio, sm, offset, &c);
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
59 pio_sm_set_enabled(pio, sm, true);
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
60 }
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
61 %}