|
19 | 19 | #include "bindings/rp2pio/StateMachine.h"
|
20 | 20 |
|
21 | 21 | 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 | +/* From i2s.pio: |
| 24 | +
|
| 25 | +.program i2s |
| 26 | +.side_set 2 |
| 27 | +
|
| 28 | +; Load the next set of samples |
| 29 | + ; /--- LRCLK |
| 30 | + ; |/-- BCLK |
| 31 | + ; || |
| 32 | + pull noblock side 0b11 ; Loads OSR with the next FIFO value or X |
| 33 | + mov x osr side 0b11 ; Save the new value in case we need it again |
| 34 | + set y 14 side 0b11 |
| 35 | +bitloop1: |
| 36 | + out pins 1 side 0b10 [2] ; Right channel first |
| 37 | + jmp y-- bitloop1 side 0b11 [2] |
| 38 | + out pins 1 side 0b00 [2] |
| 39 | + set y 14 side 0b01 [2] |
| 40 | +bitloop0: |
| 41 | + out pins 1 side 0b00 [2] ; Then left channel |
| 42 | + jmp y-- bitloop0 side 0b01 [2] |
| 43 | + out pins 1 side 0b10 [2] |
| 44 | +*/ |
| 45 | + // Above assembled with pioasm. |
| 46 | + 0x9880, // 0: pull noblock side 3 |
| 47 | + 0xb827, // 1: mov x, osr side 3 |
| 48 | + 0xf84e, // 2: set y, 14 side 3 |
| 49 | + 0x7201, // 3: out pins, 1 side 2 [2] |
| 50 | + 0x1a83, // 4: jmp y--, 3 side 3 [2] |
| 51 | + 0x6201, // 5: out pins, 1 side 0 [2] |
| 52 | + 0xea4e, // 6: set y, 14 side 1 [2] |
| 53 | + 0x6201, // 7: out pins, 1 side 0 [2] |
| 54 | + 0x0a87, // 8: jmp y--, 7 side 1 [2] |
| 55 | + 0x7201, // 9: out pins, 1 side 2 [2] |
48 | 56 | };
|
49 | 57 |
|
| 58 | + |
50 | 59 | 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 |
| 60 | +/* From i2s_left.pio: |
| 61 | +
|
| 62 | +.program i2s |
| 63 | +.side_set 2 |
| 64 | +
|
| 65 | +; Load the next set of samples |
| 66 | + ; /--- LRCLK |
| 67 | + ; |/-- BCLK |
| 68 | + ; || |
| 69 | + pull noblock side 0b01 ; Loads OSR with the next FIFO value or X |
| 70 | + mov x osr side 0b01 ; Save the new value in case we need it again |
| 71 | + set y 14 side 0b01 |
| 72 | +bitloop1: |
| 73 | + out pins 1 side 0b10 [2] ; Right channel first |
| 74 | + jmp y-- bitloop1 side 0b11 [2] |
| 75 | + out pins 1 side 0b10 [2] |
| 76 | + set y 14 side 0b11 [2] |
| 77 | +bitloop0: |
| 78 | + out pins 1 side 0b00 [2] ; Then left channel |
| 79 | + jmp y-- bitloop0 side 0b01 [2] |
| 80 | + out pins 1 side 0b00 [2] |
| 81 | +*/ |
| 82 | + // Above assembled with pioasm. |
| 83 | + 0x8880, // 0: pull noblock side 1 |
| 84 | + 0xa827, // 1: mov x, osr side 1 |
| 85 | + 0xe84e, // 2: set y, 14 side 1 |
| 86 | + 0x7201, // 3: out pins, 1 side 2 [2] |
| 87 | + 0x1a83, // 4: jmp y--, 3 side 3 [2] |
| 88 | + 0x7201, // 5: out pins, 1 side 2 [2] |
| 89 | + 0xfa4e, // 6: set y, 14 side 3 [2] |
| 90 | + 0x6201, // 7: out pins, 1 side 0 [2] |
| 91 | + 0x0a87, // 8: jmp y--, 7 side 1 [2] |
| 92 | + 0x6201, // 9: out pins, 1 side 0 [2] |
77 | 93 | };
|
78 | 94 |
|
79 | 95 | // Another version of i2s_program with the LRCLC and BCLK pin swapped
|
80 | 96 | 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 |
| 97 | +/* From i2s_swap.pio: |
| 98 | +
|
| 99 | +.program i2s |
| 100 | +.side_set 2 |
| 101 | +
|
| 102 | +; Load the next set of samples |
| 103 | + ; /--- BCLK |
| 104 | + ; |/-- LRCLK |
| 105 | + ; || |
| 106 | + pull noblock side 0b11 ; Loads OSR with the next FIFO value or X |
| 107 | + mov x osr side 0b11 ; Save the new value in case we need it again |
| 108 | + set y 14 side 0b11 |
| 109 | +bitloop1: |
| 110 | + out pins 1 side 0b01 [2] ; Right channel first |
| 111 | + jmp y-- bitloop1 side 0b11 [2] |
| 112 | + out pins 1 side 0b00 [2] |
| 113 | + set y 14 side 0b10 [2] |
| 114 | +bitloop0: |
| 115 | + out pins 1 side 0b00 [2] ; Then left channel |
| 116 | + jmp y-- bitloop0 side 0b10 [2] |
| 117 | + out pins 1 side 0b01 [2] |
| 118 | +*/ |
| 119 | + // Above assembled with pioasm. |
| 120 | + 0x9880, // 0: pull noblock side 3 |
| 121 | + 0xb827, // 1: mov x, osr side 3 |
| 122 | + 0xf84e, // 2: set y, 14 side 3 |
| 123 | + 0x6a01, // 3: out pins, 1 side 1 [2] |
| 124 | + 0x1a83, // 4: jmp y--, 3 side 3 [2] |
| 125 | + 0x6201, // 5: out pins, 1 side 0 [2] |
| 126 | + 0xf24e, // 6: set y, 14 side 2 [2] |
| 127 | + 0x6201, // 7: out pins, 1 side 0 [2] |
| 128 | + 0x1287, // 8: jmp y--, 7 side 2 [2] |
| 129 | + 0x6a01, // 9: out pins, 1 side 1 [2] |
107 | 130 | };
|
108 | 131 |
|
109 | 132 | // Another version of i2s_program_left_justified with the LRCLC and BCLK pin
|
110 | 133 | // swapped.
|
111 | 134 | 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 |
| 135 | +/* From i2s_swap_left.pio: |
| 136 | +
|
| 137 | +.program i2s |
| 138 | +.side_set 2 |
| 139 | +
|
| 140 | +; Load the next set of samples |
| 141 | + ; /--- BCLK |
| 142 | + ; |/-- LRCLK |
| 143 | + ; || |
| 144 | + pull noblock side 0b10 ; Loads OSR with the next FIFO value or X |
| 145 | + mov x osr side 0b10 ; Save the new value in case we need it again |
| 146 | + set y 14 side 0b10 |
| 147 | +bitloop1: |
| 148 | + out pins 1 side 0b01 [2] ; Right channel first |
| 149 | + jmp y-- bitloop1 side 0b11 [2] |
| 150 | + out pins 1 side 0b01 [2] |
| 151 | + set y 14 side 0b11 [2] |
| 152 | +bitloop0: |
| 153 | + out pins 1 side 0b00 [2] ; Then left channel |
| 154 | + jmp y-- bitloop0 side 0b10 [2] |
| 155 | + out pins 1 side 0b00 [2] |
| 156 | +*/ |
| 157 | + // Above assembled with pioasm. |
| 158 | + 0x9080, // 0: pull noblock side 2 |
| 159 | + 0xb027, // 1: mov x, osr side 2 |
| 160 | + 0xf04e, // 2: set y, 14 side 2 |
| 161 | + 0x6a01, // 3: out pins, 1 side 1 [2] |
| 162 | + 0x1a83, // 4: jmp y--, 3 side 3 [2] |
| 163 | + 0x6a01, // 5: out pins, 1 side 1 [2] |
| 164 | + 0xfa4e, // 6: set y, 14 side 3 [2] |
| 165 | + 0x6201, // 7: out pins, 1 side 0 [2] |
| 166 | + 0x1287, // 8: jmp y--, 7 side 2 [2] |
| 167 | + 0x6201, // 9: out pins, 1 side 0 [2] |
138 | 168 | };
|
139 | 169 |
|
140 | 170 | void i2sout_reset(void) {
|
|
0 commit comments