HPM SDK
HPMicro Software Development Kit
hpm_dma_regs.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 
9 #ifndef HPM_DMA_H
10 #define HPM_DMA_H
11 
12 typedef struct {
13  __R uint8_t RESERVED0[16]; /* 0x0 - 0xF: Reserved */
14  __R uint32_t DMACFG; /* 0x10: DMAC Configuration Register */
15  __R uint8_t RESERVED1[12]; /* 0x14 - 0x1F: Reserved */
16  __W uint32_t DMACTRL; /* 0x20: DMAC Control Register */
17  __W uint32_t CHABORT; /* 0x24: Channel Abort Register */
18  __R uint8_t RESERVED2[8]; /* 0x28 - 0x2F: Reserved */
19  __W uint32_t INTSTATUS; /* 0x30: Interrupt Status Register */
20  __R uint32_t CHEN; /* 0x34: Channel Enable Register */
21  __R uint8_t RESERVED3[8]; /* 0x38 - 0x3F: Reserved */
22  struct {
23  __RW uint32_t CTRL; /* 0x40: Channel n Control Register */
24  __RW uint32_t TRANSIZE; /* 0x44: Channel n Transfer Size Register */
25  __RW uint32_t SRCADDR; /* 0x48: Channel n Source Address Low Part Register */
26  __RW uint32_t SRCADDRH; /* 0x4C: Channel n Source Address High Part Register */
27  __RW uint32_t DSTADDR; /* 0x50: Channel n Destination Address Low Part Register */
28  __RW uint32_t DSTADDRH; /* 0x54: Channel n Destination Address High Part Register */
29  __RW uint32_t LLPOINTER; /* 0x58: Channel n Linked List Pointer Low Part Register */
30  __RW uint32_t LLPOINTERH; /* 0x5C: Channel n Linked List Pointer High Part Register */
31  } CHCTRL[8];
32 } DMA_Type;
33 
34 
35 /* Bitfield definition for register: DMACFG */
36 /*
37  * CHAINXFR (RO)
38  *
39  * Chain transfer
40  * 0x0: Chain transfer is not configured
41  * 0x1: Chain transfer is configured
42  */
43 #define DMA_DMACFG_CHAINXFR_MASK (0x80000000UL)
44 #define DMA_DMACFG_CHAINXFR_SHIFT (31U)
45 #define DMA_DMACFG_CHAINXFR_GET(x) (((uint32_t)(x) & DMA_DMACFG_CHAINXFR_MASK) >> DMA_DMACFG_CHAINXFR_SHIFT)
46 
47 /*
48  * REQSYNC (RO)
49  *
50  * DMA request synchronization. The DMA request synchronization should be configured to avoid signal integrity problems
51  * when the request signal is not clocked by the system bus clock, which the DMA control logic operates in.
52  * If the request synchronization is not configured, the request signal is sampled directly without synchronization.
53  * 0x0: Request synchronization is not configured
54  * 0x1: Request synchronization is configured
55  */
56 #define DMA_DMACFG_REQSYNC_MASK (0x40000000UL)
57 #define DMA_DMACFG_REQSYNC_SHIFT (30U)
58 #define DMA_DMACFG_REQSYNC_GET(x) (((uint32_t)(x) & DMA_DMACFG_REQSYNC_MASK) >> DMA_DMACFG_REQSYNC_SHIFT)
59 
60 /*
61  * DATAWIDTH (RO)
62  *
63  * AXI bus data width
64  * 0x0: 32 bits
65  * 0x1: 64 bits
66  * 0x2: 128 bits
67  * 0x3: 256 bits
68  */
69 #define DMA_DMACFG_DATAWIDTH_MASK (0x3000000UL)
70 #define DMA_DMACFG_DATAWIDTH_SHIFT (24U)
71 #define DMA_DMACFG_DATAWIDTH_GET(x) (((uint32_t)(x) & DMA_DMACFG_DATAWIDTH_MASK) >> DMA_DMACFG_DATAWIDTH_SHIFT)
72 
73 /*
74  * ADDRWIDTH (RO)
75  *
76  * AXI bus address width
77  * 0x18: 24 bits
78  * 0x19: 25 bits
79  * ...
80  * 0x40: 64 bits
81  * Others: Invalid
82  */
83 #define DMA_DMACFG_ADDRWIDTH_MASK (0xFE0000UL)
84 #define DMA_DMACFG_ADDRWIDTH_SHIFT (17U)
85 #define DMA_DMACFG_ADDRWIDTH_GET(x) (((uint32_t)(x) & DMA_DMACFG_ADDRWIDTH_MASK) >> DMA_DMACFG_ADDRWIDTH_SHIFT)
86 
87 /*
88  * CORENUM (RO)
89  *
90  * DMA core number
91  * 0x0: 1 core
92  * 0x1: 2 cores
93  */
94 #define DMA_DMACFG_CORENUM_MASK (0x10000UL)
95 #define DMA_DMACFG_CORENUM_SHIFT (16U)
96 #define DMA_DMACFG_CORENUM_GET(x) (((uint32_t)(x) & DMA_DMACFG_CORENUM_MASK) >> DMA_DMACFG_CORENUM_SHIFT)
97 
98 /*
99  * BUSNUM (RO)
100  *
101  * AXI bus interface number
102  * 0x0: 1 AXI bus
103  * 0x1: 2 AXI busses
104  */
105 #define DMA_DMACFG_BUSNUM_MASK (0x8000U)
106 #define DMA_DMACFG_BUSNUM_SHIFT (15U)
107 #define DMA_DMACFG_BUSNUM_GET(x) (((uint32_t)(x) & DMA_DMACFG_BUSNUM_MASK) >> DMA_DMACFG_BUSNUM_SHIFT)
108 
109 /*
110  * REQNUM (RO)
111  *
112  * Request/acknowledge pair number
113  * 0x0: 0 pair
114  * 0x1: 1 pair
115  * 0x2: 2 pairs
116  * ...
117  * 0x10: 16 pairs
118  */
119 #define DMA_DMACFG_REQNUM_MASK (0x7C00U)
120 #define DMA_DMACFG_REQNUM_SHIFT (10U)
121 #define DMA_DMACFG_REQNUM_GET(x) (((uint32_t)(x) & DMA_DMACFG_REQNUM_MASK) >> DMA_DMACFG_REQNUM_SHIFT)
122 
123 /*
124  * FIFODEPTH (RO)
125  *
126  * FIFO depth
127  * 0x4: 4 entries
128  * 0x8: 8 entries
129  * 0x10: 16 entries
130  * 0x20: 32 entries
131  * Others: Invalid
132  */
133 #define DMA_DMACFG_FIFODEPTH_MASK (0x3F0U)
134 #define DMA_DMACFG_FIFODEPTH_SHIFT (4U)
135 #define DMA_DMACFG_FIFODEPTH_GET(x) (((uint32_t)(x) & DMA_DMACFG_FIFODEPTH_MASK) >> DMA_DMACFG_FIFODEPTH_SHIFT)
136 
137 /*
138  * CHANNELNUM (RO)
139  *
140  * Channel number
141  * 0x1: 1 channel
142  * 0x2: 2 channels
143  * ...
144  * 0x8: 8 channels
145  * Others: Invalid
146  */
147 #define DMA_DMACFG_CHANNELNUM_MASK (0xFU)
148 #define DMA_DMACFG_CHANNELNUM_SHIFT (0U)
149 #define DMA_DMACFG_CHANNELNUM_GET(x) (((uint32_t)(x) & DMA_DMACFG_CHANNELNUM_MASK) >> DMA_DMACFG_CHANNELNUM_SHIFT)
150 
151 /* Bitfield definition for register: DMACTRL */
152 /*
153  * RESET (WO)
154  *
155  * Software reset control. Write 1 to this bit to reset the DMA core and disable all channels.
156  * Note: The software reset may cause the in-completion of AXI transaction.
157  */
158 #define DMA_DMACTRL_RESET_MASK (0x1U)
159 #define DMA_DMACTRL_RESET_SHIFT (0U)
160 #define DMA_DMACTRL_RESET_SET(x) (((uint32_t)(x) << DMA_DMACTRL_RESET_SHIFT) & DMA_DMACTRL_RESET_MASK)
161 #define DMA_DMACTRL_RESET_GET(x) (((uint32_t)(x) & DMA_DMACTRL_RESET_MASK) >> DMA_DMACTRL_RESET_SHIFT)
162 
163 /* Bitfield definition for register: CHABORT */
164 /*
165  * CHABORT (WO)
166  *
167  * Write 1 to bit n to abort channel n. The bits should only be set when the corresponding channels are enabled.
168  * Otherwise, the writes will be ignored for channels that are not enabled. (N: Number of channels)
169  */
170 #define DMA_CHABORT_CHABORT_MASK (0xFFFFFFFFUL)
171 #define DMA_CHABORT_CHABORT_SHIFT (0U)
172 #define DMA_CHABORT_CHABORT_SET(x) (((uint32_t)(x) << DMA_CHABORT_CHABORT_SHIFT) & DMA_CHABORT_CHABORT_MASK)
173 #define DMA_CHABORT_CHABORT_GET(x) (((uint32_t)(x) & DMA_CHABORT_CHABORT_MASK) >> DMA_CHABORT_CHABORT_SHIFT)
174 
175 /* Bitfield definition for register: INTSTATUS */
176 /*
177  * TC (W1C)
178  *
179  * The terminal count status, one bit per channel. The terminal count status is set when a channel transfer finishes without the abort or error event.
180  * 0x0: Channel n has no terminal count status
181  * 0x1: Channel n has terminal count status
182  */
183 #define DMA_INTSTATUS_TC_MASK (0xFF0000UL)
184 #define DMA_INTSTATUS_TC_SHIFT (16U)
185 #define DMA_INTSTATUS_TC_SET(x) (((uint32_t)(x) << DMA_INTSTATUS_TC_SHIFT) & DMA_INTSTATUS_TC_MASK)
186 #define DMA_INTSTATUS_TC_GET(x) (((uint32_t)(x) & DMA_INTSTATUS_TC_MASK) >> DMA_INTSTATUS_TC_SHIFT)
187 
188 /*
189  * ABORT (W1C)
190  *
191  * The abort status of channel, one bit per channel. The abort status is set when a channel transfer is aborted.
192  * 0x0: Channel n has no abort status
193  * 0x1: Channel n has abort status
194  */
195 #define DMA_INTSTATUS_ABORT_MASK (0xFF00U)
196 #define DMA_INTSTATUS_ABORT_SHIFT (8U)
197 #define DMA_INTSTATUS_ABORT_SET(x) (((uint32_t)(x) << DMA_INTSTATUS_ABORT_SHIFT) & DMA_INTSTATUS_ABORT_MASK)
198 #define DMA_INTSTATUS_ABORT_GET(x) (((uint32_t)(x) & DMA_INTSTATUS_ABORT_MASK) >> DMA_INTSTATUS_ABORT_SHIFT)
199 
200 /*
201  * ERROR (W1C)
202  *
203  * The error status, one bit per channel. The error status is set when a channel transfer encounters the following error events:
204  * - Bus error
205  * - Unaligned address
206  * - Unaligned transfer width
207  * - Reserved configuration
208  * 0x0: Channel n has no error status
209  * 0x1: Channel n has error status
210  */
211 #define DMA_INTSTATUS_ERROR_MASK (0xFFU)
212 #define DMA_INTSTATUS_ERROR_SHIFT (0U)
213 #define DMA_INTSTATUS_ERROR_SET(x) (((uint32_t)(x) << DMA_INTSTATUS_ERROR_SHIFT) & DMA_INTSTATUS_ERROR_MASK)
214 #define DMA_INTSTATUS_ERROR_GET(x) (((uint32_t)(x) & DMA_INTSTATUS_ERROR_MASK) >> DMA_INTSTATUS_ERROR_SHIFT)
215 
216 /* Bitfield definition for register: CHEN */
217 /*
218  * CHEN (RO)
219  *
220  * Alias of the Enable field of all ChnCtrl registers
221  */
222 #define DMA_CHEN_CHEN_MASK (0xFFFFFFFFUL)
223 #define DMA_CHEN_CHEN_SHIFT (0U)
224 #define DMA_CHEN_CHEN_GET(x) (((uint32_t)(x) & DMA_CHEN_CHEN_MASK) >> DMA_CHEN_CHEN_SHIFT)
225 
226 /* Bitfield definition for register of struct array CHCTRL: CTRL */
227 /*
228  * PRIORITY (RW)
229  *
230  * Channel priority level
231  * 0x0: Lower priority
232  * 0x1: Higher priority
233  */
234 #define DMA_CHCTRL_CTRL_PRIORITY_MASK (0x20000000UL)
235 #define DMA_CHCTRL_CTRL_PRIORITY_SHIFT (29U)
236 #define DMA_CHCTRL_CTRL_PRIORITY_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_PRIORITY_SHIFT) & DMA_CHCTRL_CTRL_PRIORITY_MASK)
237 #define DMA_CHCTRL_CTRL_PRIORITY_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_PRIORITY_MASK) >> DMA_CHCTRL_CTRL_PRIORITY_SHIFT)
238 
239 /*
240  * SRCBURSTSIZE (RW)
241  *
242  * Source burst size. This field indicates the number of transfers before DMA channel re-arbitration.
243  * The burst transfer byte number is (SrcBurstSize * SrcWidth).
244  * 0x0: 1 transfer
245  * 0x1: 2 transfers
246  * 0x2: 4 transfers
247  * 0x3: 8 transfers
248  * 0x4: 16 transfers
249  * 0x5: 32 transfers
250  * 0x6: 64 transfers
251  * 0x7: 128 transfers
252  * 0x8: 256 transfers
253  * 0x9:512 transfers
254  * 0xa: 1024 transfers
255  * 0xb-0xf: Reserved, setting this field with a reserved value triggers the error exception
256  * for XDMA, the maximum allowed value is 0xa; for HDMA, the maximum allowed value is 0x7
257  */
258 #define DMA_CHCTRL_CTRL_SRCBURSTSIZE_MASK (0xF000000UL)
259 #define DMA_CHCTRL_CTRL_SRCBURSTSIZE_SHIFT (24U)
260 #define DMA_CHCTRL_CTRL_SRCBURSTSIZE_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_SRCBURSTSIZE_SHIFT) & DMA_CHCTRL_CTRL_SRCBURSTSIZE_MASK)
261 #define DMA_CHCTRL_CTRL_SRCBURSTSIZE_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_SRCBURSTSIZE_MASK) >> DMA_CHCTRL_CTRL_SRCBURSTSIZE_SHIFT)
262 
263 /*
264  * SRCWIDTH (RW)
265  *
266  * Source transfer width
267  * 0x0: Byte transfer
268  * 0x1: Half-word transfer
269  * 0x2: Word transfer
270  * 0x3: Double word transfer
271  * 0x4: Quad word transfer
272  * 0x5: Eight word transfer
273  * 0x6-x7: Reserved, setting this field with a reserved value triggers the error exception
274  * for XDMA, the maximum allowed value is 0x3, for HDMA, the maximum allowed value is 0x2
275  */
276 #define DMA_CHCTRL_CTRL_SRCWIDTH_MASK (0xE00000UL)
277 #define DMA_CHCTRL_CTRL_SRCWIDTH_SHIFT (21U)
278 #define DMA_CHCTRL_CTRL_SRCWIDTH_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_SRCWIDTH_SHIFT) & DMA_CHCTRL_CTRL_SRCWIDTH_MASK)
279 #define DMA_CHCTRL_CTRL_SRCWIDTH_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_SRCWIDTH_MASK) >> DMA_CHCTRL_CTRL_SRCWIDTH_SHIFT)
280 
281 /*
282  * DSTWIDTH (RW)
283  *
284  * Destination transfer width.
285  * Both the total transfer byte number and the burst transfer byte number should be aligned to the destination transfer width;
286  * otherwise the error event will be triggered. For example, destination transfer width should be set as byte transfer if total transfer byte is not aligned to half-word.
287  * See field SrcBurstSize above for the definition of burst transfer byte number and section 3.2.8 for the definition of the total transfer byte number.
288  * 0x0: Byte transfer
289  * 0x1: Half-word transfer
290  * 0x2: Word transfer
291  * 0x3: Double word transfer
292  * 0x4: Quad word transfer
293  * 0x5: Eight word transfer
294  * 0x6-x7: Reserved, setting this field with a reserved value triggers the error exception
295  * for XDMA, the maximum allowed value is 0x3, for HDMA, the maximum allowed value is 0x2
296  */
297 #define DMA_CHCTRL_CTRL_DSTWIDTH_MASK (0x1C0000UL)
298 #define DMA_CHCTRL_CTRL_DSTWIDTH_SHIFT (18U)
299 #define DMA_CHCTRL_CTRL_DSTWIDTH_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_DSTWIDTH_SHIFT) & DMA_CHCTRL_CTRL_DSTWIDTH_MASK)
300 #define DMA_CHCTRL_CTRL_DSTWIDTH_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_DSTWIDTH_MASK) >> DMA_CHCTRL_CTRL_DSTWIDTH_SHIFT)
301 
302 /*
303  * SRCMODE (RW)
304  *
305  * Source DMA handshake mode
306  * 0x0: Normal mode
307  * 0x1: Handshake mode
308  */
309 #define DMA_CHCTRL_CTRL_SRCMODE_MASK (0x20000UL)
310 #define DMA_CHCTRL_CTRL_SRCMODE_SHIFT (17U)
311 #define DMA_CHCTRL_CTRL_SRCMODE_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_SRCMODE_SHIFT) & DMA_CHCTRL_CTRL_SRCMODE_MASK)
312 #define DMA_CHCTRL_CTRL_SRCMODE_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_SRCMODE_MASK) >> DMA_CHCTRL_CTRL_SRCMODE_SHIFT)
313 
314 /*
315  * DSTMODE (RW)
316  *
317  * Destination DMA handshake mode
318  * 0x0: Normal mode
319  * 0x1: Handshake mode
320  */
321 #define DMA_CHCTRL_CTRL_DSTMODE_MASK (0x10000UL)
322 #define DMA_CHCTRL_CTRL_DSTMODE_SHIFT (16U)
323 #define DMA_CHCTRL_CTRL_DSTMODE_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_DSTMODE_SHIFT) & DMA_CHCTRL_CTRL_DSTMODE_MASK)
324 #define DMA_CHCTRL_CTRL_DSTMODE_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_DSTMODE_MASK) >> DMA_CHCTRL_CTRL_DSTMODE_SHIFT)
325 
326 /*
327  * SRCADDRCTRL (RW)
328  *
329  * Source address control
330  * 0x0: Increment address
331  * 0x1: Decrement address
332  * 0x2: Fixed address
333  * 0x3: Reserved, setting the field with this value triggers the error exception
334  */
335 #define DMA_CHCTRL_CTRL_SRCADDRCTRL_MASK (0xC000U)
336 #define DMA_CHCTRL_CTRL_SRCADDRCTRL_SHIFT (14U)
337 #define DMA_CHCTRL_CTRL_SRCADDRCTRL_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_SRCADDRCTRL_SHIFT) & DMA_CHCTRL_CTRL_SRCADDRCTRL_MASK)
338 #define DMA_CHCTRL_CTRL_SRCADDRCTRL_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_SRCADDRCTRL_MASK) >> DMA_CHCTRL_CTRL_SRCADDRCTRL_SHIFT)
339 
340 /*
341  * DSTADDRCTRL (RW)
342  *
343  * Destination address control
344  * 0x0: Increment address
345  * 0x1: Decrement address
346  * 0x2: Fixed address
347  * 0x3: Reserved, setting the field with this value triggers the error exception
348  */
349 #define DMA_CHCTRL_CTRL_DSTADDRCTRL_MASK (0x3000U)
350 #define DMA_CHCTRL_CTRL_DSTADDRCTRL_SHIFT (12U)
351 #define DMA_CHCTRL_CTRL_DSTADDRCTRL_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_DSTADDRCTRL_SHIFT) & DMA_CHCTRL_CTRL_DSTADDRCTRL_MASK)
352 #define DMA_CHCTRL_CTRL_DSTADDRCTRL_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_DSTADDRCTRL_MASK) >> DMA_CHCTRL_CTRL_DSTADDRCTRL_SHIFT)
353 
354 /*
355  * SRCREQSEL (RW)
356  *
357  * Source DMA request select. Select the request/ack handshake pair that the source device is connected to.
358  */
359 #define DMA_CHCTRL_CTRL_SRCREQSEL_MASK (0xF00U)
360 #define DMA_CHCTRL_CTRL_SRCREQSEL_SHIFT (8U)
361 #define DMA_CHCTRL_CTRL_SRCREQSEL_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_SRCREQSEL_SHIFT) & DMA_CHCTRL_CTRL_SRCREQSEL_MASK)
362 #define DMA_CHCTRL_CTRL_SRCREQSEL_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_SRCREQSEL_MASK) >> DMA_CHCTRL_CTRL_SRCREQSEL_SHIFT)
363 
364 /*
365  * DSTREQSEL (RW)
366  *
367  * Destination DMA request select. Select the request/ack handshake pair that the destination device is connected to.
368  */
369 #define DMA_CHCTRL_CTRL_DSTREQSEL_MASK (0xF0U)
370 #define DMA_CHCTRL_CTRL_DSTREQSEL_SHIFT (4U)
371 #define DMA_CHCTRL_CTRL_DSTREQSEL_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_DSTREQSEL_SHIFT) & DMA_CHCTRL_CTRL_DSTREQSEL_MASK)
372 #define DMA_CHCTRL_CTRL_DSTREQSEL_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_DSTREQSEL_MASK) >> DMA_CHCTRL_CTRL_DSTREQSEL_SHIFT)
373 
374 /*
375  * INTABTMASK (RW)
376  *
377  * Channel abort interrupt mask
378  * 0x0: Allow the abort interrupt to be triggered
379  * 0x1: Disable the abort interrupt
380  */
381 #define DMA_CHCTRL_CTRL_INTABTMASK_MASK (0x8U)
382 #define DMA_CHCTRL_CTRL_INTABTMASK_SHIFT (3U)
383 #define DMA_CHCTRL_CTRL_INTABTMASK_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_INTABTMASK_SHIFT) & DMA_CHCTRL_CTRL_INTABTMASK_MASK)
384 #define DMA_CHCTRL_CTRL_INTABTMASK_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_INTABTMASK_MASK) >> DMA_CHCTRL_CTRL_INTABTMASK_SHIFT)
385 
386 /*
387  * INTERRMASK (RW)
388  *
389  * Channel error interrupt mask
390  * 0x0: Allow the error interrupt to be triggered
391  * 0x1: Disable the error interrupt
392  */
393 #define DMA_CHCTRL_CTRL_INTERRMASK_MASK (0x4U)
394 #define DMA_CHCTRL_CTRL_INTERRMASK_SHIFT (2U)
395 #define DMA_CHCTRL_CTRL_INTERRMASK_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_INTERRMASK_SHIFT) & DMA_CHCTRL_CTRL_INTERRMASK_MASK)
396 #define DMA_CHCTRL_CTRL_INTERRMASK_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_INTERRMASK_MASK) >> DMA_CHCTRL_CTRL_INTERRMASK_SHIFT)
397 
398 /*
399  * INTTCMASK (RW)
400  *
401  * Channel terminal count interrupt mask
402  * 0x0: Allow the terminal count interrupt to be triggered
403  * 0x1: Disable the terminal count interrupt
404  */
405 #define DMA_CHCTRL_CTRL_INTTCMASK_MASK (0x2U)
406 #define DMA_CHCTRL_CTRL_INTTCMASK_SHIFT (1U)
407 #define DMA_CHCTRL_CTRL_INTTCMASK_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_INTTCMASK_SHIFT) & DMA_CHCTRL_CTRL_INTTCMASK_MASK)
408 #define DMA_CHCTRL_CTRL_INTTCMASK_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_INTTCMASK_MASK) >> DMA_CHCTRL_CTRL_INTTCMASK_SHIFT)
409 
410 /*
411  * ENABLE (RW)
412  *
413  * Channel enable bit
414  * 0x0: Disable
415  * 0x1: Enable
416  */
417 #define DMA_CHCTRL_CTRL_ENABLE_MASK (0x1U)
418 #define DMA_CHCTRL_CTRL_ENABLE_SHIFT (0U)
419 #define DMA_CHCTRL_CTRL_ENABLE_SET(x) (((uint32_t)(x) << DMA_CHCTRL_CTRL_ENABLE_SHIFT) & DMA_CHCTRL_CTRL_ENABLE_MASK)
420 #define DMA_CHCTRL_CTRL_ENABLE_GET(x) (((uint32_t)(x) & DMA_CHCTRL_CTRL_ENABLE_MASK) >> DMA_CHCTRL_CTRL_ENABLE_SHIFT)
421 
422 /* Bitfield definition for register of struct array CHCTRL: TRANSIZE */
423 /*
424  * TRANSIZE (RW)
425  *
426  * Total transfer size from source. The total number of transferred bytes is (TranSize * SrcWidth). This register is cleared when the DMA transfer is done.
427  * If a channel is enabled with zero total transfer size, the error event will be triggered and the transfer will be terminated.
428  */
429 #define DMA_CHCTRL_TRANSIZE_TRANSIZE_MASK (0xFFFFFFFFUL)
430 #define DMA_CHCTRL_TRANSIZE_TRANSIZE_SHIFT (0U)
431 #define DMA_CHCTRL_TRANSIZE_TRANSIZE_SET(x) (((uint32_t)(x) << DMA_CHCTRL_TRANSIZE_TRANSIZE_SHIFT) & DMA_CHCTRL_TRANSIZE_TRANSIZE_MASK)
432 #define DMA_CHCTRL_TRANSIZE_TRANSIZE_GET(x) (((uint32_t)(x) & DMA_CHCTRL_TRANSIZE_TRANSIZE_MASK) >> DMA_CHCTRL_TRANSIZE_TRANSIZE_SHIFT)
433 
434 /* Bitfield definition for register of struct array CHCTRL: SRCADDR */
435 /*
436  * SRCADDRL (RW)
437  *
438  * Low part of the source starting address. When the transfer completes, the value of {SrcAddrH,SrcAddrL} is updated to the ending address.
439  * This address must be aligned to the source transfer size; otherwise, an error event will be triggered.
440  */
441 #define DMA_CHCTRL_SRCADDR_SRCADDRL_MASK (0xFFFFFFFFUL)
442 #define DMA_CHCTRL_SRCADDR_SRCADDRL_SHIFT (0U)
443 #define DMA_CHCTRL_SRCADDR_SRCADDRL_SET(x) (((uint32_t)(x) << DMA_CHCTRL_SRCADDR_SRCADDRL_SHIFT) & DMA_CHCTRL_SRCADDR_SRCADDRL_MASK)
444 #define DMA_CHCTRL_SRCADDR_SRCADDRL_GET(x) (((uint32_t)(x) & DMA_CHCTRL_SRCADDR_SRCADDRL_MASK) >> DMA_CHCTRL_SRCADDR_SRCADDRL_SHIFT)
445 
446 /* Bitfield definition for register of struct array CHCTRL: SRCADDRH */
447 /*
448  * SRCADDRH (RW)
449  *
450  * High part of the source starting address. When the transfer completes, the value of {SrcAddrH,SrcAddrL} is updated to the ending address.
451  * This register exists only when the address bus width is wider than 32 bits.
452  */
453 #define DMA_CHCTRL_SRCADDRH_SRCADDRH_MASK (0xFFFFFFFFUL)
454 #define DMA_CHCTRL_SRCADDRH_SRCADDRH_SHIFT (0U)
455 #define DMA_CHCTRL_SRCADDRH_SRCADDRH_SET(x) (((uint32_t)(x) << DMA_CHCTRL_SRCADDRH_SRCADDRH_SHIFT) & DMA_CHCTRL_SRCADDRH_SRCADDRH_MASK)
456 #define DMA_CHCTRL_SRCADDRH_SRCADDRH_GET(x) (((uint32_t)(x) & DMA_CHCTRL_SRCADDRH_SRCADDRH_MASK) >> DMA_CHCTRL_SRCADDRH_SRCADDRH_SHIFT)
457 
458 /* Bitfield definition for register of struct array CHCTRL: DSTADDR */
459 /*
460  * DSTADDRL (RW)
461  *
462  * Low part of the destination starting address. When the transfer completes, the value of {DstAddrH,DstAddrL} is updated to the ending address.
463  * This address must be aligned to the destination transfer size; otherwise the error event will be triggered.
464  */
465 #define DMA_CHCTRL_DSTADDR_DSTADDRL_MASK (0xFFFFFFFFUL)
466 #define DMA_CHCTRL_DSTADDR_DSTADDRL_SHIFT (0U)
467 #define DMA_CHCTRL_DSTADDR_DSTADDRL_SET(x) (((uint32_t)(x) << DMA_CHCTRL_DSTADDR_DSTADDRL_SHIFT) & DMA_CHCTRL_DSTADDR_DSTADDRL_MASK)
468 #define DMA_CHCTRL_DSTADDR_DSTADDRL_GET(x) (((uint32_t)(x) & DMA_CHCTRL_DSTADDR_DSTADDRL_MASK) >> DMA_CHCTRL_DSTADDR_DSTADDRL_SHIFT)
469 
470 /* Bitfield definition for register of struct array CHCTRL: DSTADDRH */
471 /*
472  * DSTADDRH (RW)
473  *
474  * High part of the destination starting address. When the transfer completes, the value of {DstAddrH,DstAddrL} is updated to the ending address.
475  * This address must be aligned to the destination transfer size; otherwise the error event will be triggered.
476  * This register exists only when the address bus width is wider than 32 bits.
477  */
478 #define DMA_CHCTRL_DSTADDRH_DSTADDRH_MASK (0xFFFFFFFFUL)
479 #define DMA_CHCTRL_DSTADDRH_DSTADDRH_SHIFT (0U)
480 #define DMA_CHCTRL_DSTADDRH_DSTADDRH_SET(x) (((uint32_t)(x) << DMA_CHCTRL_DSTADDRH_DSTADDRH_SHIFT) & DMA_CHCTRL_DSTADDRH_DSTADDRH_MASK)
481 #define DMA_CHCTRL_DSTADDRH_DSTADDRH_GET(x) (((uint32_t)(x) & DMA_CHCTRL_DSTADDRH_DSTADDRH_MASK) >> DMA_CHCTRL_DSTADDRH_DSTADDRH_SHIFT)
482 
483 /* Bitfield definition for register of struct array CHCTRL: LLPOINTER */
484 /*
485  * LLPOINTERL (RW)
486  *
487  * Low part of the pointer to the next descriptor. The pointer must be double word aligned.
488  */
489 #define DMA_CHCTRL_LLPOINTER_LLPOINTERL_MASK (0xFFFFFFF8UL)
490 #define DMA_CHCTRL_LLPOINTER_LLPOINTERL_SHIFT (3U)
491 #define DMA_CHCTRL_LLPOINTER_LLPOINTERL_SET(x) (((uint32_t)(x) << DMA_CHCTRL_LLPOINTER_LLPOINTERL_SHIFT) & DMA_CHCTRL_LLPOINTER_LLPOINTERL_MASK)
492 #define DMA_CHCTRL_LLPOINTER_LLPOINTERL_GET(x) (((uint32_t)(x) & DMA_CHCTRL_LLPOINTER_LLPOINTERL_MASK) >> DMA_CHCTRL_LLPOINTER_LLPOINTERL_SHIFT)
493 
494 /*
495  * LLDBUSINFIDX (RW)
496  *
497  * Bus interface index that the next descriptor is read from
498  * 0x0: The next descriptor is read from bus interface 0
499  */
500 #define DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_MASK (0x1U)
501 #define DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_SHIFT (0U)
502 #define DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_SET(x) (((uint32_t)(x) << DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_SHIFT) & DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_MASK)
503 #define DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_GET(x) (((uint32_t)(x) & DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_MASK) >> DMA_CHCTRL_LLPOINTER_LLDBUSINFIDX_SHIFT)
504 
505 /* Bitfield definition for register of struct array CHCTRL: LLPOINTERH */
506 /*
507  * LLPOINTERH (RW)
508  *
509  * High part of the pointer to the next descriptor.
510  * This register exists only when the address bus width is wider than 32 bits.
511  */
512 #define DMA_CHCTRL_LLPOINTERH_LLPOINTERH_MASK (0xFFFFFFFFUL)
513 #define DMA_CHCTRL_LLPOINTERH_LLPOINTERH_SHIFT (0U)
514 #define DMA_CHCTRL_LLPOINTERH_LLPOINTERH_SET(x) (((uint32_t)(x) << DMA_CHCTRL_LLPOINTERH_LLPOINTERH_SHIFT) & DMA_CHCTRL_LLPOINTERH_LLPOINTERH_MASK)
515 #define DMA_CHCTRL_LLPOINTERH_LLPOINTERH_GET(x) (((uint32_t)(x) & DMA_CHCTRL_LLPOINTERH_LLPOINTERH_MASK) >> DMA_CHCTRL_LLPOINTERH_LLPOINTERH_SHIFT)
516 
517 
518 
519 /* CHCTRL register group index macro definition */
520 #define DMA_CHCTRL_CH0 (0UL)
521 #define DMA_CHCTRL_CH1 (1UL)
522 #define DMA_CHCTRL_CH2 (2UL)
523 #define DMA_CHCTRL_CH3 (3UL)
524 #define DMA_CHCTRL_CH4 (4UL)
525 #define DMA_CHCTRL_CH5 (5UL)
526 #define DMA_CHCTRL_CH6 (6UL)
527 #define DMA_CHCTRL_CH7 (7UL)
528 
529 
530 #endif /* HPM_DMA_H */
#define DMA_Type
Definition: hpm_dmav2_drv.h:23