Skip to content

Commit fdc4abf

Browse files
committed
uniform swap now
1 parent 4a16ed1 commit fdc4abf

File tree

2 files changed

+131
-105
lines changed

2 files changed

+131
-105
lines changed

ports/raspberrypi/common-hal/audiobusio/I2SOut.c

Lines changed: 130 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -19,122 +19,148 @@
1919
#include "bindings/rp2pio/StateMachine.h"
2020

2121
const uint16_t i2s_program[] = {
22-
// ; Load the next set of samples
23-
// ; /--- LRCLK
24-
// ; |/-- BCLK
25-
// ; ||
26-
// pull noblock side 0b01 ; Loads OSR with the next FIFO value or X
27-
0x8880,
28-
// mov x osr side 0b01 ; Save the new value in case we need it again
29-
0xa827,
30-
// set y 14 side 0b01
31-
0xe84e,
32-
// bitloop1:
33-
// out pins 1 side 0b00 [2]
34-
0x6201,
35-
// jmp y-- bitloop1 side 0b01 [2]
36-
0x0a83,
37-
// out pins 1 side 0b10 [2]
38-
0x7201,
39-
// set y 14 side 0b11 [2]
40-
0xfa4e,
41-
// bitloop0:
42-
// out pins 1 side 0b10 [2]
43-
0x7201,
44-
// jmp y-- bitloop0 side 0b11 [2]
45-
0x1a87,
46-
// out pins 1 side 0b00 [2]
47-
0x6201
22+
/*
23+
.program i2s
24+
.side_set 2
25+
26+
; Load the next set of samples
27+
; /--- LRCLK
28+
; |/-- BCLK
29+
; ||
30+
pull noblock side 0b01 ; Loads OSR with the next FIFO value or X
31+
mov x osr side 0b01 ; Save the new value in case we need it again
32+
set y 14 side 0b01
33+
bitloop1:
34+
out pins 1 side 0b00 [2]
35+
jmp y-- bitloop1 side 0b01 [2]
36+
out pins 1 side 0b10 [2]
37+
set y 14 side 0b11 [2]
38+
bitloop0:
39+
out pins 1 side 0b10 [2]
40+
jmp y-- bitloop0 side 0b11 [2]
41+
out pins 1 side 0b00 [2]
42+
*/
43+
// Above assembled with pioasm.
44+
0x8880, // 0: pull noblock side 1
45+
0xa827, // 1: mov x, osr side 1
46+
0xe84e, // 2: set y, 14 side 1
47+
0x6201, // 3: out pins, 1 side 0 [2]
48+
0x0a83, // 4: jmp y--, 3 side 1 [2]
49+
0x7201, // 5: out pins, 1 side 2 [2]
50+
0xfa4e, // 6: set y, 14 side 3 [2]
51+
0x7201, // 7: out pins, 1 side 2 [2]
52+
0x1a87, // 8: jmp y--, 7 side 3 [2]
53+
0x6201, // 9: out pins, 1 side 0 [2]
4854
};
4955

56+
5057
const uint16_t i2s_program_left_justified[] = {
51-
// ; Load the next set of samples
52-
// ; /--- LRCLK
53-
// ; |/-- BCLK
54-
// ; ||
55-
// pull noblock side 0b11 ; Loads OSR with the next FIFO value or X
56-
0x9880,
57-
// mov x osr side 0b11 ; Save the new value in case we need it again
58-
0xb827,
59-
// set y 14 side 0b11
60-
0xf84e,
61-
// bitloop1:
62-
// out pins 1 side 0b00 [2]
63-
0x6201,
64-
// jmp y-- bitloop1 side 0b01 [2]
65-
0x0a83,
66-
// out pins 1 side 0b00 [2]
67-
0x6201,
68-
// set y 14 side 0b01 [2]
69-
0xea4e,
70-
// bitloop0:
71-
// out pins 1 side 0b10 [2]
72-
0x7201,
73-
// jmp y-- bitloop0 side 0b11 [2]
74-
0x1a87,
75-
// out pins 1 side 0b10 [2]
76-
0x7201
58+
/*
59+
.program i2s
60+
.side_set 2
61+
62+
; Load the next set of samples
63+
; /--- LRCLK
64+
; |/-- BCLK
65+
; ||
66+
pull noblock side 0b11 ; Loads OSR with the next FIFO value or X
67+
mov x osr side 0b11 ; Save the new value in case we need it again
68+
set y 14 side 0b11
69+
bitloop1:
70+
out pins 1 side 0b00 [2]
71+
jmp y-- bitloop1 side 0b01 [2]
72+
out pins 1 side 0b00 [2]
73+
set y 14 side 0b01 [2]
74+
bitloop0:
75+
out pins 1 side 0b10 [2]
76+
jmp y-- bitloop0 side 0b11 [2]
77+
out pins 1 side 0b10 [2]
78+
*/
79+
// Above assembled with pioasm.
80+
0x9880, // 0: pull noblock side 3
81+
0xb827, // 1: mov x, osr side 3
82+
0xf84e, // 2: set y, 14 side 3
83+
0x6201, // 3: out pins, 1 side 0 [2]
84+
0x0a83, // 4: jmp y--, 3 side 1 [2]
85+
0x6201, // 5: out pins, 1 side 0 [2]
86+
0xea4e, // 6: set y, 14 side 1 [2]
87+
0x7201, // 7: out pins, 1 side 2 [2]
88+
0x1a87, // 8: jmp y--, 7 side 3 [2]
89+
0x7201, // 9: out pins, 1 side 2 [2]
7790
};
7891

