microHAL
An abstraction layer for your future F4xx projects
Loading...
Searching...
No Matches
dma.h
Go to the documentation of this file.
1
16#ifndef DMA_H
17#define DMA_H
18
19/* -- Includes -- */
20#include <stdint.h>
21#include "stm32f4xx.h"
22#include "defines.h"
23
24/* -- Structs -- */
28struct __attribute__((packed)) DMAStreamRegs {
29 REG32 CR;
30 REG32 NDTR;
31 REG32 PAR;
32 REG32 M0AR;
33 REG32 M1AR;
34 REG32 FCR;
35};
36
37_Static_assert((sizeof(struct DMAStreamRegs)) == (sizeof(uint32_t) * 6U),
38 "DMA Sx register struct size mismatch. Is it aligned?");
39
43struct __attribute__((packed)) DMARegs {
44 REG32 LISR;
45 REG32 HISR;
46 REG32 LIFCR;
47 REG32 HIFCR;
48 volatile struct DMAStreamRegs S[8];
49};
50
51_Static_assert((sizeof(struct DMARegs)) ==
52 (sizeof(uint32_t) * (4U + (6U * 8U))),
53 "DMA register struct size mismatch. Is it aligned?");
54
55#define DMA(x) (struct DMARegs *)(DMA1_BASE + (x * 0x400UL))
56
60struct __attribute__((packed)) DMAStreamConfig {
61 volatile _Bool Circular : 1;
62 volatile _Bool DoubleBuffer : 1;
63 volatile _Bool PerIncrement : 1;
64 volatile _Bool MemIncrement : 1;
65 volatile _Bool PerFlowCtrl : 1;
66};
67
68_Static_assert((sizeof(struct DMAStreamConfig)) == (sizeof(uint8_t) * 1U),
69 "DMA Stream config struct size mismatch. Is it aligned?");
70
74struct __attribute__((packed)) DMAStreamISR {
75 volatile _Bool HTI : 1;
76 volatile _Bool TCI : 1;
77 volatile _Bool TEI : 1;
78 volatile _Bool FEI : 1;
79 volatile _Bool DMEI : 1;
80};
81
82_Static_assert((sizeof(struct DMAStreamISR)) == (sizeof(uint8_t) * 1U),
83 "DMA Stream Interrupt struct size mismatch. Is it aligned?");
84
85/* -- Enums -- */
89typedef enum dma_peripheral {
90 DMA_PERIPH_1 = 0x00,
91 DMA_PERIPH_2 = 0x01
93
97typedef enum dma_dir {
98 DMA_DIR_PER2MEM = 0x00,
99 DMA_DIR_MEM2PER = 0x01,
100 DMA_DIR_MEM2MEM = 0x02
102
106typedef enum dma_datasize {
107 DMA_DATASIZE_BYTE = 0x00,
108 DMA_DATASIZE_HWRD = 0x01,
109 DMA_DATASIZE_WORD = 0x02
111
115typedef enum dma_priority {
116 DMA_PRIORITY_LOW = 0x00,
117 DMA_PRIORITY_MED = 0x01,
118 DMA_PRIORITY_HIG = 0x02,
119 DMA_PRIORITY_VHI = 0x03
121
135void dma_set_addresses(const dma_peripheral_t dma, const uint8_t stream,
136 const uint32_t PA, const uint32_t M0A,
137 const uint32_t M1A);
138
152void dma_configure_data(const dma_peripheral_t dma, const uint8_t stream,
153 const uint16_t count, const dma_datasize_t msize,
154 const dma_datasize_t psize);
155
168void dma_set_direction(const dma_peripheral_t dma, const uint8_t stream,
169 const dma_dir_t direction);
170
182void dma_configure_stream(const dma_peripheral_t dma, const uint8_t stream,
183 const struct DMAStreamConfig config);
184
198void dma_set_channel(const dma_peripheral_t dma, const uint8_t stream,
199 const uint8_t channel, const dma_priority_t priority);
200
212void dma_set_interrupts(const dma_peripheral_t dma, const uint8_t stream,
213 const struct DMAStreamISR config);
214
222void dma_enable(const dma_peripheral_t dma, const uint8_t stream);
223
231void dma_disable(const dma_peripheral_t dma, const uint8_t stream);
232
233#endif
Defines used commonly in most files.
enum dma_datasize dma_datasize_t
Available DMA data sizes.
dma_dir
Available DMA directions.
Definition dma.h:97
void dma_set_direction(const dma_peripheral_t dma, const uint8_t stream, const dma_dir_t direction)
Set DMA transfers to the desired direction.
Definition dma.c:81
void dma_configure_stream(const dma_peripheral_t dma, const uint8_t stream, const struct DMAStreamConfig config)
Set DMA stream to the specified configuration.
Definition dma.c:105
enum dma_peripheral dma_peripheral_t
Available DMA peripherals.
void dma_configure_data(const dma_peripheral_t dma, const uint8_t stream, const uint16_t count, const dma_datasize_t msize, const dma_datasize_t psize)
Set DMA transfers to specified configuration.
Definition dma.c:43
void dma_set_channel(const dma_peripheral_t dma, const uint8_t stream, const uint8_t channel, const dma_priority_t priority)
Set the DMA stream channel and priority.
Definition dma.c:126
dma_datasize
Available DMA data sizes.
Definition dma.h:106
enum dma_priority dma_priority_t
Available DMA priorities.
void dma_disable(const dma_peripheral_t dma, const uint8_t stream)
Disables DMA stream transfers.
Definition dma.c:196
enum dma_dir dma_dir_t
Available DMA directions.
dma_priority
Available DMA priorities.
Definition dma.h:115
void dma_enable(const dma_peripheral_t dma, const uint8_t stream)
Enables DMA stream transfers.
Definition dma.c:185
void dma_set_interrupts(const dma_peripheral_t dma, const uint8_t stream, const struct DMAStreamISR config)
Enabled the specified DMA stream interrupts.
Definition dma.c:158
dma_peripheral
Available DMA peripherals.
Definition dma.h:89
void dma_set_addresses(const dma_peripheral_t dma, const uint8_t stream, const uint32_t PA, const uint32_t M0A, const uint32_t M1A)
Set the DMA source and destination addresses.
Definition dma.c:28
CMSIS device header stubs.
Contains DMA registers.
Definition dma.h:43
Contains DMA stream options.
Definition dma.h:60
Contains DMA stream interrupt configuration.
Definition dma.h:74
Contains DMA stream registers.
Definition dma.h:28