/* We use event to signal the end of conversion */
-static Event data_ready;
static Dmac dmac[DMAC_CHANNEL_CNT];
static uint8_t dmac_ch_enabled;
-void dmac_configureDmacLLI(int ch, DmacDesc *lli, size_t transfer_size, uint32_t cfg, uint32_t ctrla, uint32_t ctrlb)
-{
- DMAC_CHDR = BV(ch);
-
- *dmac_ch[ch].cfg = cfg | DMAC_CFG_FIFOCFG_ALAP_CFG | (0x1 << DMAC_CFG_AHB_PROT_SHIFT);
- lli->ctrla = ctrla | (transfer_size & DMAC_CTRLA_BTSIZE_MASK);
- lli->ctrlb = ctrlb;// & ~BV(DMAC_CTRLB_IEN);
- *dmac_ch[ch].desc = (uint32_t)lli;
-}
-
-
-void dmac_configureDmaCfgLLI(int ch, DmacDesc *lli, uint32_t cfg)
+void dmac_setLLITransfer(int ch, DmacDesc *lli, uint32_t cfg)
{
DMAC_CHDR = BV(ch);
#define DMAC_ERR_CH_ALREDY_ON BV(0)
-INLINE void dmac_setSourcesLLI(int ch, DmacDesc *lli, uint32_t src, uint32_t dst, uint32_t desc)
-{
- ASSERT(lli);
- DMAC_CHDR = BV(ch);
-
- lli->src_addr = src;
- lli->dst_addr = dst;
- lli->dsc_addr = desc;
-}
-
-void dmac_configureDmaCfgLLI(int ch, DmacDesc *lli, uint32_t cfg);
-void dmac_setSourcesLLI(int ch, DmacDesc *lli, uint32_t src, uint32_t dst, uint32_t desc);
-void dmac_configureDmacLLI(int ch, DmacDesc *lli, size_t transfer_size, uint32_t cfg, uint32_t ctrla, uint32_t ctrlb);
-
+void dmac_setLLITransfer(int ch, DmacDesc *lli, uint32_t cfg);
void dmac_setSources(int ch, uint32_t src, uint32_t dst);
void dmac_configureDmac(int ch, size_t transfer_size, uint32_t cfg, uint32_t ctrla, uint32_t ctrlb);
int dmac_start(int ch);
DmacDesc *next;
DmacDesc *prev;
+bool error = false;
+uint32_t cfg;
+uint32_t ctrla;
+uint32_t ctrlb;
+
static int16_t *sample_buff;
static size_t next_idx = 0;
static size_t chunk_size = 0;
event_wait(&data_ready);
}
-bool error = false;
-uint32_t cfg;
-uint32_t ctrla;
-uint32_t ctrlb;
-
static void i2s_dmac_irq(uint32_t status)
{
I2S_STROBE_ON();
next_idx += chunk_size;
}
- dmac_configureDmaCfgLLI(I2S_DMAC_CH, &lli0, cfg);
+ dmac_setLLITransfer(I2S_DMAC_CH, &lli0, cfg);
if (dmac_start(I2S_DMAC_CH) < 0)
{
error = false;
SSC_CR = BV(SSC_TXEN);
- PIOA_CODR = BV(13);
+ I2S_STROBE_OFF();
while (1)
{