X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=bertos%2Fcpu%2Fcortex-m3%2Fdrv%2Fdac_sam3.c;h=0516fdec1d24c372b3d6296fa7b942e067b271bd;hb=563795df4180aaceb7d69306551230c98fbca879;hp=f4090468a1be751eceeab4c231b3fe84629bec06;hpb=69889bc87d372d18d6222037a098c9c02561439b;p=bertos.git diff --git a/bertos/cpu/cortex-m3/drv/dac_sam3.c b/bertos/cpu/cortex-m3/drv/dac_sam3.c index f4090468..0516fdec 100644 --- a/bertos/cpu/cortex-m3/drv/dac_sam3.c +++ b/bertos/cpu/cortex-m3/drv/dac_sam3.c @@ -276,14 +276,16 @@ static void sam3x_dac_start(struct Dac *dac, void *_buf, size_t len, size_t slic while (1) { event_wait(&buff_emtpy); + if (dac->hw->end) + break; + + remaing_size -= chunk_size; + next_idx += chunk_size; + if (remaing_size <= 0) { - DAC_TC_CCR = BV(TC_CCR_CLKDIS); - dac->hw->end = true; + remaing_size = len; next_idx = 0; - chunk_size = 0; - remaing_size = 0; - break; } dac->ctx.callback(dac, &sample_buff[next_idx], chunk_size); @@ -293,10 +295,16 @@ static void sam3x_dac_start(struct Dac *dac, void *_buf, size_t len, size_t slic static void sam3x_dac_stop(struct Dac *dac) { dac->hw->end = false; + next_idx = 0; + remaing_size = 0; + chunk_size = 0; + /* Disable the irq, timer and channel */ DACC_IDR = BV(DACC_ENDTX); DACC_PTCR |= BV(DACC_PTCR_TXTDIS); DAC_TC_CCR = BV(TC_CCR_CLKDIS); + + event_do(&buff_emtpy); }