spdif experiment

This commit is contained in:
Ian Scott committed 2024-04-25 20:18:38 -06:00
1 parent 0e0819d5d9
commit 0c1008d59a
3 files changed
+45 -20

No files matched your search

+11 -7
View File
@@ -55,13 +55,17 @@ add_executable(picogus picogus.cpp)
pico_set_program_version(picogus ${CMAKE_PROJECT_VERSION})
add_compile_definitions(
USE_AUDIO_I2S=1
PICO_AUDIO_I2S_DATA_PIN=16
PICO_AUDIO_I2S_CLOCK_PIN_BASE=17
# USE_AUDIO_I2S=1
# PICO_AUDIO_I2S_DATA_PIN=16
# PICO_AUDIO_I2S_CLOCK_PIN_BASE=17
PICO_DEFAULT_UART=0
PICO_DEFAULT_UART_TX_PIN=28
PICO_DEFAULT_UART_TX_PIN=-1
PICO_DEFAULT_UART_RX_PIN=-1
PICO_AUDIO_I2S_PIO=1
# PICO_AUDIO_I2S_PIO=1
PICO_AUDIO_SPDIF_PIN=28
PICO_AUDIO_SPDIF_DMA_IRQ=0
PICO_AUDIO_SPDIF_PIO=1
# USE_IRQ=1
USE_ALARM=1
PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS=250
@@ -111,7 +115,7 @@ if(PROJECT_TYPE STREQUAL "GUS")
)
pico_enable_stdio_uart(picogus 0)
else()
pico_enable_stdio_uart(picogus 1)
pico_enable_stdio_uart(picogus 0)
endif()
pico_enable_stdio_usb(picogus 0)
pico_enable_stdio_semihosting(picogus 0)
@@ -231,7 +235,7 @@ target_link_libraries(
picogus
pico_stdlib
pico_multicore
pico_audio_i2s
pico_audio_spdif
hardware_pio
hardware_pll
hardware_flash
+33 -13
View File
@@ -14,7 +14,8 @@
#endif
#include "pico/stdlib.h"
#include "pico/audio_i2s.h"
// #include "pico/audio_i2s.h"
#include "pico/audio_spdif.h"
#ifdef USE_ALARM
#include "pico_pic.h"
@@ -27,10 +28,10 @@
extern psram_spi_inst_t psram_spi;
#endif
#if PICO_ON_DEVICE
#include "pico/binary_info.h"
bi_decl(bi_3pins_with_names(PICO_AUDIO_I2S_DATA_PIN, "I2S DIN", PICO_AUDIO_I2S_CLOCK_PIN_BASE, "I2S BCK", PICO_AUDIO_I2S_CLOCK_PIN_BASE+1, "I2S LRCK"));
#endif
// #if PICO_ON_DEVICE
// #include "pico/binary_info.h"
// bi_decl(bi_3pins_with_names(PICO_AUDIO_I2S_DATA_PIN, "I2S DIN", PICO_AUDIO_I2S_CLOCK_PIN_BASE, "I2S BCK", PICO_AUDIO_I2S_CLOCK_PIN_BASE+1, "I2S LRCK"));
// #endif
#include "isa_dma.h"
extern irq_handler_t GUS_DMA_isr_pt;
@@ -58,22 +59,40 @@ struct audio_buffer_pool *init_audio() {
SAMPLES_PER_BUFFER); // todo correct size
bool __unused ok;
const struct audio_format *output_format;
struct audio_i2s_config config = {
.data_pin = PICO_AUDIO_I2S_DATA_PIN,
.clock_pin_base = PICO_AUDIO_I2S_CLOCK_PIN_BASE,
.dma_channel = 6,
.pio_sm = 3,
// struct audio_i2s_config config = {
// .data_pin = PICO_AUDIO_I2S_DATA_PIN,
// .clock_pin_base = PICO_AUDIO_I2S_CLOCK_PIN_BASE,
// .dma_channel = 6,
// .pio_sm = 3,
// };
//
const struct audio_spdif_config config = {
.pin = 28,
.dma_channel = 6,
.pio_sm = 3
};
output_format = audio_i2s_setup(&audio_format, &config);
// output_format = audio_i2s_setup(&audio_format, &config);
output_format = audio_spdif_setup(&audio_format, &config);
if (!output_format) {
panic("PicoAudio: Unable to open audio device.\n");
}
//ok = audio_i2s_connect(producer_pool);
ok = audio_i2s_connect_extra(producer_pool, false, 1, SAMPLES_PER_BUFFER, NULL);
// bool audio_i2s_connect_extra(audio_buffer_pool_t *producer, bool buffer_on_give, uint buffer_count,
// uint samples_per_buffer, audio_connection_t *connection);
// ok = audio_i2s_connect_extra(producer_pool, false, 1, SAMPLES_PER_BUFFER, NULL);
// bool audio_spdif_connect_extra(audio_buffer_pool_t *producer, bool buffer_on_give, uint buffer_count,
// audio_connection_t *connection);
ok = audio_spdif_connect_extra(producer_pool, false, 1, NULL);
assert(ok);
audio_i2s_set_enabled(true);
// audio_i2s_set_enabled(true);
audio_spdif_set_enabled(true);
return producer_pool;
}
@@ -122,6 +141,7 @@ void play_gus() {
struct audio_buffer_pool *ap = init_audio();
for (;;) {
gpio_xor_mask(1u << PICO_DEFAULT_LED_PIN);
// uint8_t active_voices = GUS_activeChannels();
uint32_t playback_rate = GUS_basefreq();
// if GUS sample rate changed
+1
View File
@@ -766,6 +766,7 @@ int main()
}
gpio_set_function(UART_TX_PIN, GPIO_FUNC_UART);
#endif // SOUND_MPU
gpio_set_drive_strength(UART_TX_PIN, GPIO_DRIVE_STRENGTH_12MA);
#ifdef PSRAM_CORE0
#ifdef PSRAM