Mercurial > ~darius > hgwebdir.cgi > modulator
annotate dac.pio @ 19:2e14ccd1338a
Set control data after shape data so it is lined up properly.
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Tue, 25 Feb 2025 14:53:40 +1030 |
parents | f1e44afb41a3 |
children | 9ad0dd5c638c |
rev | line source |
---|---|
0
a55e39064a71
First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
1 ; |
9 | 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 | 6 .define TRIGGER_IRQ 0 |
7 ; Need 1 side set pin, the clock | |
8 .side_set 1 | |
0
a55e39064a71
First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff
changeset
|
9 |
9 | 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 |
18
f1e44afb41a3
WIP with control and DAC in sync and not hanging.
Daniel O'Connor <darius@dons.net.au>
parents:
10
diff
changeset
|
14 wait 1 irq 1 side 0 |
f1e44afb41a3
WIP with control and DAC in sync and not hanging.
Daniel O'Connor <darius@dons.net.au>
parents:
10
diff
changeset
|
15 irq clear 1 side 0 |
2
0d653f60dec8
Actually get data moving out.
Daniel O'Connor <darius@dons.net.au>
parents:
0
diff
changeset
|
16 ; Clock DAC and write data from the FIFO |
9 | 17 ; DAC clocks data in on the rising clock edge |
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 | 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 | 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 | 45 true, // Autopull enabled |
5 | 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 | 49 // Configure sideset pin to use for clock |
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 | 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 %} |