Add critical section functions for DMAs

This commit is contained in:
Steins7 2023-09-13 21:56:30 +02:00
parent f89fe12298
commit 6269cf969a
2 changed files with 34 additions and 0 deletions

View File

@ -91,6 +91,21 @@ void dma_reset(enum DmaPeriph dma, enum DmaChannel channel)
regs->CPAR = 0;
}
void dma_exit_critical(enum DmaPeriph dma, enum DmaChannel channel)
{
switch (dma) {
case DMA_PERIPH_1:
nvic_enable(NVIC_IRQ_DMA1_CHANNEL1 + channel);
break;
case DMA_PERIPH_2:
nvic_enable(NVIC_IRQ_DMA2_CHANNEL1 + channel);
break;
default:
return;
break;
}
}
void dma_enable(enum DmaPeriph dma, enum DmaChannel channel)
{
switch (dma) {
@ -112,6 +127,21 @@ void dma_enable(enum DmaPeriph dma, enum DmaChannel channel)
}
}
void dma_enter_critical(enum DmaPeriph dma, enum DmaChannel channel)
{
switch (dma) {
case DMA_PERIPH_1:
nvic_disable(NVIC_IRQ_DMA1_CHANNEL1 + channel);
break;
case DMA_PERIPH_2:
nvic_disable(NVIC_IRQ_DMA2_CHANNEL1 + channel);
break;
default:
return;
break;
}
}
void dma_disable(enum DmaPeriph dma, enum DmaChannel channel)
{
switch (dma) {

View File

@ -90,8 +90,12 @@ void dma_configure_mem2mem(enum DmaPeriph dma, enum DmaChannel channel,
void dma_reset(enum DmaPeriph dma, enum DmaChannel channel);
void dma_exit_critical(enum DmaPeriph dma, enum DmaChannel channel);
void dma_enable(enum DmaPeriph dma, enum DmaChannel channel);
void dma_enter_critical(enum DmaPeriph dma, enum DmaChannel channel);
void dma_disable(enum DmaPeriph dma, enum DmaChannel channel);
uint16_t dma_get_remaining(enum DmaPeriph dma, enum DmaChannel channe);