From fdc4abfecab6bcbae61c6f90a93266fc52fc0cef Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 14 Apr 2025 17:03:35 -0400 Subject: [PATCH 1/5] uniform swap now --- data/nvm.toml | 2 +- .../common-hal/audiobusio/I2SOut.c | 234 ++++++++++-------- 2 files changed, 131 insertions(+), 105 deletions(-) diff --git a/data/nvm.toml b/data/nvm.toml index 8bca037b052a4..6b678f15e378e 160000 --- a/data/nvm.toml +++ b/data/nvm.toml @@ -1 +1 @@ -Subproject commit 8bca037b052a4a4dc46a56a25a1b802652ee3f47 +Subproject commit 6b678f15e378edce820f2ffdef3286b3e55449e7 diff --git a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c index 591d71632c962..4ce13929e9e4c 100644 --- a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c +++ b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c @@ -19,122 +19,148 @@ #include "bindings/rp2pio/StateMachine.h" const uint16_t i2s_program[] = { -// ; Load the next set of samples -// ; /--- LRCLK -// ; |/-- BCLK -// ; || -// pull noblock side 0b01 ; Loads OSR with the next FIFO value or X - 0x8880, -// mov x osr side 0b01 ; Save the new value in case we need it again - 0xa827, -// set y 14 side 0b01 - 0xe84e, -// bitloop1: -// out pins 1 side 0b00 [2] - 0x6201, -// jmp y-- bitloop1 side 0b01 [2] - 0x0a83, -// out pins 1 side 0b10 [2] - 0x7201, -// set y 14 side 0b11 [2] - 0xfa4e, -// bitloop0: -// out pins 1 side 0b10 [2] - 0x7201, -// jmp y-- bitloop0 side 0b11 [2] - 0x1a87, -// out pins 1 side 0b00 [2] - 0x6201 +/* +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- LRCLK + ; |/-- BCLK + ; || + pull noblock side 0b01 ; Loads OSR with the next FIFO value or X + mov x osr side 0b01 ; Save the new value in case we need it again + set y 14 side 0b01 +bitloop1: + out pins 1 side 0b00 [2] + jmp y-- bitloop1 side 0b01 [2] + out pins 1 side 0b10 [2] + set y 14 side 0b11 [2] +bitloop0: + out pins 1 side 0b10 [2] + jmp y-- bitloop0 side 0b11 [2] + out pins 1 side 0b00 [2] +*/ + // Above assembled with pioasm. + 0x8880, // 0: pull noblock side 1 + 0xa827, // 1: mov x, osr side 1 + 0xe84e, // 2: set y, 14 side 1 + 0x6201, // 3: out pins, 1 side 0 [2] + 0x0a83, // 4: jmp y--, 3 side 1 [2] + 0x7201, // 5: out pins, 1 side 2 [2] + 0xfa4e, // 6: set y, 14 side 3 [2] + 0x7201, // 7: out pins, 1 side 2 [2] + 0x1a87, // 8: jmp y--, 7 side 3 [2] + 0x6201, // 9: out pins, 1 side 0 [2] }; + const uint16_t i2s_program_left_justified[] = { -// ; Load the next set of samples -// ; /--- LRCLK -// ; |/-- BCLK -// ; || -// pull noblock side 0b11 ; Loads OSR with the next FIFO value or X - 0x9880, -// mov x osr side 0b11 ; Save the new value in case we need it again - 0xb827, -// set y 14 side 0b11 - 0xf84e, -// bitloop1: -// out pins 1 side 0b00 [2] - 0x6201, -// jmp y-- bitloop1 side 0b01 [2] - 0x0a83, -// out pins 1 side 0b00 [2] - 0x6201, -// set y 14 side 0b01 [2] - 0xea4e, -// bitloop0: -// out pins 1 side 0b10 [2] - 0x7201, -// jmp y-- bitloop0 side 0b11 [2] - 0x1a87, -// out pins 1 side 0b10 [2] - 0x7201 +/* +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- LRCLK + ; |/-- BCLK + ; || + pull noblock side 0b11 ; Loads OSR with the next FIFO value or X + mov x osr side 0b11 ; Save the new value in case we need it again + set y 14 side 0b11 +bitloop1: + out pins 1 side 0b00 [2] + jmp y-- bitloop1 side 0b01 [2] + out pins 1 side 0b00 [2] + set y 14 side 0b01 [2] +bitloop0: + out pins 1 side 0b10 [2] + jmp y-- bitloop0 side 0b11 [2] + out pins 1 side 0b10 [2] +*/ + // Above assembled with pioasm. + 0x9880, // 0: pull noblock side 3 + 0xb827, // 1: mov x, osr side 3 + 0xf84e, // 2: set y, 14 side 3 + 0x6201, // 3: out pins, 1 side 0 [2] + 0x0a83, // 4: jmp y--, 3 side 1 [2] + 0x6201, // 5: out pins, 1 side 0 [2] + 0xea4e, // 6: set y, 14 side 1 [2] + 0x7201, // 7: out pins, 1 side 2 [2] + 0x1a87, // 8: jmp y--, 7 side 3 [2] + 0x7201, // 9: out pins, 1 side 2 [2] }; // Another version of i2s_program with the LRCLC and BCLK pin swapped const uint16_t i2s_program_swap[] = { -// ; Load the next set of samples -// ; /--- BCLK -// ; |/-- LRCLK -// ; || -// pull noblock side 0b11 ; Loads OSR with the next FIFO value or X - 0x9880, -// mov x osr side 0b11 ; Save the new value in case we need it again - 0xb827, -// set y 14 side 0b11 - 0xf84e, -// bitloop1: -// out pins 1 side 0b01 [2] - 0x6a01, -// jmp y-- bitloop1 side 0b11 [2] - 0x1a83, -// out pins 1 side 0b00 [2] - 0x6201, -// set y 14 side 0b10 [2] - 0xf24e, -// bitloop0: -// out pins 1 side 0b00 [2] - 0x6201, -// jmp y-- bitloop0 side 0b10 [2] - 0x1287, -// out pins 1 side 0b01 [2] - 0x6a01 +/* +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- BCLK + ; |/-- LRCLK + ; || + pull noblock side 0b10 ; Loads OSR with the next FIFO value or X + mov x osr side 0b10 ; Save the new value in case we need it again + set y 14 side 0b10 +bitloop1: + out pins 1 side 0b00 [2] + jmp y-- bitloop1 side 0b10 [2] + out pins 1 side 0b01 [2] + set y 14 side 0b11 [2] +bitloop0: + out pins 1 side 0b01 [2] + jmp y-- bitloop0 side 0b11 [2] + out pins 1 side 0b00 [2] +*/ + // Above assembled with pioasm. + 0x9080, // 0: pull noblock side 2 + 0xb027, // 1: mov x, osr side 2 + 0xf04e, // 2: set y, 14 side 2 + 0x6201, // 3: out pins, 1 side 0 [2] + 0x1283, // 4: jmp y--, 3 side 2 [2] + 0x6a01, // 5: out pins, 1 side 1 [2] + 0xfa4e, // 6: set y, 14 side 3 [2] + 0x6a01, // 7: out pins, 1 side 1 [2] + 0x1a87, // 8: jmp y--, 7 side 3 [2] + 0x6201, // 9: out pins, 1 side 0 [2] + }; // Another version of i2s_program_left_justified with the LRCLC and BCLK pin // swapped. const uint16_t i2s_program_left_justified_swap[] = { -// ; Load the next set of samples -// ; /--- BCLK -// ; |/-- LRCLK -// ; || -// pull noblock side 0b11 ; Loads OSR with the next FIFO value or X - 0x9880, -// mov x osr side 0b11 ; Save the new value in case we need it again - 0xb827, -// set y 14 side 0b11 - 0xf84e, -// bitloop1: -// out pins 1 side 0b00 [2] - 0x6201, -// jmp y-- bitloop1 side 0b10 [2] - 0x1283, -// out pins 1 side 0b00 [2] - 0x6201, -// set y 14 side 0b10 [2] - 0xf24e, -// bitloop0: -// out pins 1 side 0b01 [2] - 0x6a01, -// jmp y-- bitloop0 side 0b11 [2] - 0x1a87, -// out pins 1 side 0b01 [2] - 0x6a01 +/* +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- BCLK + ; |/-- LRCLK + ; || + pull noblock side 0b11 ; Loads OSR with the next FIFO value or X + mov x osr side 0b11 ; Save the new value in case we need it again + set y 14 side 0b11 +bitloop1: + out pins 1 side 0b00 [2] + jmp y-- bitloop1 side 0b10 [2] + out pins 1 side 0b00 [2] + set y 14 side 0b10 [2] +bitloop0: + out pins 1 side 0b01 [2] + jmp y-- bitloop0 side 0b11 [2] + out pins 1 side 0b01 [2] +*/ + // Above assembled with pioasm. + 0x9880, // 0: pull noblock side 3 + 0xb827, // 1: mov x, osr side 3 + 0xf84e, // 2: set y, 14 side 3 + 0x6201, // 3: out pins, 1 side 0 [2] + 0x1283, // 4: jmp y--, 3 side 2 [2] + 0x6201, // 5: out pins, 1 side 0 [2] + 0xf24e, // 6: set y, 14 side 2 [2] + 0x6a01, // 7: out pins, 1 side 1 [2] + 0x1a87, // 8: jmp y--, 7 side 3 [2] + 0x6a01, // 9: out pins, 1 side 1 [2] }; void i2sout_reset(void) { From 122ea2f43f466e5f21a1b3feb207456e764dc1e1 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 14 Apr 2025 17:49:27 -0400 Subject: [PATCH 2/5] raspberrypi I2SOut: fix flipped stereo channels --- .../common-hal/audiobusio/I2SOut.c | 145 +++++++++--------- .../raspberrypi/common-hal/audiobusio/i2s.pio | 25 +++ .../common-hal/audiobusio/i2s_left.pio | 25 +++ .../common-hal/audiobusio/i2s_swap.pio | 25 +++ .../common-hal/audiobusio/i2s_swap_left.pio | 25 +++ 5 files changed, 172 insertions(+), 73 deletions(-) create mode 100644 ports/raspberrypi/common-hal/audiobusio/i2s.pio create mode 100644 ports/raspberrypi/common-hal/audiobusio/i2s_left.pio create mode 100644 ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio create mode 100644 ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio diff --git a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c index 4ce13929e9e4c..6fd4ba109d4a5 100644 --- a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c +++ b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c @@ -27,70 +27,107 @@ const uint16_t i2s_program[] = { ; /--- LRCLK ; |/-- BCLK ; || + pull noblock side 0b11 ; Loads OSR with the next FIFO value or X + mov x osr side 0b11 ; Save the new value in case we need it again + set y 14 side 0b11 +bitloop1: + out pins 1 side 0b10 [2] + jmp y-- bitloop1 side 0b11 [2] + out pins 1 side 0b00 [2] + set y 14 side 0b01 [2] +bitloop0: + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b01 [2] + out pins 1 side 0b10 [2] +*/ + // Above assembled with pioasm. + 0x9880, // 0: pull noblock side 3 + 0xb827, // 1: mov x, osr side 3 + 0xf84e, // 2: set y, 14 side 3 + 0x7201, // 3: out pins, 1 side 2 [2] + 0x1a83, // 4: jmp y--, 3 side 3 [2] + 0x6201, // 5: out pins, 1 side 0 [2] + 0xea4e, // 6: set y, 14 side 1 [2] + 0x6201, // 7: out pins, 1 side 0 [2] + 0x0a87, // 8: jmp y--, 7 side 1 [2] + 0x7201, // 9: out pins, 1 side 2 [2] +}; + + +const uint16_t i2s_program_left_justified[] = { +/* +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- LRCLK + ; |/-- BCLK + ; || pull noblock side 0b01 ; Loads OSR with the next FIFO value or X mov x osr side 0b01 ; Save the new value in case we need it again set y 14 side 0b01 bitloop1: - out pins 1 side 0b00 [2] - jmp y-- bitloop1 side 0b01 [2] + out pins 1 side 0b10 [2] + jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b10 [2] set y 14 side 0b11 [2] bitloop0: - out pins 1 side 0b10 [2] - jmp y-- bitloop0 side 0b11 [2] + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b01 [2] out pins 1 side 0b00 [2] */ // Above assembled with pioasm. 0x8880, // 0: pull noblock side 1 0xa827, // 1: mov x, osr side 1 0xe84e, // 2: set y, 14 side 1 - 0x6201, // 3: out pins, 1 side 0 [2] - 0x0a83, // 4: jmp y--, 3 side 1 [2] + 0x7201, // 3: out pins, 1 side 2 [2] + 0x1a83, // 4: jmp y--, 3 side 3 [2] 0x7201, // 5: out pins, 1 side 2 [2] 0xfa4e, // 6: set y, 14 side 3 [2] - 0x7201, // 7: out pins, 1 side 2 [2] - 0x1a87, // 8: jmp y--, 7 side 3 [2] + 0x6201, // 7: out pins, 1 side 0 [2] + 0x0a87, // 8: jmp y--, 7 side 1 [2] 0x6201, // 9: out pins, 1 side 0 [2] }; - -const uint16_t i2s_program_left_justified[] = { +// Another version of i2s_program with the LRCLC and BCLK pin swapped +const uint16_t i2s_program_swap[] = { /* .program i2s .side_set 2 ; Load the next set of samples - ; /--- LRCLK - ; |/-- BCLK - ; || + ; /--- BCLK + ; |/-- LRCLK + ; || pull noblock side 0b11 ; Loads OSR with the next FIFO value or X mov x osr side 0b11 ; Save the new value in case we need it again set y 14 side 0b11 bitloop1: + out pins 1 side 0b01 [2] + jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b00 [2] - jmp y-- bitloop1 side 0b01 [2] - out pins 1 side 0b00 [2] - set y 14 side 0b01 [2] + set y 14 side 0b10 [2] bitloop0: - out pins 1 side 0b10 [2] - jmp y-- bitloop0 side 0b11 [2] - out pins 1 side 0b10 [2] + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b10 [2] + out pins 1 side 0b01 [2] */ // Above assembled with pioasm. 0x9880, // 0: pull noblock side 3 0xb827, // 1: mov x, osr side 3 0xf84e, // 2: set y, 14 side 3 - 0x6201, // 3: out pins, 1 side 0 [2] - 0x0a83, // 4: jmp y--, 3 side 1 [2] + 0x6a01, // 3: out pins, 1 side 1 [2] + 0x1a83, // 4: jmp y--, 3 side 3 [2] 0x6201, // 5: out pins, 1 side 0 [2] - 0xea4e, // 6: set y, 14 side 1 [2] - 0x7201, // 7: out pins, 1 side 2 [2] - 0x1a87, // 8: jmp y--, 7 side 3 [2] - 0x7201, // 9: out pins, 1 side 2 [2] + 0xf24e, // 6: set y, 14 side 2 [2] + 0x6201, // 7: out pins, 1 side 0 [2] + 0x1287, // 8: jmp y--, 7 side 2 [2] + 0x6a01, // 9: out pins, 1 side 1 [2] }; -// Another version of i2s_program with the LRCLC and BCLK pin swapped -const uint16_t i2s_program_swap[] = { +// Another version of i2s_program_left_justified with the LRCLC and BCLK pin +// swapped. +const uint16_t i2s_program_left_justified_swap[] = { /* .program i2s .side_set 2 @@ -103,64 +140,26 @@ const uint16_t i2s_program_swap[] = { mov x osr side 0b10 ; Save the new value in case we need it again set y 14 side 0b10 bitloop1: - out pins 1 side 0b00 [2] - jmp y-- bitloop1 side 0b10 [2] + out pins 1 side 0b01 [2] + jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b01 [2] set y 14 side 0b11 [2] bitloop0: - out pins 1 side 0b01 [2] - jmp y-- bitloop0 side 0b11 [2] + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b10 [2] out pins 1 side 0b00 [2] */ // Above assembled with pioasm. 0x9080, // 0: pull noblock side 2 0xb027, // 1: mov x, osr side 2 0xf04e, // 2: set y, 14 side 2 - 0x6201, // 3: out pins, 1 side 0 [2] - 0x1283, // 4: jmp y--, 3 side 2 [2] + 0x6a01, // 3: out pins, 1 side 1 [2] + 0x1a83, // 4: jmp y--, 3 side 3 [2] 0x6a01, // 5: out pins, 1 side 1 [2] 0xfa4e, // 6: set y, 14 side 3 [2] - 0x6a01, // 7: out pins, 1 side 1 [2] - 0x1a87, // 8: jmp y--, 7 side 3 [2] + 0x6201, // 7: out pins, 1 side 0 [2] + 0x1287, // 8: jmp y--, 7 side 2 [2] 0x6201, // 9: out pins, 1 side 0 [2] - -}; - -// Another version of i2s_program_left_justified with the LRCLC and BCLK pin -// swapped. -const uint16_t i2s_program_left_justified_swap[] = { -/* -.program i2s -.side_set 2 - -; Load the next set of samples - ; /--- BCLK - ; |/-- LRCLK - ; || - pull noblock side 0b11 ; Loads OSR with the next FIFO value or X - mov x osr side 0b11 ; Save the new value in case we need it again - set y 14 side 0b11 -bitloop1: - out pins 1 side 0b00 [2] - jmp y-- bitloop1 side 0b10 [2] - out pins 1 side 0b00 [2] - set y 14 side 0b10 [2] -bitloop0: - out pins 1 side 0b01 [2] - jmp y-- bitloop0 side 0b11 [2] - out pins 1 side 0b01 [2] -*/ - // Above assembled with pioasm. - 0x9880, // 0: pull noblock side 3 - 0xb827, // 1: mov x, osr side 3 - 0xf84e, // 2: set y, 14 side 3 - 0x6201, // 3: out pins, 1 side 0 [2] - 0x1283, // 4: jmp y--, 3 side 2 [2] - 0x6201, // 5: out pins, 1 side 0 [2] - 0xf24e, // 6: set y, 14 side 2 [2] - 0x6a01, // 7: out pins, 1 side 1 [2] - 0x1a87, // 8: jmp y--, 7 side 3 [2] - 0x6a01, // 9: out pins, 1 side 1 [2] }; void i2sout_reset(void) { diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s.pio b/ports/raspberrypi/common-hal/audiobusio/i2s.pio new file mode 100644 index 0000000000000..057afcb560663 --- /dev/null +++ b/ports/raspberrypi/common-hal/audiobusio/i2s.pio @@ -0,0 +1,25 @@ +; This file is part of the CircuitPython project: https://circuitpython.org +; +; SPDX-FileCopyrightText: Copyright (c) 2025 Dan Halbert for Adafruit Industries +; +; SPDX-License-Identifier: MIT + +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- LRCLK + ; |/-- BCLK + ; || + pull noblock side 0b11 ; Loads OSR with the next FIFO value or X + mov x osr side 0b11 ; Save the new value in case we need it again + set y 14 side 0b11 +bitloop1: + out pins 1 side 0b10 [2] + jmp y-- bitloop1 side 0b11 [2] + out pins 1 side 0b00 [2] + set y 14 side 0b01 [2] +bitloop0: + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b01 [2] + out pins 1 side 0b10 [2] diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s_left.pio b/ports/raspberrypi/common-hal/audiobusio/i2s_left.pio new file mode 100644 index 0000000000000..059ed87c6eb42 --- /dev/null +++ b/ports/raspberrypi/common-hal/audiobusio/i2s_left.pio @@ -0,0 +1,25 @@ +; This file is part of the CircuitPython project: https://circuitpython.org +; +; SPDX-FileCopyrightText: Copyright (c) 2025 Dan Halbert for Adafruit Industries +; +; SPDX-License-Identifier: MIT + +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- LRCLK + ; |/-- BCLK + ; || + pull noblock side 0b01 ; Loads OSR with the next FIFO value or X + mov x osr side 0b01 ; Save the new value in case we need it again + set y 14 side 0b01 +bitloop1: + out pins 1 side 0b10 [2] + jmp y-- bitloop1 side 0b11 [2] + out pins 1 side 0b10 [2] + set y 14 side 0b11 [2] +bitloop0: + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b01 [2] + out pins 1 side 0b00 [2] diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio b/ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio new file mode 100644 index 0000000000000..f3c48765c011b --- /dev/null +++ b/ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio @@ -0,0 +1,25 @@ +; This file is part of the CircuitPython project: https://circuitpython.org +; +; SPDX-FileCopyrightText: Copyright (c) 2025 Dan Halbert for Adafruit Industries +; +; SPDX-License-Identifier: MIT + +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- BCLK + ; |/-- LRCLK + ; || + pull noblock side 0b11 ; Loads OSR with the next FIFO value or X + mov x osr side 0b11 ; Save the new value in case we need it again + set y 14 side 0b11 +bitloop1: + out pins 1 side 0b01 [2] + jmp y-- bitloop1 side 0b11 [2] + out pins 1 side 0b00 [2] + set y 14 side 0b10 [2] +bitloop0: + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b10 [2] + out pins 1 side 0b01 [2] diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio b/ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio new file mode 100644 index 0000000000000..925a10caa57d4 --- /dev/null +++ b/ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio @@ -0,0 +1,25 @@ +; This file is part of the CircuitPython project: https://circuitpython.org +; +; SPDX-FileCopyrightText: Copyright (c) 2025 Dan Halbert for Adafruit Industries +; +; SPDX-License-Identifier: MIT + +.program i2s +.side_set 2 + +; Load the next set of samples + ; /--- BCLK + ; |/-- LRCLK + ; || + pull noblock side 0b10 ; Loads OSR with the next FIFO value or X + mov x osr side 0b10 ; Save the new value in case we need it again + set y 14 side 0b10 +bitloop1: + out pins 1 side 0b01 [2] + jmp y-- bitloop1 side 0b11 [2] + out pins 1 side 0b01 [2] + set y 14 side 0b11 [2] +bitloop0: + out pins 1 side 0b00 [2] + jmp y-- bitloop0 side 0b10 [2] + out pins 1 side 0b00 [2] From 1e29c6a222bbfddde71376994331802955f8b6eb Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 14 Apr 2025 18:37:48 -0400 Subject: [PATCH 3/5] address review --- data/nvm.toml | 2 +- ports/raspberrypi/common-hal/audiobusio/I2SOut.c | 16 ++++++++-------- ports/raspberrypi/common-hal/audiobusio/i2s.pio | 4 ++-- .../common-hal/audiobusio/i2s_left.pio | 4 ++-- .../common-hal/audiobusio/i2s_swap.pio | 4 ++-- .../common-hal/audiobusio/i2s_swap_left.pio | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/data/nvm.toml b/data/nvm.toml index 6b678f15e378e..8bca037b052a4 160000 --- a/data/nvm.toml +++ b/data/nvm.toml @@ -1 +1 @@ -Subproject commit 6b678f15e378edce820f2ffdef3286b3e55449e7 +Subproject commit 8bca037b052a4a4dc46a56a25a1b802652ee3f47 diff --git a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c index 6fd4ba109d4a5..bc9adc0162dd5 100644 --- a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c +++ b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c @@ -31,12 +31,12 @@ const uint16_t i2s_program[] = { mov x osr side 0b11 ; Save the new value in case we need it again set y 14 side 0b11 bitloop1: - out pins 1 side 0b10 [2] + out pins 1 side 0b10 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b00 [2] set y 14 side 0b01 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b01 [2] out pins 1 side 0b10 [2] */ @@ -67,12 +67,12 @@ const uint16_t i2s_program_left_justified[] = { mov x osr side 0b01 ; Save the new value in case we need it again set y 14 side 0b01 bitloop1: - out pins 1 side 0b10 [2] + out pins 1 side 0b10 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b10 [2] set y 14 side 0b11 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b01 [2] out pins 1 side 0b00 [2] */ @@ -103,12 +103,12 @@ const uint16_t i2s_program_swap[] = { mov x osr side 0b11 ; Save the new value in case we need it again set y 14 side 0b11 bitloop1: - out pins 1 side 0b01 [2] + out pins 1 side 0b01 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b00 [2] set y 14 side 0b10 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b10 [2] out pins 1 side 0b01 [2] */ @@ -140,12 +140,12 @@ const uint16_t i2s_program_left_justified_swap[] = { mov x osr side 0b10 ; Save the new value in case we need it again set y 14 side 0b10 bitloop1: - out pins 1 side 0b01 [2] + out pins 1 side 0b01 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b01 [2] set y 14 side 0b11 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b10 [2] out pins 1 side 0b00 [2] */ diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s.pio b/ports/raspberrypi/common-hal/audiobusio/i2s.pio index 057afcb560663..b3557eeb918a9 100644 --- a/ports/raspberrypi/common-hal/audiobusio/i2s.pio +++ b/ports/raspberrypi/common-hal/audiobusio/i2s.pio @@ -15,11 +15,11 @@ mov x osr side 0b11 ; Save the new value in case we need it again set y 14 side 0b11 bitloop1: - out pins 1 side 0b10 [2] + out pins 1 side 0b10 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b00 [2] set y 14 side 0b01 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b01 [2] out pins 1 side 0b10 [2] diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s_left.pio b/ports/raspberrypi/common-hal/audiobusio/i2s_left.pio index 059ed87c6eb42..4830ec420782d 100644 --- a/ports/raspberrypi/common-hal/audiobusio/i2s_left.pio +++ b/ports/raspberrypi/common-hal/audiobusio/i2s_left.pio @@ -15,11 +15,11 @@ mov x osr side 0b01 ; Save the new value in case we need it again set y 14 side 0b01 bitloop1: - out pins 1 side 0b10 [2] + out pins 1 side 0b10 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b10 [2] set y 14 side 0b11 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b01 [2] out pins 1 side 0b00 [2] diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio b/ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio index f3c48765c011b..a7ecf94c764bc 100644 --- a/ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio +++ b/ports/raspberrypi/common-hal/audiobusio/i2s_swap.pio @@ -15,11 +15,11 @@ mov x osr side 0b11 ; Save the new value in case we need it again set y 14 side 0b11 bitloop1: - out pins 1 side 0b01 [2] + out pins 1 side 0b01 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b00 [2] set y 14 side 0b10 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b10 [2] out pins 1 side 0b01 [2] diff --git a/ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio b/ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio index 925a10caa57d4..4e6373dd65a1e 100644 --- a/ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio +++ b/ports/raspberrypi/common-hal/audiobusio/i2s_swap_left.pio @@ -15,11 +15,11 @@ mov x osr side 0b10 ; Save the new value in case we need it again set y 14 side 0b10 bitloop1: - out pins 1 side 0b01 [2] + out pins 1 side 0b01 [2] ; Right channel first jmp y-- bitloop1 side 0b11 [2] out pins 1 side 0b01 [2] set y 14 side 0b11 [2] bitloop0: - out pins 1 side 0b00 [2] + out pins 1 side 0b00 [2] ; Then left channel jmp y-- bitloop0 side 0b10 [2] out pins 1 side 0b00 [2] From 0ddaf755bc336fabc671c5a47dd34dfa4a53c13e Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Mon, 14 Apr 2025 20:35:10 -0400 Subject: [PATCH 4/5] add README.pio, mostly to force another build --- ports/raspberrypi/common-hal/audiobusio/README.pio | 1 + 1 file changed, 1 insertion(+) create mode 100644 ports/raspberrypi/common-hal/audiobusio/README.pio diff --git a/ports/raspberrypi/common-hal/audiobusio/README.pio b/ports/raspberrypi/common-hal/audiobusio/README.pio new file mode 100644 index 0000000000000..127a1cf90b4a4 --- /dev/null +++ b/ports/raspberrypi/common-hal/audiobusio/README.pio @@ -0,0 +1 @@ +.pio files right now are compiled by hand with pico-sdk/tools/pioasm and inserted into I2SOut.c From 6b99053119307119b57ffceae2da2f0aec134aa0 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 15 Apr 2025 12:49:04 -0400 Subject: [PATCH 5/5] Explicate .pio file usage --- ports/raspberrypi/common-hal/audiobusio/I2SOut.c | 13 +++++++++---- ports/raspberrypi/common-hal/audiobusio/README.pio | 6 ++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c index bc9adc0162dd5..d29f50b06b827 100644 --- a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c +++ b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c @@ -19,7 +19,9 @@ #include "bindings/rp2pio/StateMachine.h" const uint16_t i2s_program[] = { -/* + +/* From i2s.pio: + .program i2s .side_set 2 @@ -55,7 +57,8 @@ const uint16_t i2s_program[] = { const uint16_t i2s_program_left_justified[] = { -/* +/* From i2s_left.pio: + .program i2s .side_set 2 @@ -91,7 +94,8 @@ const uint16_t i2s_program_left_justified[] = { // Another version of i2s_program with the LRCLC and BCLK pin swapped const uint16_t i2s_program_swap[] = { -/* +/* From i2s_swap.pio: + .program i2s .side_set 2 @@ -128,7 +132,8 @@ const uint16_t i2s_program_swap[] = { // Another version of i2s_program_left_justified with the LRCLC and BCLK pin // swapped. const uint16_t i2s_program_left_justified_swap[] = { -/* +/* From i2s_swap_left.pio: + .program i2s .side_set 2 diff --git a/ports/raspberrypi/common-hal/audiobusio/README.pio b/ports/raspberrypi/common-hal/audiobusio/README.pio index 127a1cf90b4a4..53c73fbc19954 100644 --- a/ports/raspberrypi/common-hal/audiobusio/README.pio +++ b/ports/raspberrypi/common-hal/audiobusio/README.pio @@ -1 +1,7 @@ .pio files right now are compiled by hand with pico-sdk/tools/pioasm and inserted into I2SOut.c + +i2s.pio regular pin order, not left_justified +i2s_left.pio regular pin order, left_justified + +i2s_swap.pio swapped pin order, not left_justified +i2s_swap_left.pio swapped pin order, left_justified