diff --git a/arch/arm/src/stm32/Kconfig b/arch/arm/src/stm32/Kconfig index 33c08b2ac79..47044851fba 100644 --- a/arch/arm/src/stm32/Kconfig +++ b/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/arch/arm/src/stm32/Make.defs b/arch/arm/src/stm32/Make.defs index c56a1fbf06e..479167f0d2f 100644 --- a/arch/arm/src/stm32/Make.defs +++ b/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/arch/arm/src/stm32/stm32_dma2d.c b/arch/arm/src/stm32/stm32_dma2d.c new file mode 100644 index 00000000000..402b0273632 --- /dev/null +++ b/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 + * + * 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 + +#include +#include +#include +#include + +#include +#include +#include + +#include + +#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/arch/arm/src/stm32/stm32_dma2d.h b/arch/arm/src/stm32/stm32_dma2d.h new file mode 100644 index 00000000000..9540e311dd4 --- /dev/null +++ b/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 + * + * 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 +#include +#include +#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 */