diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-12-19 13:41:08 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-12-19 13:41:08 -0600 |
commit | 99490b6514e98823f3eb6e88a55a186d01c26c7f (patch) | |
tree | 80c8f6a933f9e0e281725d5475d823a97b2c24ed /nuttx/arch | |
parent | 4644126b0ef2ab09b23f94fe9fc2eee867909dba (diff) | |
download | nuttx-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>
Diffstat (limited to 'nuttx/arch')
-rw-r--r-- | nuttx/arch/arm/src/stm32/Kconfig | 56 | ||||
-rw-r--r-- | nuttx/arch/arm/src/stm32/Make.defs | 4 | ||||
-rw-r--r-- | nuttx/arch/arm/src/stm32/stm32_dma2d.c | 185 | ||||
-rw-r--r-- | nuttx/arch/arm/src/stm32/stm32_dma2d.h | 147 |
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 */ |