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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy