aboutsummaryrefslogtreecommitdiff
path: root/include/libopencm3/lpc43xx/gpdma.h
blob: 064ccd779ffb7970d11306ee8f6c4b75ed8319c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
 * This file is part of the libopencm3 project.
 *
 * Copyright (C) 2012 Michael Ossmann <mike@ossmann.com>
 *
 * This library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef LPC43XX_GPDMA_H
#define LPC43XX_GPDMA_H

#include <libopencm3/cm3/common.h>
#include <libopencm3/lpc43xx/memorymap.h>

/* --- Convenience macros -------------------------------------------------- */

/* GPDMA channel base addresses */
#define GPDMA_CHANNEL0                  (GPDMA_PORT_BASE + 0x100)
#define GPDMA_CHANNEL1                  (GPDMA_PORT_BASE + 0x120)
#define GPDMA_CHANNEL2                  (GPDMA_PORT_BASE + 0x140)
#define GPDMA_CHANNEL3                  (GPDMA_PORT_BASE + 0x160)
#define GPDMA_CHANNEL4                  (GPDMA_PORT_BASE + 0x180)
#define GPDMA_CHANNEL5                  (GPDMA_PORT_BASE + 0x1A0)
#define GPDMA_CHANNEL6                  (GPDMA_PORT_BASE + 0x1C0)
#define GPDMA_CHANNEL7                  (GPDMA_PORT_BASE + 0x1E0)


/* --- GPDMA registers ----------------------------------------------------- */

/* General registers */

/* DMA Interrupt Status Register */
#define GPDMA_NTSTAT                    MMIO32(GPDMA_BASE + 0x000)

/* DMA Interrupt Terminal Count Request Status Register */
#define GPDMA_INTTCSTAT                 MMIO32(GPDMA_BASE + 0x004)

/* DMA Interrupt Terminal Count Request Clear Register */
#define GPDMA_INTTCCLEAR                MMIO32(GPDMA_BASE + 0x008)

/* DMA Interrupt Error Status Register */
#define GPDMA_INTERRSTAT                MMIO32(GPDMA_BASE + 0x00C)

/* DMA Interrupt Error Clear Register */
#define GPDMA_INTERRCLR                 MMIO32(GPDMA_BASE + 0x010)

/* DMA Raw Interrupt Terminal Count Status Register */
#define GPDMA_RAWINTTCSTAT              MMIO32(GPDMA_BASE + 0x014)

/* DMA Raw Error Interrupt Status Register */
#define GPDMA_RAWINTERRSTAT             MMIO32(GPDMA_BASE + 0x018)

/* DMA Enabled Channel Register */
#define GPDMA_ENBLDCHNS                 MMIO32(GPDMA_BASE + 0x01C)

/* DMA Software Burst Request Register */
#define GPDMA_SOFTBREQ                  MMIO32(GPDMA_BASE + 0x020)

/* DMA Software Single Request Register */
#define GPDMA_SOFTSREQ                  MMIO32(GPDMA_BASE + 0x024)

/* DMA Software Last Burst Request Register */
#define GPDMA_SOFTLBREQ                 MMIO32(GPDMA_BASE + 0x028)

/* DMA Software Last Single Request Register */
#define GPDMA_SOFTLSREQ                 MMIO32(GPDMA_BASE + 0x02C)

/* DMA Configuration Register */
#define GPDMA_CONFIG                    MMIO32(GPDMA_BASE + 0x030)

/* DMA Synchronization Register */
#define GPDMA_SYNC                      MMIO32(GPDMA_BASE + 0x034)


/* Channel registers */

/* Source Address Register */
#define GPDMA_SRCADDR(channel)          MMIO32(channel + 0x000)
#define GPDMA_C0SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL0)
#define GPDMA_C1SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL1)
#define GPDMA_C2SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL2)
#define GPDMA_C3SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL3)
#define GPDMA_C4SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL4)
#define GPDMA_C5SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL5)
#define GPDMA_C6SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL6)
#define GPDMA_C7SRCADDR                 GPDMA_SRCADDR(GPDMA_CHANNEL7)

/* Destination Address Register */
#define GPDMA_DESTADDR(channel)         MMIO32(channel + 0x004)
#define GPDMA_C0DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL0)
#define GPDMA_C1DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL1)
#define GPDMA_C2DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL2)
#define GPDMA_C3DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL3)
#define GPDMA_C4DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL4)
#define GPDMA_C5DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL5)
#define GPDMA_C6DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL6)
#define GPDMA_C7DESTADDR                GPDMA_DESTADDR(GPDMA_CHANNEL7)

/* Linked List Item Register */
#define GPDMA_LLI(channel)              MMIO32(channel + 0x008)
#define GPDMA_C0LLI                     GPDMA_LLI(GPDMA_CHANNEL0)
#define GPDMA_C1LLI                     GPDMA_LLI(GPDMA_CHANNEL1)
#define GPDMA_C2LLI                     GPDMA_LLI(GPDMA_CHANNEL2)
#define GPDMA_C3LLI                     GPDMA_LLI(GPDMA_CHANNEL3)
#define GPDMA_C4LLI                     GPDMA_LLI(GPDMA_CHANNEL4)
#define GPDMA_C5LLI                     GPDMA_LLI(GPDMA_CHANNEL5)
#define GPDMA_C6LLI                     GPDMA_LLI(GPDMA_CHANNEL6)
#define GPDMA_C7LLI                     GPDMA_LLI(GPDMA_CHANNEL7)

/* Control Register */
#define GPDMA_CONTROL(channel)          MMIO32(channel + 0x00C)
#define GPDMA_C0CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL0)
#define GPDMA_C1CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL1)
#define GPDMA_C2CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL2)
#define GPDMA_C3CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL3)
#define GPDMA_C4CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL4)
#define GPDMA_C5CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL5)
#define GPDMA_C6CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL6)
#define GPDMA_C7CONTROL                 GPDMA_CONTROL(GPDMA_CHANNEL7)

/* Configuration Register */
#define GPDMA_CONFIG(channel)           MMIO32(channel + 0x010)
#define GPDMA_C0CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL0)
#define GPDMA_C1CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL1)
#define GPDMA_C2CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL2)
#define GPDMA_C3CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL3)
#define GPDMA_C4CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL4)
#define GPDMA_C5CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL5)
#define GPDMA_C6CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL6)
#define GPDMA_C7CONFIG                  GPDMA_CONFIG(GPDMA_CHANNEL7)

#endif