1919#include "audio_dma.h"
2020
2121const uint16_t i2sin_program_mono [] = {
22- // pull block side 0b11 ; Load OSR with bits_per_sample
22+ // pull block side 0b11 ; Load OSR with bits_per_sample-2
2323 0x98a0 ,
24- // mov x osr side 0b11 ; Save the value in x
25- 0xb827 ,
24+ // out y 8 side 0b11 ; Save the value in y
25+ 0x7848 ,
2626// nop side 0b01
2727 0xa842 ,
28- // mov y x side 0b01
29- 0xa841 ,
28+ // mov x y side 0b01
29+ 0xa822 ,
3030// lbit:
3131// nop side 0b00 [1]
3232 0xa142 ,
3333// in pins 1 side 0b01
3434 0x4801 ,
35- // jmp y -- lbit side 0b01
36- 0x0884 ,
35+ // jmp x -- lbit side 0b01
36+ 0x0844 ,
3737// nop side 0b10 [1]
3838 0xb142 ,
3939// in pins 1 side 0b11
4040 0x5801 ,
41- // mov y x side 0b11
42- 0xb841 ,
41+ // mov x y side 0b11
42+ 0xb822 ,
4343// rbit:
4444// nop side 0b10 [1]
4545 0xb142 ,
@@ -54,27 +54,27 @@ const uint16_t i2sin_program_mono[] = {
5454};
5555
5656const uint16_t i2sin_program_mono_swap [] = {
57- // pull block side 0b11 ; Load OSR with bits_per_sample
57+ // pull block side 0b11 ; Load OSR with bits_per_sample-2
5858 0x98a0 ,
59- // mov x osr side 0b11 ; Save the value in x
60- 0xb827 ,
59+ // out y 8 side 0b11 ; Save the value in y
60+ 0x7848 ,
6161// nop side 0b10
6262 0xb042 ,
63- // mov y x side 0b10
64- 0xb041 ,
63+ // mov x y side 0b10
64+ 0xb022 ,
6565// lbit:
6666// nop side 0b00 [1]
6767 0xa142 ,
6868// in pins 1 side 0b10
6969 0x5001 ,
70- // jmp y -- lbit side 0b10
71- 0x1084 ,
70+ // jmp x -- lbit side 0b10
71+ 0x1044 ,
7272// nop side 0b01 [1]
7373 0xa942 ,
7474// in pins 1 side 0b11
7575 0x5801 ,
76- // mov y x side 0b11
77- 0xb841 ,
76+ // mov x y side 0b11
77+ 0xb822 ,
7878// rbit:
7979// nop side 0b01 [1]
8080 0xa942 ,
@@ -92,27 +92,27 @@ const uint16_t i2sin_program_stereo[] = {
9292// ; /--- LRCLK
9393// ; |/-- BCLK
9494// ; ||
95- // pull block side 0b11 ; Load OSR with bits_per_sample
95+ // pull block side 0b11 ; Load OSR with bits_per_sample-2
9696 0x98a0 ,
97- // mov x osr side 0b11 ; Save the value in x
98- 0xb827 ,
97+ // out y 8 side 0b11 ; Save the value in y
98+ 0x7848 ,
9999// nop side 0b01
100100 0xa842 ,
101- // mov y x side 0b01
102- 0xa841 ,
101+ // mov x y side 0b01
102+ 0xa822 ,
103103// lbit:
104104// nop side 0b00 [1]
105105 0xa142 ,
106106// in pins 1 side 0b01
107107 0x4801 ,
108- // jmp y -- lbit side 0b01
109- 0x0884 ,
108+ // jmp x -- lbit side 0b01
109+ 0x0844 ,
110110// nop side 0b10 [1]
111111 0xb142 ,
112112// in pins 1 side 0b11
113113 0x5801 ,
114- // mov y x side 0b11
115- 0xb841 ,
114+ // mov x y side 0b11
115+ 0xb822 ,
116116// rbit:
117117// nop side 0b10 [1]
118118 0xb142 ,
@@ -130,27 +130,27 @@ const uint16_t i2sin_program_stereo_swap[] = {
130130// ; /--- LRCLK
131131// ; |/-- BCLK
132132// ; ||
133- // pull block side 0b11 ; Load OSR with bits_per_sample
133+ // pull block side 0b11 ; Load OSR with bits_per_sample-2
134134 0x98a0 ,
135- // mov x osr side 0b11 ; Save the value in x
136- 0xb827 ,
135+ // out y 8 side 0b11 ; Save the value in y
136+ 0x7848 ,
137137// nop side 0b10
138138 0xb042 ,
139- // mov y x side 0b10
140- 0xb041 ,
139+ // mov x y side 0b10
140+ 0xb022 ,
141141// lbit:
142142// nop side 0b00 [1]
143143 0xa142 ,
144144// in pins 1 side 0b10
145145 0x5001 ,
146- // jmp y -- lbit side 0b10
147- 0x1084 ,
146+ // jmp x -- lbit side 0b10
147+ 0x1044 ,
148148// nop side 0b01 [1]
149149 0xa942 ,
150150// in pins 1 side 0b11
151151 0x5801 ,
152- // mov y x side 0b11
153- 0xb841 ,
152+ // mov x y side 0b11
153+ 0xb822 ,
154154// rbit:
155155// nop side 0b01 [1]
156156 0xa942 ,
@@ -207,10 +207,10 @@ void common_hal_audiobusio_i2sin_construct(audiobusio_i2sin_obj_t *self,
207207 sample_rate * bits_per_sample * 2 * 4 , // Frequency based on sample rate and bit width
208208 NULL , 0 , // init
209209 NULL , 0 , // may_exec
210- NULL , 1 , 0 , 0xffffffff , // out pin
210+ NULL , 1 , 0 , 0 , // out pin
211211 data , 1 , // in pins
212212 0 , 0 , // in pulls
213- NULL , 0 , 0 , 0x1f , // set pins
213+ NULL , 1 , 0 , 0 , // set pins
214214 sideset_pin , 2 , false, 0 , 0x1f , // sideset pins
215215 false, // No sideset enable
216216 NULL , PULL_NONE , // jump pin
@@ -269,7 +269,7 @@ void audiobusio_i2sin_reset_buffer(audiobusio_i2sin_obj_t *self,
269269 common_hal_rp2pio_statemachine_restart (& self -> state_machine );
270270
271271 // Send bit width
272- const uint8_t bit_width_data [1 ] = { self -> bits_per_sample };
272+ const uint8_t bit_width_data [1 ] = { self -> bits_per_sample - 2 };
273273 common_hal_rp2pio_statemachine_write (& self -> state_machine , bit_width_data , 1 , 1 , false);
274274
275275 audio_dma_result result = audio_dma_setup_record (
0 commit comments