Mercurial > ~darius > hgwebdir.cgi > modulator
annotate trigger.pio @ 30:92fdf2ef995d default tip
Use 32 bit rather than 16 bit ints for loop vars.
No risk of overflow and is actually faster.
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Thu, 27 Feb 2025 15:24:17 +1030 |
parents | e1d8fe3e418a |
children |
rev | line source |
---|---|
12 | 1 ; |
2 ; Copyright (c) 2025 Daniel O'Connor | |
3 ; | |
4 | |
5 .program trigger | |
27
e1d8fe3e418a
Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents:
25
diff
changeset
|
6 .define TRIGGER_IRQ 0 |
24
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
7 ; Use 1 side set pin for debugging |
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
8 .side_set 1 |
12 | 9 |
10 .wrap_target | |
11 ; Wait for trigger to be low | |
24
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
12 wait 0 pin 0 side 0 |
12 | 13 ; Wait for rising edge |
24
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
14 wait 1 pin 0 side 0 |
27
e1d8fe3e418a
Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents:
25
diff
changeset
|
15 ; Signal DAC & ctrl SMs |
e1d8fe3e418a
Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents:
25
diff
changeset
|
16 irq nowait TRIGGER_IRQ side 1 |
12 | 17 .wrap |
18 | |
19 % c-sdk { | |
20 static inline void trigger_program_init(PIO pio, uint sm, uint offset, uint pin, uint clkdiv) { | |
21 pio_sm_config c = trigger_program_get_default_config(offset); | |
22 | |
23 // Configure SM input pin mapping to point to trigger pin | |
24 sm_config_set_in_pins(&c, pin); | |
25 // Set to input | |
26 pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, false); | |
27 // Connect this GPIO to this PIO block | |
28 pio_gpio_init(pio, pin); | |
29 | |
24
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
30 // Configure side pin mapping to point to debug pin |
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
31 sm_config_set_sideset_pins(&c, pin + 1); |
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
32 // Set to output |
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
33 pio_sm_set_consecutive_pindirs(pio, sm, pin + 1, 1, true); |
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
34 // Connect this GPIO to this PIO block |
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
35 pio_gpio_init(pio, pin + 1); |
c7845db23ab2
Add sideset for trigger output.
Daniel O'Connor <darius@dons.net.au>
parents:
12
diff
changeset
|
36 |
12 | 37 sm_config_set_clkdiv(&c, clkdiv); |
38 | |
27
e1d8fe3e418a
Run PIOs at 1x with delays and sync.
Daniel O'Connor <darius@dons.net.au>
parents:
25
diff
changeset
|
39 // Load our configuration |
12 | 40 pio_sm_init(pio, sm, offset, &c); |
41 } | |
42 %} |