14#define PCM_FIFO_SIZE 2048
16#include "dac8311_rp2040_drv.h"
17#include "dac8311.pio.h"
19dac8311_rp2040_drv::dac8311_rp2040_drv( gpio_pin_t mosi_pin,
29 mosi.setSEL(_IO_BANK0_::GPIO_CTRL_FUNCSEL__pio0);
30 sclk.setSEL(_IO_BANK0_::GPIO_CTRL_FUNCSEL__pio0);
31 sync.setSEL(_IO_BANK0_::GPIO_CTRL_FUNCSEL__pio0);
32 _enable.gpioMode(GPIO::OUTPUT | GPIO::INIT_HIGH);
35 _pcm_sm = pio_rp2040::pio0.loadProgram(dac8311_program);
36 configure_SM(_pcm_sm, mosi_pin, sclk_pin, sync_pin);
37 _pcm_sm->attachIrq([
this]() ->
void {
40 while (!_pcm_sm->TxFifoFull()) {
42 if (pcmFifoGet(pcm_value)) {
45 val = (pcm_value.left + pcm_value.right) / 2;
52 _pcm_sm->writeTxFifo((val + 32768) << 14);
60void dac8311_rp2040_drv::setPcmRate(uint32_t Hz) {