summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-12-19 13:41:08 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-12-19 13:41:08 -0600
commit99490b6514e98823f3eb6e88a55a186d01c26c7f (patch)
tree80c8f6a933f9e0e281725d5475d823a97b2c24ed
parent4644126b0ef2ab09b23f94fe9fc2eee867909dba (diff)
downloadnuttx-99490b6514e98823f3eb6e88a55a186d01c26c7f.tar.gz
nuttx-99490b6514e98823f3eb6e88a55a186d01c26c7f.tar.bz2
nuttx-99490b6514e98823f3eb6e88a55a186d01c26c7f.zip
stm32: Add infrastructure for dma2d support
Signed-off-by: Marco Krahl <ocram.lhark@gmail.com>
-rw-r--r--nuttx/arch/arm/src/stm32/Kconfig56
-rw-r--r--nuttx/arch/arm/src/stm32/Make.defs4
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_dma2d.c185
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_dma2d.h147
4 files changed, 392 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/stm32/Kconfig b/nuttx/arch/arm/src/stm32/Kconfig
index 33c08b2ac..47044851f 100644
--- a/nuttx/arch/arm/src/stm32/Kconfig
+++ b/nuttx/arch/arm/src/stm32/Kconfig
@@ -1233,6 +1233,14 @@ config STM32_LTDC
video interface (HSYNC, VSYNC, etc.) for controlling TFT
LCD displays.
+config STM32_DMA2D
+ bool "DMA2D"
+ default n
+ depends on STM32_STM32F429
+ ---help---
+ The STM32 DMA2D is an Chrom-Art Accelerator for image manipulation
+ available on the STM32F429 and STM32F439 devices.
+
config STM32_OTGFS
bool "OTG FS"
default n
@@ -3677,3 +3685,51 @@ endmenu
endif # STM32_LTDC
+if STM32_DMA2D
+
+menu "DMA2D Configuration"
+
+config STM32_DMA2D_NLAYERS
+ int "Number DMA2D layers"
+ default 2
+ ---help---
+ Number of allocatable DMA2D layers except the LTDC layer.
+
+menu "Supported pixel format"
+
+config STM32_DMA2D_L8
+ bool "8 bpp L8 (8-bit CLUT)"
+ default y
+
+config STM32_DMA2D_AL44
+ bool "8 bpp AL44 (4-bit alpha + 4-bit CLUT)"
+ default n
+
+config STM32_DMA2D_AL88
+ bool "16 bpp AL88 (8-bit alpha + 8-bit CLUT)"
+ default n
+
+config STM32_DMA2D_RGB565
+ bool "16 bpp RGB 565"
+ default y
+
+config STM32_DMA2D_ARGB4444
+ bool "16 bpp ARGB 4444"
+ default n
+
+config STM32_DMA2D_ARGB1555
+ bool "16 bpp ARGB 1555"
+ default n
+
+config STM32_DMA2D_RGB888
+ bool "24 bpp RGB 888"
+ default y
+
+config STM32_DMA2D_ARGB8888
+ bool "32 bpp ARGB 8888"
+ default n
+
+endmenu
+endmenu
+endif # STM32_DMA2D
+
diff --git a/nuttx/arch/arm/src/stm32/Make.defs b/nuttx/arch/arm/src/stm32/Make.defs
index c56a1fbf0..479167f0d 100644
--- a/nuttx/arch/arm/src/stm32/Make.defs
+++ b/nuttx/arch/arm/src/stm32/Make.defs
@@ -195,6 +195,10 @@ ifeq ($(CONFIG_STM32_LTDC),y)
CHIP_CSRCS += stm32_ltdc.c
endif
+ifeq ($(CONFIG_STM32_DMA2D),y)
+CHIP_CSRCS += stm32_dma2d.c
+endif
+
ifeq ($(CONFIG_PWM),y)
CHIP_CSRCS += stm32_pwm.c
endif
diff --git a/nuttx/arch/arm/src/stm32/stm32_dma2d.c b/nuttx/arch/arm/src/stm32/stm32_dma2d.c
new file mode 100644
index 000000000..402b02736
--- /dev/null
+++ b/nuttx/arch/arm/src/stm32/stm32_dma2d.c
@@ -0,0 +1,185 @@
+/******************************************************************************
+ * arch/arm/src/stm32/stm32_dma2d.c
+ *
+ * Copyright (C) 2014 Marco Krahl. All rights reserved.
+ * Author: Marco Krahl <ocram.lhark@gmail.com>
+ *
+ * References:
+ * STM32F429 Technical Reference Manual
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ * Included Files
+ ******************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/video/fb.h>
+#include <nuttx/video/ltdc.h>
+#include <nuttx/kmalloc.h>
+
+#include <arch/board/board.h>
+
+#include "up_arch.h"
+#include "up_internal.h"
+#include "stm32.h"
+#include "chip/stm32_ltdc.h"
+#include "stm32_ltdc.h"
+
+/******************************************************************************
+ * Pre-Processor Definitions
+ ******************************************************************************/
+
+/******************************************************************************
+ * Private Types
+ ******************************************************************************/
+
+/******************************************************************************
+ * Private Function Prototypes
+ ******************************************************************************/
+
+/******************************************************************************
+ * Private Data
+ ******************************************************************************/
+
+/******************************************************************************
+ * Public Data
+ ******************************************************************************/
+
+/******************************************************************************
+ * Private Functions
+ ******************************************************************************/
+
+/******************************************************************************
+ * Public Functions
+ ******************************************************************************/
+
+/******************************************************************************
+ * Name: stm32_dma2dblit
+ *
+ * Description:
+ * Copy selected area from a background layer to selected position of the
+ * foreground layer. Copies the result to the destination layer.
+ *
+ * Parameter:
+ * dest - Valid reference to the destination layer
+ * fore - Valid reference to the foreground layer
+ * forexpos - Valid selected x target position of the destination layer
+ * foreypos - Valid selected y target position of the destination layer
+ * back - Valid reference to the background layer
+ * backarea - Valid reference to the selected area of the background layer
+ *
+ * Return:
+ * OK - On success
+ * -EINVAL - On error
+ *
+ ****************************************************************************/
+
+int stm32_dma2dblit(FAR struct stm32_ltdc_s *dest,
+ FAR struct stm32_ltdc_s *fore,
+ fb_coord_t forexpos, fb_coord_t foreypos,
+ FAR struct stm32_ltdc_s *back,
+ FAR const struct ltdc_area_s *backarea)
+{
+ gdbg("Not implemented");
+ return -ENOSYS;
+}
+
+
+/****************************************************************************
+ *
+ * Name: stm32_dma2dblend
+ *
+ * Description:
+ * Blends the selected area from a background layer with selected position of
+ * the foreground layer. Blends the result with the destination layer.
+ * Note! This is the same as the blit operation but with blending depending on
+ * the blendmode settings of the layer.
+ *
+ * Parameter:
+ * dest - Valid reference to the destination layer
+ * fore - Valid reference to the foreground layer
+ * forexpos - Valid selected x target position of the destination layer
+ * foreypos - Valid selected y target position of the destination layer
+ * back - Valid reference to the background layer
+ * backarea - Valid reference to the selected area of the background layer
+ *
+ * Return:
+ * OK - On success
+ * -EINVAL - On error
+ *
+ ****************************************************************************/
+
+int stm32_dma2dblend(FAR struct stm32_ltdc_s *dest,
+ FAR struct stm32_ltdc_s *fore,
+ fb_coord_t forexpos, fb_coord_t foreypos,
+ FAR struct stm32_ltdc_s *back,
+ FAR const struct ltdc_area_s *backarea)
+{
+ gdbg("Not implemented");
+ return -ENOSYS;
+}
+
+
+/******************************************************************************
+ * Name: up_dma2dinitialize
+ *
+ * Description:
+ * Initialize the dma2d controller
+ *
+ * Return:
+ * OK - On success
+ * An error if initializing failed.
+ *
+ ******************************************************************************/
+
+int up_dma2dinitialize(void)
+{
+ return OK;
+}
+
+/******************************************************************************
+ * Name: up_dma2duninitialize
+ *
+ * Description:
+ * Uninitialize the dma2d controller
+ *
+ ******************************************************************************/
+
+void up_dma2duninitialize(void)
+{
+}
+
diff --git a/nuttx/arch/arm/src/stm32/stm32_dma2d.h b/nuttx/arch/arm/src/stm32/stm32_dma2d.h
new file mode 100644
index 000000000..9540e311d
--- /dev/null
+++ b/nuttx/arch/arm/src/stm32/stm32_dma2d.h
@@ -0,0 +1,147 @@
+/******************************************************************************
+ * arch/arm/src/stm32/stm32_dma2d.h
+ *
+ * Copyright (C) 2014 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_STM32_DMA2D_H
+#define __ARCH_ARM_SRC_STM32_STM32_DMA2D_H
+
+/******************************************************************************
+ * Included Files
+ ******************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/video/fb.h>
+#include <nuttx/video/ltdc.h>
+#include "stm32_ltdc.h"
+
+#ifdef CONFIG_STM32_DMA2D
+/******************************************************************************
+ * Pre-processor Definitions
+ ******************************************************************************/
+
+/******************************************************************************
+ * Public Types
+ ******************************************************************************/
+
+/******************************************************************************
+ * Public Data
+ ******************************************************************************/
+
+/******************************************************************************
+ * Public Functions
+ ******************************************************************************/
+
+/******************************************************************************
+ * Name: stm32_dma2dblit
+ *
+ * Description:
+ * Copy selected area from a background layer to selected position of the
+ * foreground layer. Copies the result to the destination layer.
+ *
+ * Parameter:
+ * dest - Valid reference to the destination layer
+ * fore - Valid reference to the foreground layer
+ * forexpos - Valid selected x target position of the destination layer
+ * foreypos - Valid selected y target position of the destination layer
+ * back - Valid reference to the background layer
+ * backarea - Valid reference to the selected area of the background layer
+ *
+ * Return:
+ * OK - On success
+ * -EINVAL - On error
+ *
+ ******************************************************************************/
+
+int stm32_dma2dblit(FAR struct stm32_ltdc_s *dest,
+ FAR struct stm32_ltdc_s *fore,
+ fb_coord_t forexpos, fb_coord_t foreypos,
+ FAR struct stm32_ltdc_s *back,
+ FAR const struct ltdc_area_s *backarea);
+
+/******************************************************************************
+ *
+ * Name: stm32_dma2dblend
+ *
+ * Description:
+ * Blends the selected area from a background layer with selected position of
+ * the foreground layer. Blends the result with the destination layer.
+ * Note! This is the same as the blit operation but with blending depending on
+ * the blendmode settings of the layer.
+ *
+ * Parameter:
+ * dest - Valid reference to the destination layer
+ * fore - Valid reference to the foreground layer
+ * forexpos - Valid selected x target position of the destination layer
+ * foreypos - Valid selected y target position of the destination layer
+ * back - Valid reference to the background layer
+ * backarea - Valid reference to the selected area of the background layer
+ *
+ * Return:
+ * OK - On success
+ * -EINVAL - On error
+ *
+ ******************************************************************************/
+
+int stm32_dma2dblend(FAR struct stm32_ltdc_s *dest,
+ FAR struct stm32_ltdc_s *fore,
+ fb_coord_t forexpos, fb_coord_t foreypos,
+ FAR struct stm32_ltdc_s *back,
+ FAR const struct ltdc_area_s *backarea);
+
+/******************************************************************************
+ * Name: up_dma2dinitialize
+ *
+ * Description:
+ * Initialize the dma2d controller
+ *
+ * Return:
+ * OK - On success
+ * An error if initializing failed.
+ *
+ ******************************************************************************/
+
+int up_dma2dinitialize(void);
+
+/******************************************************************************
+ * Name: up_dma2duninitialize
+ *
+ * Description:
+ * Uninitialize the dma2d controller
+ *
+ ******************************************************************************/
+
+void up_dma2duninitialize(void);
+
+#endif /* CONFIG_STM32_DMA2D */
+#endif /* __ARCH_ARM_SRC_STM32_STM32_DMA2D_H */