STM32LTDC: Rename user config options for consistency & add docs
This commit is contained in:
parent
91247717a0
commit
7f78be1183
@ -23,10 +23,6 @@ static const SPIConfig spi_cfg = {
|
|||||||
((1 << 3) & SPI_CR1_BR) | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR
|
((1 << 3) & SPI_CR1_BR) | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LTDC_USE_DMA2D GFXON
|
|
||||||
#define LTDC_USE_2ND_LAYER GFXON
|
|
||||||
#define LTDC_DMA_CACHE_FLUSH GFXOFF // This will be turned on automatically on certain systems/platforms
|
|
||||||
|
|
||||||
static const ltdcConfig driverCfg = {
|
static const ltdcConfig driverCfg = {
|
||||||
240, 320,
|
240, 320,
|
||||||
10, 2,
|
10, 2,
|
||||||
@ -49,7 +45,7 @@ static const ltdcConfig driverCfg = {
|
|||||||
0xFF, // alpha
|
0xFF, // alpha
|
||||||
LTDC_LEF_ENABLE // flags
|
LTDC_LEF_ENABLE // flags
|
||||||
},
|
},
|
||||||
#if LTDC_USE_2ND_LAYER
|
#if STM32LTDC_USE_LAYER2
|
||||||
{ // Foreground layer config (if turned on)
|
{ // Foreground layer config (if turned on)
|
||||||
(LLDCOLOR_TYPE *)(SDRAM_BANK_ADDR+(240 * 320 * LTDC_PIXELBYTES)), // Frame buffer address
|
(LLDCOLOR_TYPE *)(SDRAM_BANK_ADDR+(240 * 320 * LTDC_PIXELBYTES)), // Frame buffer address
|
||||||
240, 320, // width, height
|
240, 320, // width, height
|
||||||
|
@ -19,10 +19,6 @@
|
|||||||
#include "stm32f4xx_hal.h"
|
#include "stm32f4xx_hal.h"
|
||||||
#include "stm324x9i_eval_sdram.h"
|
#include "stm324x9i_eval_sdram.h"
|
||||||
|
|
||||||
#define LTDC_USE_DMA2D GFXON
|
|
||||||
#define LTDC_USE_2ND_LAYER GFXON
|
|
||||||
#define LTDC_DMA_CACHE_FLUSH GFXOFF // This will be turned on automatically on certain systems/platforms
|
|
||||||
|
|
||||||
// Panel parameters
|
// Panel parameters
|
||||||
// This panel is a AMPIRE640480 panel.
|
// This panel is a AMPIRE640480 panel.
|
||||||
|
|
||||||
@ -50,7 +46,7 @@ static const ltdcConfig driverCfg = {
|
|||||||
LTDC_LEF_ENABLE // Layer configuration flags
|
LTDC_LEF_ENABLE // Layer configuration flags
|
||||||
},
|
},
|
||||||
|
|
||||||
#if LTDC_USE_2ND_LAYER
|
#if STM32LTDC_USE_LAYER2
|
||||||
{ // Foreground layer config (if turned on)
|
{ // Foreground layer config (if turned on)
|
||||||
(LLDCOLOR_TYPE *)(SDRAM_DEVICE_ADDR+(640 * 480 * LTDC_PIXELBYTES)), // Frame buffer address
|
(LLDCOLOR_TYPE *)(SDRAM_DEVICE_ADDR+(640 * 480 * LTDC_PIXELBYTES)), // Frame buffer address
|
||||||
640, 480, // Width, Height (pixels)
|
640, 480, // Width, Height (pixels)
|
||||||
|
@ -8,10 +8,6 @@
|
|||||||
#ifndef _GDISP_LLD_BOARD_H
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
#define _GDISP_LLD_BOARD_H
|
#define _GDISP_LLD_BOARD_H
|
||||||
|
|
||||||
#define LTDC_USE_DMA2D GFXON
|
|
||||||
#define LTDC_USE_2ND_LAYER GFXON
|
|
||||||
#define LTDC_DMA_CACHE_FLUSH GFXOFF // This will be turned on automatically on certain systems/platforms
|
|
||||||
|
|
||||||
/* Avoid naming collisions with CubeHAL. */
|
/* Avoid naming collisions with CubeHAL. */
|
||||||
#if GFX_COMPAT_V2 && GFX_COMPAT_OLDCOLORS
|
#if GFX_COMPAT_V2 && GFX_COMPAT_OLDCOLORS
|
||||||
#undef Red
|
#undef Red
|
||||||
|
@ -36,10 +36,6 @@
|
|||||||
#define AFRH AFR[1]
|
#define AFRH AFR[1]
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define LTDC_USE_DMA2D GFXON
|
|
||||||
#define LTDC_USE_2ND_LAYER GFXON
|
|
||||||
#define LTDC_DMA_CACHE_FLUSH GFXOFF // This will be turned on automatically on certain systems/platforms
|
|
||||||
|
|
||||||
static const ltdcConfig driverCfg = {
|
static const ltdcConfig driverCfg = {
|
||||||
480, 272, // Width, Height (pixels)
|
480, 272, // Width, Height (pixels)
|
||||||
41, 10, // Horizontal, Vertical sync (pixels)
|
41, 10, // Horizontal, Vertical sync (pixels)
|
||||||
@ -64,7 +60,7 @@ static const ltdcConfig driverCfg = {
|
|||||||
LTDC_LEF_ENABLE // Layer configuration flags
|
LTDC_LEF_ENABLE // Layer configuration flags
|
||||||
},
|
},
|
||||||
|
|
||||||
#if LTDC_USE_2ND_LAYER
|
#if STM32LTDC_USE_LAYER2
|
||||||
{ // Foreground layer config (if turned on)
|
{ // Foreground layer config (if turned on)
|
||||||
(LLDCOLOR_TYPE *)(SDRAM_DEVICE_ADDR+(480 * 272 * LTDC_PIXELBYTES)), // Frame buffer address
|
(LLDCOLOR_TYPE *)(SDRAM_DEVICE_ADDR+(480 * 272 * LTDC_PIXELBYTES)), // Frame buffer address
|
||||||
480, 272, // Width, Height (pixels)
|
480, 272, // Width, Height (pixels)
|
||||||
@ -408,7 +404,7 @@ static GFXINLINE void init_ltdc_clock(void)
|
|||||||
RCC->APB2ENR |= RCC_APB2ENR_LTDCEN;
|
RCC->APB2ENR |= RCC_APB2ENR_LTDCEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
static GFXINLINE void init_dma2d_clock(void)
|
static GFXINLINE void init_dma2d_clock(void)
|
||||||
{
|
{
|
||||||
// Enable DMA2D clock
|
// Enable DMA2D clock
|
||||||
|
@ -8,10 +8,6 @@
|
|||||||
#ifndef _GDISP_LLD_BOARD_H
|
#ifndef _GDISP_LLD_BOARD_H
|
||||||
#define _GDISP_LLD_BOARD_H
|
#define _GDISP_LLD_BOARD_H
|
||||||
|
|
||||||
#define LTDC_USE_DMA2D GFXON
|
|
||||||
#define LTDC_USE_2ND_LAYER GFXOFF
|
|
||||||
#define LTDC_DMA_CACHE_FLUSH GFXOFF // This will be turned on automatically on certain systems/platforms
|
|
||||||
|
|
||||||
static const ltdcConfig driverCfg = {
|
static const ltdcConfig driverCfg = {
|
||||||
480, 272, // Width, Height (pixels)
|
480, 272, // Width, Height (pixels)
|
||||||
41, 10, // Horizontal, Vertical sync (pixels)
|
41, 10, // Horizontal, Vertical sync (pixels)
|
||||||
@ -36,7 +32,7 @@ static const ltdcConfig driverCfg = {
|
|||||||
LTDC_LEF_ENABLE // Layer configuration flags
|
LTDC_LEF_ENABLE // Layer configuration flags
|
||||||
},
|
},
|
||||||
|
|
||||||
#if LTDC_USE_2ND_LAYER
|
#if STM32LTDC_USE_LAYER2
|
||||||
{ // Foreground layer config (if turned on)
|
{ // Foreground layer config (if turned on)
|
||||||
(LLDCOLOR_TYPE *)(SDRAM_DEVICE_ADDR+(480 * 272 * LTDC_PIXELBYTES)), // Frame buffer address
|
(LLDCOLOR_TYPE *)(SDRAM_DEVICE_ADDR+(480 * 272 * LTDC_PIXELBYTES)), // Frame buffer address
|
||||||
480, 272, // Width, Height (pixels)
|
480, 272, // Width, Height (pixels)
|
||||||
@ -62,7 +58,7 @@ static GFXINLINE void init_ltdc_clock(void)
|
|||||||
// Setup LTDC clock and enable the peripheral
|
// Setup LTDC clock and enable the peripheral
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
static GFXINLINE void init_dma2d_clock(void)
|
static GFXINLINE void init_dma2d_clock(void)
|
||||||
{
|
{
|
||||||
// Setup DMA2D clock and enable the peripheral
|
// Setup DMA2D clock and enable the peripheral
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#include "gdisp_lld_config.h"
|
#include "gdisp_lld_config.h"
|
||||||
#include "../../../src/gdisp/gdisp_driver.h"
|
#include "../../../src/gdisp/gdisp_driver.h"
|
||||||
#include "stm32_ltdc.h"
|
#include "stm32_ltdc.h"
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
#include "stm32_dma2d.h"
|
#include "stm32_dma2d.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -27,6 +27,27 @@
|
|||||||
#undef GDISP_SCREEN_HEIGHT
|
#undef GDISP_SCREEN_HEIGHT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef STM32LTDC_DMA_CACHE_FLUSH
|
||||||
|
#define STM32LTDC_DMA_CACHE_FLUSH GFXOFF
|
||||||
|
#endif
|
||||||
|
#ifndef STM32LTDC_USE_DMA2D
|
||||||
|
#define STM32LTDC_USE_DMA2D GFXOFF
|
||||||
|
#endif
|
||||||
|
#ifndef STM32LTDC_USE_LAYER2
|
||||||
|
#define STM32LTDC_USE_LAYER2 GFXOFF
|
||||||
|
#endif
|
||||||
|
#ifndef STM32LTDC_USE_RGB565
|
||||||
|
#define STM32LTDC_USE_RGB565 GFXOFF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Force DMA cache flushing on certain platforms/systems.
|
||||||
|
#if STM32LTDC_USE_DMA2D
|
||||||
|
#if defined(STM32F7) || defined(STM32H7) || defined(STM32F746xx)
|
||||||
|
#undef STM32LTDC_DMA_CACHE_FLUSH
|
||||||
|
#define STM32LTDC_DMA_CACHE_FLUSH GFXON
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct ltdcLayerConfig {
|
typedef struct ltdcLayerConfig {
|
||||||
// Frame
|
// Frame
|
||||||
LLDCOLOR_TYPE* frame; // Frame buffer address
|
LLDCOLOR_TYPE* frame; // Frame buffer address
|
||||||
@ -75,20 +96,6 @@ typedef struct ltdcConfig {
|
|||||||
|
|
||||||
#include "board_STM32LTDC.h"
|
#include "board_STM32LTDC.h"
|
||||||
|
|
||||||
#ifndef LTDC_USE_DMA2D
|
|
||||||
#define LTDC_USE_DMA2D GFXOFF
|
|
||||||
#endif
|
|
||||||
#ifndef LTDC_DMA_CACHE_FLUSH
|
|
||||||
#define LTDC_DMA_CACHE_FLUSH GFXOFF
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if LTDC_USE_DMA2D
|
|
||||||
#if defined(STM32F7) || defined(STM32H7) || defined(STM32F746xx)
|
|
||||||
#undef LTDC_DMA_CACHE_FLUSH
|
|
||||||
#define LTDC_DMA_CACHE_FLUSH GFXON
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver local definitions. */
|
/* Driver local definitions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
@ -226,7 +233,7 @@ LLDSPEC gBool gdisp_lld_init(GDisplay* g) {
|
|||||||
_ltdc_init();
|
_ltdc_init();
|
||||||
|
|
||||||
// Initialise DMA2D
|
// Initialise DMA2D
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
dma2d_init();
|
dma2d_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -297,7 +304,7 @@ LLDSPEC void gdisp_lld_draw_pixel(GDisplay* g) {
|
|||||||
pos = PIXIL_POS(g, g->p.x, g->p.y);
|
pos = PIXIL_POS(g, g->p.x, g->p.y);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
while(DMA2D->CR & DMA2D_CR_START);
|
while(DMA2D->CR & DMA2D_CR_START);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -335,7 +342,7 @@ LLDSPEC gColor gdisp_lld_get_pixel_color(GDisplay* g) {
|
|||||||
pos = PIXIL_POS(g, g->p.x, g->p.y);
|
pos = PIXIL_POS(g, g->p.x, g->p.y);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
while(DMA2D->CR & DMA2D_CR_START);
|
while(DMA2D->CR & DMA2D_CR_START);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -393,8 +400,8 @@ LLDSPEC gColor gdisp_lld_get_pixel_color(GDisplay* g) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
#if LTDC_DMA_CACHE_FLUSH
|
#if STM32LTDC_DMA_CACHE_FLUSH
|
||||||
#if defined(__CC_ARM)
|
#if defined(__CC_ARM)
|
||||||
#define __ugfxDSB() __dsb(0xF)
|
#define __ugfxDSB() __dsb(0xF)
|
||||||
#else // GCC like
|
#else // GCC like
|
||||||
@ -459,7 +466,7 @@ LLDSPEC gColor gdisp_lld_get_pixel_color(GDisplay* g) {
|
|||||||
shape = (g->p.cx << 16) | (g->p.cy);
|
shape = (g->p.cx << 16) | (g->p.cy);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LTDC_DMA_CACHE_FLUSH
|
#if STM32LTDC_DMA_CACHE_FLUSH
|
||||||
{
|
{
|
||||||
// This is slightly less than optimal as we flush the whole line in the source and destination image
|
// This is slightly less than optimal as we flush the whole line in the source and destination image
|
||||||
// instead of just the cx portion but this saves us having to iterate over each line.
|
// instead of just the cx portion but this saves us having to iterate over each line.
|
||||||
@ -524,7 +531,7 @@ LLDSPEC gColor gdisp_lld_get_pixel_color(GDisplay* g) {
|
|||||||
srcstart = LTDC_PIXELBYTES * ((gU32)g->p.x2 * g->p.y1 * + g->p.x1) + (gU32)g->p.ptr;
|
srcstart = LTDC_PIXELBYTES * ((gU32)g->p.x2 * g->p.y1 * + g->p.x1) + (gU32)g->p.ptr;
|
||||||
dststart = (gU32)PIXEL_ADDR(g, PIXIL_POS(g, g->p.x, g->p.y));
|
dststart = (gU32)PIXEL_ADDR(g, PIXIL_POS(g, g->p.x, g->p.y));
|
||||||
|
|
||||||
#if LTDC_DMA_CACHE_FLUSH
|
#if STM32LTDC_DMA_CACHE_FLUSH
|
||||||
{
|
{
|
||||||
// This is slightly less than optimal as we flush the whole line in the source and destination image
|
// This is slightly less than optimal as we flush the whole line in the source and destination image
|
||||||
// instead of just the cx portion but this saves us having to iterate over each line.
|
// instead of just the cx portion but this saves us having to iterate over each line.
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
/* Driver hardware support. */
|
/* Driver hardware support. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#define LTDC_USE_DMA2D GFXON
|
|
||||||
#define GDISP_HARDWARE_DRAWPIXEL GFXON
|
#define GDISP_HARDWARE_DRAWPIXEL GFXON
|
||||||
#define GDISP_HARDWARE_PIXELREAD GFXON
|
#define GDISP_HARDWARE_PIXELREAD GFXON
|
||||||
#define GDISP_HARDWARE_CONTROL GFXON
|
#define GDISP_HARDWARE_CONTROL GFXON
|
||||||
@ -22,10 +21,10 @@
|
|||||||
// Both these pixel formats are supported - pick one.
|
// Both these pixel formats are supported - pick one.
|
||||||
// RGB565 obviously is faster and uses less RAM but with lower color resolution than RGB888
|
// RGB565 obviously is faster and uses less RAM but with lower color resolution than RGB888
|
||||||
|
|
||||||
#if defined(GDISP_LTDC_USE_RGB565) && GDISP_LTDC_USE_RGB565
|
#if defined(STM32LTDC_USE_RGB565) && STM32LTDC_USE_RGB565
|
||||||
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_RGB565
|
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_RGB565
|
||||||
#if GDISP_TOTAL_DISPLAYS > 1
|
#if GDISP_TOTAL_DISPLAYS > 1
|
||||||
#error "LTDC: You must use RGB888 pixel format with LTDC when using dual layers as only RGB888 currently supports using alpha"
|
#error "GDISP - STM32LTDC: You must use RGB888 pixel format with LTDC when using dual layers as only RGB888 currently supports using alpha"
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_RGB888
|
#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_RGB888
|
||||||
@ -36,7 +35,7 @@
|
|||||||
/* Don't change stuff below this line. Please. */
|
/* Don't change stuff below this line. Please. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if LTDC_USE_DMA2D
|
#if STM32LTDC_USE_DMA2D
|
||||||
// DMA2D supports accelerated fills
|
// DMA2D supports accelerated fills
|
||||||
#define GDISP_HARDWARE_FILLS GFXON
|
#define GDISP_HARDWARE_FILLS GFXON
|
||||||
|
|
||||||
|
@ -12,11 +12,19 @@ To use this driver:
|
|||||||
|
|
||||||
3. Add a `board_STM32LTDC.h` to you project directory (or board directory)
|
3. Add a `board_STM32LTDC.h` to you project directory (or board directory)
|
||||||
based on one of the templates.
|
based on one of the templates.
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
Configuration options available in `gfxconf.h`:
|
||||||
|
|
||||||
|
| Option | Default | Description |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `STM32LTDC_DMA_CACHE_FLUSH` | `GFOFF` | Whether to flush the DMA cache on DMA2D operations. This will be turned on automatically on certian platforms/systems. |
|
||||||
|
| `STM32LTDC_USE_DMA2D` | `GFXON` | Whether to use the DMA2D peripheral for hardware acceleration. |
|
||||||
|
| `STM32LTDC_USE_LAYER2` | `GFXOFF` | Whether to use the 2nd LTDC layer. |
|
||||||
|
| `STM32LTDC_USE_RGB565` | `GFXOFF` | Whether to use RGB565 instead of RGB888. |
|
||||||
|
|
||||||
# 2nd layer
|
# 2nd layer
|
||||||
Two things need to happen in order to use the 2nd LTDC layer:
|
To use the 2nd LTDC layer, set `STM32LTDC_USE_LAYER2` to `GFXON` in `gfxconf.h`.
|
||||||
- Set `LTDC_USE_2ND_LAYER` to `GFXON` in the board file.
|
|
||||||
- Set `GDISP_TOTAL_DISPLAYS` to `2` in `gfxconf.h`.
|
|
||||||
|
|
||||||
The 2nd layer is exposed as a separate display. Use `gdispGetDisplay()` to retrieve the individual layers.
|
The 2nd layer is exposed as a separate display. Use `gdispGetDisplay()` to retrieve the individual layers.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user