7992
// Another version of i2s_program with the LRCLC and BCLK pin swapped
8093
const uint16_t i2s_program_swap[] = {
81-
// ; Load the next set of samples
82-
// ; /--- BCLK
83-
// ; |/-- LRCLK
84-
// ; ||
85-
// pull noblock side 0b11 ; Loads OSR with the next FIFO value or X
86-
0x9880,
87-
// mov x osr side 0b11 ; Save the new value in case we need it again
88-
0xb827,
89-
// set y 14 side 0b11
90-
0xf84e,
91-
// bitloop1:
92-
// out pins 1 side 0b01 [2]
93-
0x6a01,
94-
// jmp y-- bitloop1 side 0b11 [2]
95-
0x1a83,
96-
// out pins 1 side 0b00 [2]
97-
0x6201,
98-
// set y 14 side 0b10 [2]
99-
0xf24e,
100-
// bitloop0:
101-
// out pins 1 side 0b00 [2]
102-
0x6201,
103-
// jmp y-- bitloop0 side 0b10 [2]
104-
0x1287,
105-
// out pins 1 side 0b01 [2]
106-
0x6a01
94+
/*
95+
.program i2s
96+
.side_set 2
97+
98+
; Load the next set of samples
99+
; /--- BCLK
100+
; |/-- LRCLK
101+
; ||
102+
pull noblock side 0b10 ; Loads OSR with the next FIFO value or X
103+
mov x osr side 0b10 ; Save the new value in case we need it again
104+
set y 14 side 0b10
105+
bitloop1:
106+
out pins 1 side 0b00 [2]
107+
jmp y-- bitloop1 side 0b10 [2]
108+
out pins 1 side 0b01 [2]
109+
set y 14 side 0b11 [2]
110+
bitloop0:
111+
out pins 1 side 0b01 [2]
112+
jmp y-- bitloop0 side 0b11 [2]
113+
out pins 1 side 0b00 [2]
114+
*/
115+
// Above assembled with pioasm.
116+
0x9080, // 0: pull noblock side 2
117+
0xb027, // 1: mov x, osr side 2
118+
0xf04e, // 2: set y, 14 side 2
119+
0x6201, // 3: out pins, 1 side 0 [2]
120+
0x1283, // 4: jmp y--, 3 side 2 [2]
121+
0x6a01, // 5: out pins, 1 side 1 [2]
122+
0xfa4e, // 6: set y, 14 side 3 [2]
123+
0x6a01, // 7: out pins, 1 side 1 [2]
124+
0x1a87, // 8: jmp y--, 7 side 3 [2]
125+
0x6201, // 9: out pins, 1 side 0 [2]
126+
107127
};
108128

109129
// Another version of i2s_program_left_justified with the LRCLC and BCLK pin
110130
// swapped.
111131
const uint16_t i2s_program_left_justified_swap[] = {
112-
// ; Load the next set of samples
113-
// ; /--- BCLK
114-
// ; |/-- LRCLK
115-
// ; ||
116-
// pull noblock side 0b11 ; Loads OSR with the next FIFO value or X
117-
0x9880,
118-
// mov x osr side 0b11 ; Save the new value in case we need it again
119-
0xb827,
120-
// set y 14 side 0b11
121-
0xf84e,
122-
// bitloop1:
123-
// out pins 1 side 0b00 [2]
124-
0x6201,
125-
// jmp y-- bitloop1 side 0b10 [2]
126-
0x1283,
127-
// out pins 1 side 0b00 [2]
128-
0x6201,
129-
// set y 14 side 0b10 [2]
130-
0xf24e,
131-
// bitloop0:
132-
// out pins 1 side 0b01 [2]
133-
0x6a01,
134-
// jmp y-- bitloop0 side 0b11 [2]
135-
0x1a87,
136-
// out pins 1 side 0b01 [2]
137-
0x6a01
132+
/*
133+
.program i2s
134+
.side_set 2
135+
136+
; Load the next set of samples
137+
; /--- BCLK
138+
; |/-- LRCLK
139+
; ||
140+
pull noblock side 0b11 ; Loads OSR with the next FIFO value or X
141+
mov x osr side 0b11 ; Save the new value in case we need it again
142+
set y 14 side 0b11
143+
bitloop1:
144+
out pins 1 side 0b00 [2]
145+
jmp y-- bitloop1 side 0b10 [2]
146+
out pins 1 side 0b00 [2]
147+
set y 14 side 0b10 [2]
148+
bitloop0:
149+
out pins 1 side 0b01 [2]
150+
jmp y-- bitloop0 side 0b11 [2]
151+
out pins 1 side 0b01 [2]
152+
*/
153+
// Above assembled with pioasm.
154+
0x9880, // 0: pull noblock side 3
155+
0xb827, // 1: mov x, osr side 3
156+
0xf84e, // 2: set y, 14 side 3
157+
0x6201, // 3: out pins, 1 side 0 [2]
158+
0x1283, // 4: jmp y--, 3 side 2 [2]
159+
0x6201, // 5: out pins, 1 side 0 [2]
160+
0xf24e, // 6: set y, 14 side 2 [2]
161+
0x6a01, // 7: out pins, 1 side 1 [2]
162+
0x1a87, // 8: jmp y--, 7 side 3 [2]
163+
0x6a01, // 9: out pins, 1 side 1 [2]
138164
};
139165

140166
void i2sout_reset(void) {

0 commit comments

Comments
 (0)