forked from paulocode/picostation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.pio
200 lines (162 loc) · 4.72 KB
/
main.pio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
.program cpu_clk
.wrap_target
set pins 0
set pins 1
.wrap
% c-sdk {
static inline void cpu_clk_program_init(PIO pio, uint8_t sm, uint8_t offset, uint8_t cpu_clk_pin) {
pio_gpio_init(pio, cpu_clk_pin);
pio_sm_set_consecutive_pindirs(pio, sm, cpu_clk_pin, 1, true);
pio_sm_config sm_config = cpu_clk_program_get_default_config(offset);
sm_config_set_set_pins(&sm_config, cpu_clk_pin, 1);
pio_sm_init(pio, sm, offset, &sm_config);
}
%}
.program scor
.wrap_target
set pins 0
pull block
set y,4
loopy:
set x,31
loopx:
set pins 1 [30]
set pins 1 [24]
jmp x-- loopx
jmp y-- loopy
.wrap
% c-sdk {
static inline void scor_program_init(PIO pio, uint8_t sm, uint8_t offset,
uint8_t scor_pin) {
pio_gpio_init(pio, scor_pin);
pio_sm_set_consecutive_pindirs(pio, sm, scor_pin, 1, true);
pio_sm_config sm_config = scor_program_get_default_config(offset);
sm_config_set_set_pins(&sm_config, scor_pin, 1);
sm_config_set_clkdiv(&sm_config, 2);
pio_sm_init(pio, sm, offset, &sm_config);
}
%}
.program mechacon
.wrap_target
set x, 7
loop:
wait 0 pin 1
wait 1 pin 1
in pins 1
jmp x-- loop
push noblock
.wrap
% c-sdk {
static inline void mechacon_program_init(PIO pio, uint8_t sm, uint8_t offset,
uint8_t mechacon_pin_base) {
pio_gpio_init(pio, mechacon_pin_base);
pio_gpio_init(pio, mechacon_pin_base+1);
pio_sm_set_consecutive_pindirs(pio, sm, mechacon_pin_base, 2, false);
pio_sm_config sm_config = mechacon_program_get_default_config(offset);
sm_config_set_in_pins(&sm_config, mechacon_pin_base);
sm_config_set_jmp_pin(&sm_config, mechacon_pin_base+1);
sm_config_set_fifo_join(&sm_config, PIO_FIFO_JOIN_RX);
sm_config_set_in_shift(&sm_config, false, false, 0);
pio_sm_init(pio, sm, offset, &sm_config);
}
%}
.program soct
.wrap_target
set x, 16
pull block
loop:
wait 0 pin 0
out pins, 1
wait 1 pin 0
jmp x-- loop
push block
.wrap
% c-sdk {
static inline void soct_program_init(PIO pio, uint8_t sm, uint8_t offset,
uint8_t sqso_pin, uint8_t sqck_pin) {
pio_gpio_init(pio, sqso_pin);
pio_gpio_init(pio, sqck_pin);
pio_sm_set_consecutive_pindirs(pio, sm, sqso_pin, 1, true);
pio_sm_set_consecutive_pindirs(pio, sm, sqck_pin, 1, false);
pio_sm_config sm_config = soct_program_get_default_config(offset);
sm_config_set_out_pins(&sm_config, sqso_pin, 1);
sm_config_set_in_pins(&sm_config, sqck_pin);
pio_sm_init(pio, sm, offset, &sm_config);
}
%}
.program subq
set pins 1
set y, 2
loop:
set x, 31
pull block
loop_dword:
wait 0 pin 0
out pins, 1
wait 1 pin 0
jmp x-- loop_dword
jmp y-- loop
push block
hang:
jmp hang
% c-sdk {
static inline void subq_program_init(PIO pio, uint8_t sm, uint8_t offset,
uint8_t sqso_pin, uint8_t sqck_pin) {
pio_gpio_init(pio, sqso_pin);
pio_gpio_init(pio, sqck_pin);
pio_sm_set_consecutive_pindirs(pio, sm, sqso_pin, 1, true);
pio_sm_set_consecutive_pindirs(pio, sm, sqck_pin, 1, false);
pio_sm_config sm_config = subq_program_get_default_config(offset);
sm_config_set_out_pins(&sm_config, sqso_pin, 1);
sm_config_set_set_pins(&sm_config, sqso_pin, 1);
sm_config_set_in_pins(&sm_config, sqck_pin);
pio_sm_init(pio, sm, offset, &sm_config);
}
%}
.program i2s_data
.wrap_target
set x, 7
pull noblock
loop:
out pins, 1
set pins, 0 [14]
set pins, 1 [14]
out pins, 1
set pins, 0 [14]
set pins, 1 [14]
out pins, 1
set pins, 0 [14]
set pins, 1 [15]
jmp x-- loop
nop [4]
irq 0
.wrap
% c-sdk {
static inline void i2s_data_program_init(PIO pio, uint8_t sm, uint8_t offset, uint8_t data_clock_pin) {
pio_gpio_init(pio, data_clock_pin);
pio_gpio_init(pio, data_clock_pin+1);
pio_sm_set_consecutive_pindirs(pio, sm, data_clock_pin, 2, true);
pio_sm_config sm_config = i2s_data_program_get_default_config(offset);
sm_config_set_set_pins(&sm_config, data_clock_pin, 1);
sm_config_set_out_pins(&sm_config, data_clock_pin+1, 1);
sm_config_set_fifo_join(&sm_config, PIO_FIFO_JOIN_TX);
sm_config_set_clkdiv(&sm_config, 2);
pio_sm_init(pio, sm, offset, &sm_config);
}
%}
.program i2s_lrck
start:
set pins 1
wait 1 irq 0
set pins 0
wait 1 irq 0
jmp start
% c-sdk {
static inline void i2s_lrck_program_init(PIO pio, uint8_t sm, uint8_t offset, uint8_t lrck_pin) {
pio_gpio_init(pio, lrck_pin);
pio_sm_set_consecutive_pindirs(pio, sm, lrck_pin, 1, true);
pio_sm_config sm_config = i2s_data_program_get_default_config(offset);
sm_config_set_set_pins(&sm_config, lrck_pin, 1);
pio_sm_init(pio, sm, offset, &sm_config);
}
%}