safety-reset/controller/fw/src/dma_util.c
2020-03-16 19:19:34 +01:00

46 lines
1.2 KiB
C

#include <assert.h>
#include "dma_util.h"
uint8_t dma_get_isr_and_clear(DMA_TypeDef *dma, int ch) {
uint8_t isr_val;
switch(ch) {
case 0:
isr_val = dma->LISR & 0x3f;
dma->LIFCR = isr_val;
return isr_val;
case 1:
isr_val = dma->LISR>>6 & 0x3f;
dma->LIFCR = isr_val<<6;
return isr_val;
case 2:
isr_val = dma->LISR>>16 & 0x3f;
dma->LIFCR = isr_val<<16;
return isr_val;
case 3:
isr_val = dma->LISR>>6>>16 & 0x3f;
dma->LIFCR = isr_val<<6<<16;
return isr_val;
case 4:
isr_val = dma->HISR & 0x3f;
dma->HIFCR = isr_val;
return isr_val;
case 5:
isr_val = dma->HISR>>6 & 0x3f;
dma->HIFCR = isr_val<<6;
return isr_val;
case 6:
isr_val = dma->HISR>>16 & 0x3f;
dma->HIFCR = isr_val<<16;
return isr_val;
case 7:
isr_val = dma->HISR>>6>>16 & 0x3f;
dma->HIFCR = isr_val<<6<<16;
return isr_val;
default:
assert(0);
return 0;
}
}