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