mirror of
https://github.com/polpo/picogus.git
synced 2026-10-25 21:40:16 +00:00
spdif experiment
This commit is contained in:
1 parent
0e0819d5d9
commit
0c1008d59a
3 files changed
+45
-20
No files matched your search
+11
-7
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user