16#define PCM_FIFO_SIZE 2048
18#include "dac8311_rp2350_drv.h"
19#include "dac8311.pio.h"
21dac8311_rp2350_drv::dac8311_rp2350_drv( gpio_pin_t mosi_pin,
31 mosi.setSEL(_IO_BANK0_::GPIO_CTRL_FUNCSEL__pio0);
32 sclk.setSEL(_IO_BANK0_::GPIO_CTRL_FUNCSEL__pio0);
33 sync.setSEL(_IO_BANK0_::GPIO_CTRL_FUNCSEL__pio0);
34 _enable.gpioMode(GPIO::OUTPUT | GPIO::INIT_HIGH);
37 _pcm_sm = pio_rp2350::pio0.loadProgram(dac8311_program);
38 configure_SM(_pcm_sm, mosi_pin, sclk_pin, sync_pin);
39 _pcm_sm->attachIrq([
this]() ->
void {
42 while (!_pcm_sm->TxFifoFull()) {
44 if (pcmFifoGet(pcm_value)) {
47 val = (pcm_value.left + pcm_value.right) / 2;
54 _pcm_sm->writeTxFifo((val + 32768) << 14);
62void dac8311_rp2350_drv::setPcmRate(uint32_t Hz) {