Moderadores: andre_luis, 51
#define DAC_BUFFER_SIZE 256
static uint16_t dac_dma_buffer[DAC_BUFFER_SIZE * 2];
void dac_buffer_feed(uint16_t *dst, uint16_t len)
{
for (; len; --len)
*dst++ = new_value;
}
void dma_start()
{
for (; (DMA1_Channel3->CCR & DMA_CCR_EN); DMA1_Channel3->CCR = 0);
DMA1_Channel3->CPAR = (uint32_t)&DAC->DAC_DHR12RD;
DMA1_Channel3->CMAR = (uint32_t)dac_dma_buffer;
DMA1_Channel3->CNDTR = (sizeof(dac_dma_buffer) / sizeof(dac_dma_buffer[0]));
DMA1_Channel3->CCR = (DMA_CCR_MSIZE_0 | DMA_CCR_PSIZE_0 | DMA_CCR_MINC | DMA_CCR_CIRC | DMA_CCR_DIR | DMA_CCR_TEIE | DMA_CCR_HTIE | DMA_CCR_TCIE);
DMA1_Channel3->CCR |= (DMA_CCR_EN);
NVIC_EnableIRQ(DMA1_Channel3_IRQn);
}
void DMA1_Channel3_IRQHandler()
{
register unsigned int isr = DMA1->ISR;
DMA1->IFCR = (DMA_IFCR_CTEIF1 | DMA_IFCR_CHTIF1 | DMA_IFCR_CTCIF1 | DMA_IFCR_CGIF1);
if (isr & DMA_ISR_TEIF1)
{
}
if (isr & DMA_ISR_HTIF1) // HALF
{
dac_buffer_feed(dac_dma_buffer, DAC_BUFFER_SIZE);
}
else if (isr & DMA_ISR_TCIF1) // COMPLETE
{
dac_buffer_feed(dac_dma_buffer + DAC_BUFFER_SIZE, DAC_BUFFER_SIZE);
}
}
Voltar para STMicroelectronics
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante