summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/stm32/chip/stm32_dma2d.h
blob: f36c8de55ef04c71c98cc4c1d314b4a43dcc8e0c (plain) (blame)
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
/******************************************************************************
 * arch/arm/src/stm32/chip/stm32_dma2d.h
 *
 *   Copyright (C) 2014-2015 Marco Krahl. All rights reserved.
 *   Author: Marco Krahl <ocram.lhark@gmail.com>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name NuttX nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 *****************************************************************************/

#ifndef __ARCH_ARM_SRC_STM32_CHIP_STM32_DMA2D_H
#define __ARCH_ARM_SRC_STM32_CHIP_STM32_DMA2D_H

/*****************************************************************************
 * Included Files
 *****************************************************************************/

#include <nuttx/config.h>
#include "chip/stm32_memorymap.h"

/*****************************************************************************
 * Pre-processor Definitions
 *****************************************************************************/

#define STM32_DMA2D_NCLUT           256    /* Number of entries in the CLUT */

/* DMA2D Register Offsets ****************************************************/

#define STM32_DMA2D_CR_OFFSET       0x0000 /* DMA2D Control Register */
#define STM32_DMA2D_ISR_OFFSET      0x0004 /* DMA2D Interrupt Status Register */
#define STM32_DMA2D_IFCR_OFFSET     0x0008 /* DMA2D Interrupt Flag Clear Register */
#define STM32_DMA2D_FGMAR_OFFSET    0x000C /* DMA2D Foreground Memory Address Register */
#define STM32_DMA2D_FGOR_OFFSET     0x0010 /* DMA2D Foreground Offset Register */
#define STM32_DMA2D_BGMAR_OFFSET    0x0014 /* DMA2D Background Memory Address Register */
#define STM32_DMA2D_BGOR_OFFSET     0x0018 /* DMA2D Background Offset Register */
#define STM32_DMA2D_FGPFCCR_OFFSET  0x001C /* DMA2D Foreground PFC Control Register */
#define STM32_DMA2D_FGCOLR_OFFSET   0x0020 /* DMA2D Foreground Color Register */
#define STM32_DMA2D_BGPFCCR_OFFSET  0x0024 /* DMA2D Background PFC Control Register */
#define STM32_DMA2D_BGCOLR_OFFSET   0x0028 /* DMA2D Background Color Register */
#define STM32_DMA2D_FGCMAR_OFFSET   0x002C /* DMA2D Foreground CLUT Memory Address Register */
#define STM32_DMA2D_BGCMAR_OFFSET   0x0030 /* DMA2D Background CLUT Memory Address Register */
#define STM32_DMA2D_OPFCCR_OFFSET   0x0034 /* DMA2D Output PFC Control Register */
#define STM32_DMA2D_OCOLR_OFFSET    0x0038 /* DMA2D Output Color Register */
#define STM32_DMA2D_OMAR_OFFSET     0x003C /* DMA2D Output Memory Address Register */
#define STM32_DMA2D_OOR_OFFSET      0x0040 /* DMA2D Output Offset Register */
#define STM32_DMA2D_NLR_OFFSET      0x0044 /* DMA2D Number Of Line Register */
#define STM32_DMA2D_LWR_OFFSET      0x0048 /* DMA2D Line Watermark Register */
#define STM32_DMA2D_AMTCR_OFFSET    0x004C /* DMA2D AHB Master Time Configuration Register */

/* DMA2D Register Addresses **************************************************/

#define STM32_DMA2D_CR              (STM32_DMA2D_BASE+STM32_DMA2D_CR_OFFSET)
#define STM32_DMA2D_ISR             (STM32_DMA2D_BASE+STM32_DMA2D_ISR_OFFSET)
#define STM32_DMA2D_IFCR            (STM32_DMA2D_BASE+STM32_DMA2D_IFCR_OFFSET)
#define STM32_DMA2D_FGMAR           (STM32_DMA2D_BASE+STM32_DMA2D_FGMAR_OFFSET)
#define STM32_DMA2D_FGOR            (STM32_DMA2D_BASE+STM32_DMA2D_FGOR_OFFSET)
#define STM32_DMA2D_BGMAR           (STM32_DMA2D_BASE+STM32_DMA2D_BGMAR_OFFSET)
#define STM32_DMA2D_BGOR            (STM32_DMA2D_BASE+STM32_DMA2D_BGOR_OFFSET)
#define STM32_DMA2D_FGPFCCR         (STM32_DMA2D_BASE+STM32_DMA2D_FGPFCCR_OFFSET)
#define STM32_DMA2D_FGCOLR          (STM32_DMA2D_BASE+STM32_DMA2D_FGCOLR_OFFSET)
#define STM32_DMA2D_BGPFCCR         (STM32_DMA2D_BASE+STM32_DMA2D_BGPFCCR_OFFSET)
#define STM32_DMA2D_BGCOLR          (STM32_DMA2D_BASE+STM32_DMA2D_BGCOLR_OFFSET)
#define STM32_DMA2D_FGCMAR          (STM32_DMA2D_BASE+STM32_DMA2D_FGCMAR_OFFSET)
#define STM32_DMA2D_BGCMAR          (STM32_DMA2D_BASE+STM32_DMA2D_BGCMAR_OFFSET)
#define STM32_DMA2D_OPFCCR          (STM32_DMA2D_BASE+STM32_DMA2D_OPFCCR_OFFSET)
#define STM32_DMA2D_OCOLR           (STM32_DMA2D_BASE+STM32_DMA2D_OCOLR_OFFSET)
#define STM32_DMA2D_OMAR            (STM32_DMA2D_BASE+STM32_DMA2D_OMAR_OFFSET)
#define STM32_DMA2D_OOR             (STM32_DMA2D_BASE+STM32_DMA2D_OOR_OFFSET)
#define STM32_DMA2D_NLR             (STM32_DMA2D_BASE+STM32_DMA2D_NLR_OFFSET)
#define STM32_DMA2D_LWR             (STM32_DMA2D_BASE+STM32_DMA2D_LWR_OFFSET)

/* DMA2D Register Bit Definitions ********************************************/

/* DMA2D Control Register */

#define DMA2D_CR_START              (1 << 0)  /* Start Bit */
#define DMA2D_CR_SUSP               (1 << 1)  /* Suspend Bit */
#define DMA2D_CR_ABORT              (1 << 2)  /* Abort Bit */
#define DMA2D_CR_TEIE               (1 << 8)  /* Transfer Error Interupt Enable Bit */
#define DMA2D_CR_TCIE               (1 << 9)  /* Transfer Complete Interrupt Enable Bit */
#define DMA2D_CR_TWIE               (1 << 10) /* Transfer Watermark Interrupt Enable Bit */
#define DMA2D_CR_CAEIE              (1 << 11) /* CLUT Access Error Interrupt Enable Bit */
#define DMA2D_CR_CTCIE              (1 << 12) /* CLUT Transfer Complete Interrupt Enable Bit */
#define DMA2D_CR_CEIE               (1 << 13) /* Configuration Error Interrupt Enable Bit */
#define DMA2D_CR_MODE_SHIFT         (16) /* Bits 16-17 DMA2D mode Bits */
#define DMA2D_CR_MODE_MASK          (3 << DMA2D_CR_MODE_SHIFT)
#define DMA2D_CR_MODE(n)            ((uint32_t)(n) << DMA2D_CR_MODE_SHIFT)

/* DMA2D Interrupt Status Register */

#define DMA2D_ISR_TEIF              (1 << 0)  /* Transfer error interrupt flag */
#define DMA2D_ISR_TCIF              (1 << 1)  /* Transfer Complete Interrupt flag */
#define DMA2D_ISR_TWIF              (1 << 2)  /* Transfer Watermark Interrupt flag */
#define DMA2D_ISR_CAEIF             (1 << 3)  /* CLUT Access Error Interrupt flag */
#define DMA2D_ISR_CTCIF             (1 << 4)  /* CLUT Transfer Complete Interrupt flag */
#define DMA2D_ISR_CEIF              (1 << 5)  /* Configuration Error Interrupt flag */

/* DMA2D Interrupt Flag Clear Register */

#define DMA2D_IFCR_CTEIF            (1 << 0)  /* Clear Transfer Interrupt Flag */
#define DMA2D_IFCR_CTCIF            (1 << 1)  /* Clear Transfer Complete Interrupt Flag */
#define DMA2D_IFCR_CTWIF            (1 << 2)  /* Clear Transfer Watermark Interrupt Flag */
#define DMA2D_IFCR_CAECIF           (1 << 3)  /* Clear CLUT Access Error Interrupt Flag */
#define DMA2D_IFCR_CCTCIF           (1 << 4)  /* Clear CLUT Transfer Complete Interrupt Flag */
#define DMA2D_IFCR_CCEIF            (1 << 5)  /* Clear Configuration Error Interrupt Flag */

/* DMA2D Foreground Memory Access Register */

/* DMA2D Background Memory Access Register */

/* DMA2D Foreground/Background Offset Register */

#define DMA2D_xGOR_SHIFT            (0)  /* Bits 0-13 Line Offset */
#define DMA2D_xGOR_MASK             (0x3FFF << DMA2D_xGOR_SHIFT)
#define DMA2D_xGOR(n)               ((uint32_t)(n) << DMA2D_xGOR_SHIFT)

/* DMA2D Foreground/Background PFC Control Register */

#define DMA2D_xGPFCCR_CM_SHIFT      (0)  /* Bits 0-3 Color Mode */
#define DMA2D_xGPFCCR_CM_MASK       (0xF << DMA2D_xGPFCCR_CM_SHIFT)
#define DMA2D_xGPFCCR_CM(n)         ((uint32_t)(n) << DMA2D_xGPFCCR_CM_SHIFT)
#define DMA2D_xGPFCCR_CCM           (1 << 4)  /* CLUT Color Mode */
#define DMA2D_xGPFCCR_START         (1 << 5)  /* Start */
#define DMA2D_xGPFCCR_CS_SHIFT      (8)  /* Bits 8-15 CLUT Size */
#define DMA2D_xGPFCCR_CS_MASK       (0xFF << DMA2D_xGPFCCR_CS_SHIFT)
#define DMA2D_xGPFCCR_CS(n)         ((uint32_t)(n) << DMA2D_xGPFCCR_CS_SHIFT)
#define DMA2D_xGPFCCR_AM_SHIFT      (16)  /* Bits 16-17 Alpha Mode */
#define DMA2D_xGPFCCR_AM_MASK       (3 << DMA2D_xGPFCCR_AM_SHIFT)
#define DMA2D_xGPFCCR_AM(n)         ((uint32_t)(n) << DMA2D_xGPFCCR_AM_SHIFT)
#define DMA2D_xGPFCCR_ALPHA_SHIFT   (24)  /* Bits 24-31 Alpha Value */
#define DMA2D_xGPFCCR_ALPHA_MASK    (0xFF << DMA2D_xGPFCCR_ALPHA_SHIFT)
#define DMA2D_xGPFCCR_ALPHA(n)      ((uint32_t)(n) << DMA2D_xGPFCCR_ALPHA_SHIFT)

/* DMA2D Foreground/Background Color Register */

#define DMA2D_xGCOLR_BLUE_SHIFT     (0)  /* Bits 0-7 Blue Value */
#define DMA2D_xGCOLR_BLUE_MASK      (0xFF << DMA2D_xGCOLR_BLUE_SHIFT)
#define DMA2D_xGCOLR_BLUE(n)        ((uint32_t)(n) << DMA2D_xGCOLR_BLUE_SHIFT)
#define DMA2D_xGCOLR_GREEN_SHIFT    (8)  /* Bits 8-15 Green Value */
#define DMA2D_xGCOLR_GREEN_MASK     (0xFF << DMA2D_xGCOLR_GREEN_SHIFT)
#define DMA2D_xGCOLR_GREEN(n)       ((uint32_t)(n) << DMA2D_xGCOLR_GREEN_SHIFT)
#define DMA2D_xGCOLR_RED_SHIFT      (16)  /* Bits 16-23 Red Value */
#define DMA2D_xGCOLR_RED_MASK       (0xFF << DMA2D_xGCOLR_RED_SHIFT)
#define DMA2D_xGCOLR_RED(n)         ((uint32_t)(n) << DMA2D_xGCOLR_RED_SHIFT)

/* DMA2D Foreground CLUT Memory Address Register */

/* DMA2D Background CLUT Memory Address Register */

/* DMA2D Output PFC Control Register */

#define DMA2D_OPFCCR_CM_SHIFT       (0)  /* Bits 0-2 Color Mode */
#define DMA2D_OPFCCR_CM_MASK        (7 << DMA2D_OPFCCR_CM_SHIFT)
#define DMA2D_OPFCCR_CM(n)          ((uint32_t)(n) << DMA2D_OPFCCR_CM_SHIFT)

/* DMA2D Output Color Register */

#define DMA2D_OCOLR_BLUE_SHIFT      (0)  /* Bits 0-7 Blue Value */
#define DMA2D_OCOLR_BLUE_MASK       (0xFF << DMA2D_OCOLR_BLUE_SHIFT)
#define DMA2D_OCOLR_BLUE(n)         ((uint32_t)(n) << DMA2D_OCOLR_BLUE_SHIFT)
#define DMA2D_OCOLR_GREEN_SHIFT     (8)  /* Bits 8-15 Green Value */
#define DMA2D_OCOLR_GREEN_MASK      (0xFF << DMA2D_OCOLR_GREEN_SHIFT)
#define DMA2D_OCOLR_GREEN(n)        ((uint32_t)(n) << DMA2D_OCOLR_GREEN_SHIFT)
#define DMA2D_OCOLR_RED_SHIFT       (16)  /* Bits 16-23 Red Value */
#define DMA2D_OCOLR_RED_MASK        (0xFF << DMA2D_OCOLR_RED_SHIFT)
#define DMA2D_OCOLR_RED(n)          ((uint32_t)(n) << DMA2D_OCOLR_RED_SHIFT)
#define DMA2D_OCOLR_ALPHA_SHIFT     (24)  /* Bits 24-31 Alpha Value */
#define DMA2D_OCOLR_ALPHA_MASK      (0xFF << DMA2D_OCOLR_ALPHA_SHIFT)
#define DMA2D_OCOLR_ALPHA(n)        ((uint32_t)(n) << DMA2D_OCOLR_ALPHA_SHIFT)

/* DMA2D Output Memory Address Register */

/* DMA2D Output Offset Register */

#define DMA2D_OOR_LO_SHIFT          (0)  /* Bits 0-13 Line Offset */
#define DMA2D_OOR_LO_MASK           (0x3FFF << DMA2D_OOR_LO_SHIFT)
#define DMA2D_OOR_LO(n)             ((uint32_t)(n) << DMA2D_OOR_LO_SHIFT)

/* DMA2D Number Of Line Register */

#define DMA2D_NLR_NL_SHIFT          (0)  /* Bits 0-15 Number Of Lines */
#define DMA2D_NLR_NL_MASK           (0xFFFF << DMA2D_NLR_NL_SHIFT)
#define DMA2D_NLR_NL(n)             ((uint32_t)(n) << DMA2D_NLR_NL_SHIFT)
#define DMA2D_NLR_PL_SHIFT          (16) /* Bits 16-29 Pixel per Lines */
#define DMA2D_NLR_PL_MASK           (0x3FFF << DMA2D_NLR_PL_SHIFT)
#define DMA2D_NLR_PL(n)             ((uint32_t)(n) << DMA2D_NLR_PL_SHIFT)

/* DMA2D Line Watermark Register */

#define DMA2D_LWR_LW_SHIFT          (0)  /* Bits 0-15 Line Watermark */
#define DMA2D_LWR_LW_MASK           (0xFFFF << DMA2D_LWR_LW_SHIFT)
#define DMA2D_LWR_LW(n)             ((uint32_t)(n) << DMA2D_LWR_LW_SHIFT)

/* DMA2D AHB Master Timer Configuration Register */

#define DMA2D_AMTCR_EN              (1 << 0)  /* Enable */
#define DMA2D_AMTCR_DT_SHIFT        (0)  /* Bits 8-15 Dead Time */
#define DMA2D_AMTCR_DT_MASK         (0xFF << DMA2D_AMTCR_DT_SHIFT)
#define DMA2D_AMTCR_DT(n)           ((uint32_t)(n) << DMA2D_AMTCR_DT_SHIFT)

/*****************************************************************************
 * Public Types
 *****************************************************************************/

#endif /* __ARCH_ARM_SRC_STM32_CHIP_STM32_DMA2D_H */