diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index 5ef8775726d2277e95c8d81219e445d904bc3fbb..c37419d7f4814965d039fc836ca48565c950de39 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -1,3 +1,27 @@ +# Phytium FreeRTOS SDK 2025-07-16 ChangeLog + +Change Log since 2025-07-05 + +## example + +- update media example and add common configs + +# Phytium FreeRTOS SDK 2025-07-16 ChangeLog + +Change Log since 2025-07-05 + +## example + +- update configs to fix openamp_for_linux bugs + +# Phytium FreeRTOS SDK 2025-07-15 ChangeLog + +Change Log since 2025-07-15 + +## example + +- update media example for sdk media driver + # Phytium FreeRTOS SDK 2025-07-07 ChangeLog Change Log since 2025-07-07 diff --git a/docs/reference/usr/install_windows.md b/docs/reference/usr/install_windows.md index 7a4fe69ed57ecef176c102c604ffc389c0ad7cd6..86df8dc699bc5347793acbb84df35549b58e06a3 100644 --- a/docs/reference/usr/install_windows.md +++ b/docs/reference/usr/install_windows.md @@ -18,7 +18,7 @@ python .\install.py ``` cd .\example\template make list_kconfig -make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch64_demo_eg +make load_kconfig LOAD_CONFIG_NAME=pe220x_aarch64_demo_eg make menuconfig make clean make all diff --git a/docs/reference/usr/usage.md b/docs/reference/usr/usage.md index 0562aef33b6b36dc569c0ee525e2715b733696c3..c3bbd905f923ce83f67378ce49143ae8ed1f0a45 100644 --- a/docs/reference/usr/usage.md +++ b/docs/reference/usr/usage.md @@ -33,7 +33,7 @@ src --> 用户源文件* - make list_kconfig 当前工程支持哪些配置文件 - make load_kconfig LOAD_CONFIG_NAME=[kconfig configuration files] 将预设配置加载至工程中 ->例如:配置成E2000D,使用对应的默认配置,如E2000d 32位: +>例如:配置成E2000D demo,使用对应的默认配置,如E2000d 32位: ``` $ make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch32_demo_i2c ``` diff --git a/drivers/media/fmedia_os.c b/drivers/media/fmedia_os.c index 5f870df5f4ce5070a64431678feae50500edebbf..16f0355834096edebb9bfb96788db14d5928abd2 100644 --- a/drivers/media/fmedia_os.c +++ b/drivers/media/fmedia_os.c @@ -50,20 +50,23 @@ * @msg: init the media,dc and dp * @param {u32} channel is the dc channel * @param {FFreeRTOSMedia*} instance is the driver instance + * @param {u32} index is the dp index * @param {u32} width is the width * @param {u32} height is the height * @return err code information, 0 indicates success,others indicates failed */ -FFreeRTOSMedia *FFreeRTOSMediaHwInit(FFreeRTOSMedia *instance, u32 width, u32 height) +FFreeRTOSMedia *FFreeRTOSMediaHwInit(FFreeRTOSMedia *instance, u32 index, u32 width, u32 height) { FError ret = FT_SUCCESS; - u32 index; - for (index = 0; index < FDCDP_INSTANCE_NUM; index ++) + ret = FDcDpInitial(&instance->dcdp_ctrl, index, width, height); + if(FT_SUCCESS != ret) { - ret = FDcDpInitial(&instance->dcdp_ctrl, index, width, height); + FMEDIA_ERROR("FDcDpInitial failed, ret = %d", ret); + return NULL; } - if((instance->dcdp_ctrl.is_initialized[0]) | (instance->dcdp_ctrl.is_initialized[1])) + + if((instance->dcdp_ctrl.is_initialized[index]) == FDCDP_IS_INITIALIZED) { ret = FDP_SUCCESS; } diff --git a/drivers/media/fmedia_os.h b/drivers/media/fmedia_os.h index 030b9f0a8fe7200f647425a48c6f1def26d3996b..8f227ec9fe7ab98923b2c463e68aa0dc223cfafc 100644 --- a/drivers/media/fmedia_os.h +++ b/drivers/media/fmedia_os.h @@ -51,7 +51,7 @@ typedef struct } FFreeRTOSMedia; /*init the media and return the meidia instance*/ -FFreeRTOSMedia *FFreeRTOSMediaHwInit(FFreeRTOSMedia *instance, u32 width, u32 height); +FFreeRTOSMedia *FFreeRTOSMediaHwInit(FFreeRTOSMedia *instance, u32 index, u32 width, u32 height); #ifdef __cplusplus diff --git a/example/network/lwip_https/README.md b/example/network/lwip_https/README.md index 26cd8c98e56f74ab152091b5a10d4128d7f32d2c..4b600af2cf2acd5b76f2a201c92e582205dd9627 100644 --- a/example/network/lwip_https/README.md +++ b/example/network/lwip_https/README.md @@ -77,7 +77,7 @@ - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch64_demo_lwip_https +make load_kconfig LOAD_CONFIG_NAME=pe2202_aarch64_demo_lwip_https ``` - 选择例程需要的配置 diff --git a/example/network/lwip_iperf/README.md b/example/network/lwip_iperf/README.md index 3a30e9049d1cfb79ae1d10d55b3a7ff41cc7c635..8bb1b498fb9adaa4f2568b4e07e969db22d74009 100644 --- a/example/network/lwip_iperf/README.md +++ b/example/network/lwip_iperf/README.md @@ -71,7 +71,7 @@ - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch64_demo_lwip_iperf +make load_kconfig LOAD_CONFIG_NAME=pe2202_aarch64_demo_lwip_iperf ``` - 选择例程需要的配置 diff --git a/example/network/lwip_startup/README.md b/example/network/lwip_startup/README.md index 766c4881414654366fc5f620d6e7c7bcbf270b4a..6975b304613a2bbed5599a5190111976796ae028 100644 --- a/example/network/lwip_startup/README.md +++ b/example/network/lwip_startup/README.md @@ -75,7 +75,7 @@ - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch64_demo_lwip_startup +make load_kconfig LOAD_CONFIG_NAME=pe2202_aarch64_demo_lwip_startup ``` - 选择例程需要的配置 diff --git a/example/network/sockets/udp_multicast/README.md b/example/network/sockets/udp_multicast/README.md index 23faeab9ddfe90f5eab3c8a2b1d31f703c3ece1d..a30593d4dc0d35f7931d7630bd820cc39c83f204 100644 --- a/example/network/sockets/udp_multicast/README.md +++ b/example/network/sockets/udp_multicast/README.md @@ -66,7 +66,7 @@ - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch64_demo_udp_multicast +make load_kconfig LOAD_CONFIG_NAME=pe2202_aarch64_demo_udp_multicast ``` - 选择例程需要的配置 diff --git a/example/peripheral/dma/ddma/README.md b/example/peripheral/dma/ddma/README.md index 5db357859120d7710fab7881a3dab1a10595f4f1..1903f3b654a06628948755e656786efe7d70902b 100755 --- a/example/peripheral/dma/ddma/README.md +++ b/example/peripheral/dma/ddma/README.md @@ -69,16 +69,16 @@ Phytium Pi接线方法:杜邦线连接下图所示得19号引脚和21号引脚 - 在当前目录下 - 执行以上指令 -### 2.3 构建和下载 +### 2.3 构建和下 #### 2.3.1 构建过程 - 在host侧完成配置 -> 配置成 e2000q,对于其它平台,使用对应的默认配置,如: +> 配置成 e2000q demo,对于其它平台,使用对应的默认配置,如: - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_ddma +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_ddma ``` - 选择例程需要的配置 diff --git a/example/peripheral/dma/gdma/README.md b/example/peripheral/dma/gdma/README.md index 6a63edfdd01b540b1e2089586b97f01e0fc8a32a..7dc67ec97624dd5474c0a3511ba6f53b298ee9ab 100644 --- a/example/peripheral/dma/gdma/README.md +++ b/example/peripheral/dma/gdma/README.md @@ -60,11 +60,11 @@ GDMA (Generic Direct Memory Access) 用于将数据从一个内存地址复制 #### 2.3.1 构建过程 - 在host侧完成配置 -> 配置成 e2000q,对于其它平台,使用对应的的默认配置,如, +> 配置成 e2000q demo,对于其它平台,使用对应的的默认配置,如, - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_gdma +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch32_demo_gdma ``` - 选择例程需要的配置 diff --git a/example/peripheral/i2s/README.md b/example/peripheral/i2s/README.md index 63d050d7f21e625c7e2c6e8ff6c1181554521da1..79d4082328c1fde65bc57787bb0e08715f174f90 100644 --- a/example/peripheral/i2s/README.md +++ b/example/peripheral/i2s/README.md @@ -68,9 +68,9 @@ E2000Q对应的配置项是: >描述构建、烧录下载镜像的过程,列出相关的命令
- 在host侧完成配置 ->配置成E2000D,对于其它平台,使用对应的默认配置,如E2000d 32位: +>配置成E2000Q demo,对于其它平台,使用对应的默认配置 ``` -$ make load_kconfig = e2000d_aarch32_demo_i2s +$ make load_kconfig = pe2204_aarch64_demo_i2s ``` - 在host侧完成构建 diff --git a/example/peripheral/media/lvgl_demo/README.md b/example/peripheral/media/lvgl_demo/README.md index 22e6c7bd3dc29c80fc4fff69e72ba14762028aed..4364536437349c296430f4314662b442719c05fb 100644 --- a/example/peripheral/media/lvgl_demo/README.md +++ b/example/peripheral/media/lvgl_demo/README.md @@ -6,8 +6,8 @@ DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数据,按照 Display 协议处理后送给 DP PHY 接入显示器。 -本司E2000系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 -本例程主要展示本司E2000系列以及phytiumpi芯片DC显示驱动功能以及lvgl中benchmark, stress以及widgets例程的操作。 +本司PE220X系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 +本例程主要展示本司PE220X系列以及phytiumpi芯片DC显示驱动功能以及lvgl中benchmark, stress以及widgets例程的操作。 lvgl中benchmark是一个基准测试,用来测试硬件平台的性能和驱动支持buufer刷新能力,主要是测试屏幕刷新的流畅度以及帧率。 @@ -28,7 +28,7 @@ lvgl中widgets属于组件测试,将lvgl中库组件组合运行,此demo属 本例程需要用到 -- Phytium开发板(E2000开发板或phytiumpi)) +- Phytium开发板(E2000D/Q DEMO、PhytiumPi开发板) - 显示器及连接线 - [Phytium Standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk) @@ -73,9 +73,9 @@ lvgl中widgets属于组件测试,将lvgl中库组件组合运行,此demo属 - 在host侧完成配置 ->配置成E2000,对于其它平台,使用对应的默认配置 +>配置成E2000Q demo,对于其它平台,使用对应的默认配置 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_media +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_media make menuconfig make image ``` diff --git a/example/peripheral/media/lvgl_demo/configs/pe2202_aarch32_demo_media.config b/example/peripheral/media/lvgl_demo/configs/pe2202_aarch32_demo_media.config index 28036d981fa3979d667ce2559cad12b32dd18609..edc13fdfed978ab20c8d50c24a9c0e1beef95e62 100644 --- a/example/peripheral/media/lvgl_demo/configs/pe2202_aarch32_demo_media.config +++ b/example/peripheral/media/lvgl_demo/configs/pe2202_aarch32_demo_media.config @@ -3,7 +3,7 @@ CONFIG_TARGET_PE2202=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x200000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_demo/configs/pe2202_aarch64_demo_media.config b/example/peripheral/media/lvgl_demo/configs/pe2202_aarch64_demo_media.config index ca32f75ef02256024fc2d0aa6c1f571b9c30aaaf..cbaed413e31f21d75c3772473329965b3b02ad12 100644 --- a/example/peripheral/media/lvgl_demo/configs/pe2202_aarch64_demo_media.config +++ b/example/peripheral/media/lvgl_demo/configs/pe2202_aarch64_demo_media.config @@ -2,7 +2,7 @@ CONFIG_TARGET_PE2202=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_demo_media.config b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_demo_media.config index 10aec3c7a7832f0d720728fe0d6a2e214bdb83c2..f056a0ea8abe1d6cf7d6235877b890706b59a5d0 100644 --- a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_demo_media.config +++ b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_demo_media.config @@ -2,7 +2,7 @@ CONFIG_ARCH_ARMV8_AARCH32=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x200000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_phytiumpi_media.config b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_phytiumpi_media.config index a8c675504ee59d0a6101ffd72e470e611d754efa..7072bceb87cfa128c9a81a8f1b6d45822e6e9a6b 100644 --- a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_phytiumpi_media.config +++ b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch32_phytiumpi_media.config @@ -3,7 +3,7 @@ CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x200000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_demo_media.config b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_demo_media.config index 68426af5d925b8d662e9c04da3fe8d146419aea0..1b389219ce3375c5fde78ba0b236d1f66d703cf6 100644 --- a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_demo_media.config +++ b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_demo_media.config @@ -1,7 +1,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_phytiumpi_media.config b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_phytiumpi_media.config index fedcf58fec294891367c57bc0be12ac76f016a6b..473238d48fd4c3cd2a49277a213f81832aabf1f8 100644 --- a/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_phytiumpi_media.config +++ b/example/peripheral/media/lvgl_demo/configs/pe2204_aarch64_phytiumpi_media.config @@ -3,7 +3,7 @@ CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_demo/inc/lv_demo_create.h b/example/peripheral/media/lvgl_demo/inc/lv_demo_create.h index f7a1509e3c8526c2fe3e0bc49c04e7c32fbca716..80912e35bb0909f5d34ce4aff9fba8d092cd65e2 100644 --- a/example/peripheral/media/lvgl_demo/inc/lv_demo_create.h +++ b/example/peripheral/media/lvgl_demo/inc/lv_demo_create.h @@ -42,22 +42,14 @@ extern "C" { #include "lvgl-8.3/lvgl.h" #endif -typedef struct -{ - u32 channel; - u32 width; - u32 height; - u32 multi_mode; - u32 color_depth; - u32 refresh_rate; -} InputParm; - /*create the media demo init task*/ BaseType_t FFreeRTOSlVGLDemoCreate(void); /*create the media init task*/ BaseType_t FFreeRTOSMediaInitCreate(void ); +BaseType_t FFreeRTOSMediaDeinit(void); + /*create the lvgl config task*/ BaseType_t FFreeRTOSlVGLConfigCreate(void); diff --git a/example/peripheral/media/lvgl_demo/makefile b/example/peripheral/media/lvgl_demo/makefile index 8f04c02504b44f402385fc16133134f8d111f7e2..47ad81ffb585828a34673f236adc0ededc9cf469 100644 --- a/example/peripheral/media/lvgl_demo/makefile +++ b/example/peripheral/media/lvgl_demo/makefile @@ -8,12 +8,14 @@ BOOT_IMG_NAME ?= freertos USER_CSRC := main.c USER_CSRC += $(wildcard src/*.c) +USER_CSRC += $(wildcard ../media_common/*.c) USER_ASRC := USER_CXXSRC := USER_INCLUDE := $(PROJECT_DIR) \ $(PROJECT_DIR)/inc \ + $(PROJECT_DIR)/../media_common include $(FREERTOS_SDK_DIR)/tools/makeall.mk diff --git a/example/peripheral/media/lvgl_demo/sdkconfig b/example/peripheral/media/lvgl_demo/sdkconfig index c14fcd6465071db59d1b1dd45934e26f4355524e..9b86ce46d63adabe8de22e5c03c20b9476344314 100644 --- a/example/peripheral/media/lvgl_demo/sdkconfig +++ b/example/peripheral/media/lvgl_demo/sdkconfig @@ -70,6 +70,7 @@ CONFIG_TARGET_PE220X=y CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# CONFIG_UART_INIT_NOT_CLR_INTR is not set # end of Soc configuration # @@ -156,7 +157,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y +# CONFIG_USE_FMEDIA_V2 is not set # CONFIG_USE_SCMI_MHU is not set # CONFIG_USE_I2S is not set # CONFIG_USE_I3C is not set @@ -227,6 +229,7 @@ CONFIG_STACK_SIZE=0x400 # FreeRTOS Uart Drivers # CONFIG_FREERTOS_USE_UART=y +# CONFIG_FREERTOS_USE_SERIAL_V2 is not set # end of FreeRTOS Uart Drivers # @@ -252,12 +255,14 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_XMAC is not set # CONFIG_FREERTOS_USE_GMAC is not set +# CONFIG_FREERTOS_USE_XMAC_V2 is not set # end of FreeRTOS Eth Drivers # # FreeRTOS Spim Drivers # # CONFIG_FREERTOS_USE_FSPIM is not set +# CONFIG_FREERTOS_USE_FSPIM_V2 is not set # end of FreeRTOS Spim Drivers # @@ -283,6 +288,7 @@ CONFIG_FREERTOS_USE_UART=y # FreeRTOS I2c Drivers # # CONFIG_FREERTOS_USE_I2C is not set +# CONFIG_FREERTOS_USE_FI2C_V2 is not set # end of FreeRTOS I2c Drivers # diff --git a/example/peripheral/media/lvgl_demo/sdkconfig.h b/example/peripheral/media/lvgl_demo/sdkconfig.h index 74acd8a931be1a62da343b4304c6bdeab18e8457..309a3fcf8d81eb5512995fa236a4d877be718e58 100644 --- a/example/peripheral/media/lvgl_demo/sdkconfig.h +++ b/example/peripheral/media/lvgl_demo/sdkconfig.h @@ -66,6 +66,7 @@ #define CONFIG_DEFAULT_DEBUG_PRINT_UART1 /* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ /* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* CONFIG_UART_INIT_NOT_CLR_INTR is not set */ /* end of Soc configuration */ /* Board Configuration */ @@ -144,7 +145,8 @@ /* CONFIG_USE_PWM is not set */ /* CONFIG_USE_IPC is not set */ #define CONFIG_USE_MEDIA -#define CONFIG_USE_FMEDIA +#define CONFIG_USE_FMEDIA_V1 +/* CONFIG_USE_FMEDIA_V2 is not set */ /* CONFIG_USE_SCMI_MHU is not set */ /* CONFIG_USE_I2S is not set */ /* CONFIG_USE_I3C is not set */ @@ -206,6 +208,7 @@ /* FreeRTOS Uart Drivers */ #define CONFIG_FREERTOS_USE_UART +/* CONFIG_FREERTOS_USE_SERIAL_V2 is not set */ /* end of FreeRTOS Uart Drivers */ /* FreeRTOS Pwm Drivers */ @@ -227,11 +230,13 @@ /* CONFIG_FREERTOS_USE_XMAC is not set */ /* CONFIG_FREERTOS_USE_GMAC is not set */ +/* CONFIG_FREERTOS_USE_XMAC_V2 is not set */ /* end of FreeRTOS Eth Drivers */ /* FreeRTOS Spim Drivers */ /* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* CONFIG_FREERTOS_USE_FSPIM_V2 is not set */ /* end of FreeRTOS Spim Drivers */ /* FreeRTOS DMA Drivers */ @@ -253,6 +258,7 @@ /* FreeRTOS I2c Drivers */ /* CONFIG_FREERTOS_USE_I2C is not set */ +/* CONFIG_FREERTOS_USE_FI2C_V2 is not set */ /* end of FreeRTOS I2c Drivers */ /* FreeRTOS Mio Drivers */ diff --git a/example/peripheral/media/lvgl_demo/src/cmd.c b/example/peripheral/media/lvgl_demo/src/cmd.c index c6118ab259a43cded88b396f27927731cc112509..7dfcd7f00324bfd165939edb2d4b33714b1ecd99 100644 --- a/example/peripheral/media/lvgl_demo/src/cmd.c +++ b/example/peripheral/media/lvgl_demo/src/cmd.c @@ -35,7 +35,6 @@ #include "shell_port.h" #include "lv_demo_create.h" -#include "lv_demo_test.h" static void FFreeRTOSMediaCmdUsage(void) { printf("Usage:\r\n"); @@ -104,12 +103,11 @@ static int MediaCmdEntry(int argc, char *argv[]) printf("please ensure the media has been inited \r\n"); return -2; } - if (argc >= 3) + BaseType_t task_ret = FFreeRTOSMediaDeinit(); + if (pdPASS != task_ret) { - id = (u32)simple_strtoul(argv[2], NULL, 10); + return -2; } - FFreeRTOSMediaChannelDeinit(id); - } return 0; diff --git a/example/peripheral/media/lvgl_demo/src/lv_demo_create.c b/example/peripheral/media/lvgl_demo/src/lv_demo_create.c index 714f7d9436f1b637e4d8fb12c6b7d084dcfbdb70..741b66ba19713a3dedc525c777ff55bf166d2839 100644 --- a/example/peripheral/media/lvgl_demo/src/lv_demo_create.c +++ b/example/peripheral/media/lvgl_demo/src/lv_demo_create.c @@ -36,8 +36,8 @@ #include "fkernel.h" #include "lv_demo_create.h" -#include "lv_demo_test.h" #include "lv_port_disp.h" +#include "media_common.h" #if LV_USE_DEMO_BENCHMARK #include "lv_demo_benchmark.h" @@ -50,6 +50,18 @@ #if LV_USE_DEMO_WIDGETS #include "lv_demo_widgets.h" #endif + +/*通道组合*/ +#define CHANNEL_NONE 0x0 /*不选择*/ +#define CHANNEL_DP_0 0x1 /*通道0*/ +#define CHANNEL_DP_1 0x2 /*通道1*/ +#define CHANNEL_DP_2 0x4 /*通道2*/ +#define CHANNEL_DP_0_1 (CHANNEL_DP_0 | CHANNEL_DP_1) /*通道0 1*/ +#define CHANNEL_DP_0_2 (CHANNEL_DP_0 | CHANNEL_DP_2) /*通道0 2*/ +#define CHANNEL_DP_1_2 (CHANNEL_DP_1 | CHANNEL_DP_2) /*通道1 2*/ +#define CHANNEL_DP_ALL (CHANNEL_DP_0 | CHANNEL_DP_1 | CHANNEL_DP_2) /*通道0 1 2*/ + +static u32 channel_mask = CHANNEL_DP_0_1; /* 默认选择双通道*/ /************************** Constant Definitions *****************************/ #define LVGL_HEART_TIMER_PERIOD (pdMS_TO_TICKS(1UL)) #define LVGL_CONTINUE_TIMER 10000000 @@ -59,6 +71,7 @@ static TaskHandle_t demo_task; static TaskHandle_t lvgl_init_task; static TaskHandle_t init_task; static TaskHandle_t hpd_task ; +static FFreeRTOSMedia os_media; extern void FFreeRTOSDispdEnableUpdate(void); extern void FFreeRTOSDispdDisableUpdate(void); @@ -169,7 +182,25 @@ static void FFreeRTOSLVGLDemoTask(void) } } - +/** + * @name: FFreeRTOSLVGLConfigTask + * @msg: config the lvgl + * @return Null + */ +void FFreeRTOSLVGLConfigTask(void) +{ + u32 index; + lv_init(); + FFreeRTOSPortInit(); + for (index = 0; index < FDP_INSTANCE_NUM; index ++) + { + if (channel_mask & BIT(index)) + { + FMediaDispFramebuffer(&os_media.dcdp_ctrl); + } + } + vTaskDelete(NULL); +} /** * @name: FFreeRTOSMediaInitCreate @@ -182,17 +213,17 @@ BaseType_t FFreeRTOSMediaInitCreate(void) /* enter critical region */ taskENTER_CRITICAL(); /* Media init task */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaDeviceInit, /* 任务入口函数 */ - (const char *)"FFreeRTOSMediaDeviceInit", /* 任务名字 */ + xReturn = xTaskCreate((TaskFunction_t)FMediaInitTask, /* 任务入口函数 */ + (const char *)"FMediaInitTask", /* 任务名字 */ 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ (TaskHandle_t *)&init_task); /* 任务控制 */ /* Hpd task control */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdHandle, /* 任务入口函数 */ - (const char *)"FFreeRTOSMediaHpdHandle", /* 任务名字 */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaHpdTask", /* 任务名字 */ 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ (TaskHandle_t *)&hpd_task); /* exit critical region */ @@ -201,6 +232,25 @@ BaseType_t FFreeRTOSMediaInitCreate(void) } +/* create media test*/ +BaseType_t FFreeRTOSMediaDeinit(void) +{ + + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + /* enter critical region */ + taskENTER_CRITICAL(); + /* Media init task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaChannelDeinit, /* 任务入口函数 */ + (const char *)"FMediaDeInitTask", /* 任务名字 */ + 1024, /* 任务栈大小 */ + &os_media, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&init_task); + /* exit critical region */ + taskEXIT_CRITICAL(); + return xReturn; +} + /** * @name: FFreeRTOSlVGLConfigCreate * @msg: set the lvgl init task diff --git a/example/peripheral/media/lvgl_indev/README.md b/example/peripheral/media/lvgl_indev/README.md index 2aed5da31ffdd1e3da275775d5d32212e4611819..a0fb8cd527b0565d45a26b5de43d6bafde651697 100644 --- a/example/peripheral/media/lvgl_indev/README.md +++ b/example/peripheral/media/lvgl_indev/README.md @@ -6,8 +6,8 @@ DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数据,按照 Display 协议处理后送给 DP PHY 接入显示器。 -本司E2000系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 -本例程主要展示本司E2000系列以及phytiumpi芯片DC显示驱动功能以及驱动外设的能力,当前支持的设备有鼠标以及键盘 +本司PE220X系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 +本例程主要展示本司PE220X系列以及phytiumpi芯片DC显示驱动功能以及驱动外设的能力,当前支持的设备有鼠标以及键盘 本例程支持的cmd包括 @@ -38,7 +38,7 @@ DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数 本例程所需的硬件设备包括 -- 通过DP线将显示器与E2000板卡连接 +- 通过DP线将显示器与E2000D/Q DEMO、PhytiumPi开发板连接 - 利用串口调试线连接板卡和调试电脑,波特率设为 115200-8-1-N ### 2.2 SDK配置方法 @@ -67,9 +67,9 @@ DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数 - 在host侧完成配置 ->配置成E2000,对于其它平台,使用对应的默认配置 +>配置成E2000Q demo,对于其它平台,使用对应的默认配置 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_media +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_media make menuconfig make image ``` diff --git a/example/peripheral/media/lvgl_indev/configs/pe2202_aarch32_demo_media.config b/example/peripheral/media/lvgl_indev/configs/pe2202_aarch32_demo_media.config index f4de77ab9ca2d29fd08443f37f147a883e4fff6e..66cbd8debeff014eff6d5207b5c1aa6ccd24de22 100644 --- a/example/peripheral/media/lvgl_indev/configs/pe2202_aarch32_demo_media.config +++ b/example/peripheral/media/lvgl_indev/configs/pe2202_aarch32_demo_media.config @@ -3,7 +3,7 @@ CONFIG_TARGET_PE2202=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_indev/configs/pe2202_aarch64_demo_media.config b/example/peripheral/media/lvgl_indev/configs/pe2202_aarch64_demo_media.config index 073e80e0b21aead7df0493381db93a431ebc9a09..36ef82c2278915f636fadfbc38c4c9010beafb66 100644 --- a/example/peripheral/media/lvgl_indev/configs/pe2202_aarch64_demo_media.config +++ b/example/peripheral/media/lvgl_indev/configs/pe2202_aarch64_demo_media.config @@ -2,7 +2,7 @@ CONFIG_TARGET_PE2202=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_demo_media.config b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_demo_media.config index 850cfa980c34c523a8250e37ceeb235d5f3ab81c..4bbd35cf3aab7b1db1fa062cfa66464e6adf67e6 100644 --- a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_demo_media.config +++ b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_demo_media.config @@ -2,7 +2,7 @@ CONFIG_ARCH_ARMV8_AARCH32=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_phytiumpi_media.config b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_phytiumpi_media.config index 1389b8c268a504ba40b7059405b0d5e4953a5d9c..4255fe8b4a6ba3013e962307783395a9ca4e3f54 100644 --- a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_phytiumpi_media.config +++ b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch32_phytiumpi_media.config @@ -3,7 +3,7 @@ CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_demo_media.config b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_demo_media.config index 244c389045e7e31ad20f176187e0f7541a3b3ee7..59fa115a86da932cb26ce941b3d95c6d6c84a822 100644 --- a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_demo_media.config +++ b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_demo_media.config @@ -1,7 +1,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_STACK_SIZE=0x100000 diff --git a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_phytiumpi_media.config b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_phytiumpi_media.config index c9a0383ff1524cd5868d7598f8697c70a8c87a07..b5a586e6a88ac1c2f17ff480ed8ee977c704a6a8 100644 --- a/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_phytiumpi_media.config +++ b/example/peripheral/media/lvgl_indev/configs/pe2204_aarch64_phytiumpi_media.config @@ -3,7 +3,7 @@ CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_indev/inc/lv_indev_create.h b/example/peripheral/media/lvgl_indev/inc/lv_indev_create.h index 56aa713978357bef655075d3ea4a06a8dbd1eaad..8cb0d9aa68c025897eadec584522e1d606810279 100644 --- a/example/peripheral/media/lvgl_indev/inc/lv_indev_create.h +++ b/example/peripheral/media/lvgl_indev/inc/lv_indev_create.h @@ -58,6 +58,12 @@ BaseType_t FFreeRTOSListUsbDev(int argc, char *argv[]); /*init the media*/ BaseType_t FFreeRTOSMediaInitCreate(void); +/*deinit the media*/ +BaseType_t FFreeRTOSMediaDeinit(void); + +/*lvgl config*/ +void FFreeRTOSLVGLConfigTask(void); + /*set the lvgl init task*/ BaseType_t FFreeRTOSlVGLConfigCreate(void); diff --git a/example/peripheral/media/lvgl_indev/inc/lv_indev_test.h b/example/peripheral/media/lvgl_indev/inc/lv_indev_test.h deleted file mode 100644 index 133bf775b9bb0aa513e129bbf6de61af92527ebe..0000000000000000000000000000000000000000 --- a/example/peripheral/media/lvgl_indev/inc/lv_indev_test.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2023, Phytium Technology Co., Ltd. All Rights Reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * FilePath: lv_indev_test.h - * Date: 2023-02-05 18:27:47 - * LastEditTime: 2023-07-06 11:02:47 - * Description: This file is for providing the lvgl test config - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------ -------- -------------------------------------- - * 1.0 Wangzq 2023//07/06 Modify the format and establish the version - * 1.1 Wangzq 2023/07/07 change the third-party and driver relation - */ - -#ifndef LV_INDEV_TEST_H -#define LV_INDEV_TEST_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "lvgl.h" -#include "ftypes.h" - - -/*the lvgl demo*/ -void lv_demo_indev(void); - -/*deinit the media */ -void FFreeRTOSMediaChannelDeinit(u32 id); - -/*handle the hpd event*/ -void FFreeRTOSMediaHpdHandle(void); - -/*init the media */ -void FFreeRTOSMediaDeviceInit(void); - -/*lvgl config*/ -void FFreeRTOSLVGLConfigTask(void); - -#ifdef __cplusplus -} /*extern "C"*/ -#endif -#endif \ No newline at end of file diff --git a/example/peripheral/media/lvgl_indev/makefile b/example/peripheral/media/lvgl_indev/makefile index 681587e37cb8a2adc896e36036c56f9a99321b9f..47ad81ffb585828a34673f236adc0ededc9cf469 100644 --- a/example/peripheral/media/lvgl_indev/makefile +++ b/example/peripheral/media/lvgl_indev/makefile @@ -8,13 +8,14 @@ BOOT_IMG_NAME ?= freertos USER_CSRC := main.c USER_CSRC += $(wildcard src/*.c) -USER_CSRC += $(wildcard ../common/*.c) +USER_CSRC += $(wildcard ../media_common/*.c) USER_ASRC := USER_CXXSRC := USER_INCLUDE := $(PROJECT_DIR) \ $(PROJECT_DIR)/inc \ + $(PROJECT_DIR)/../media_common include $(FREERTOS_SDK_DIR)/tools/makeall.mk diff --git a/example/peripheral/media/lvgl_indev/sdkconfig b/example/peripheral/media/lvgl_indev/sdkconfig index 79b2eb17710c6450aba6561de711dbaaab08639b..9b76cd9e520a7f28631e15161b8e0b78270f14b2 100644 --- a/example/peripheral/media/lvgl_indev/sdkconfig +++ b/example/peripheral/media/lvgl_indev/sdkconfig @@ -70,6 +70,7 @@ CONFIG_TARGET_PE220X=y CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# CONFIG_UART_INIT_NOT_CLR_INTR is not set # end of Soc configuration # @@ -156,7 +157,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y +# CONFIG_USE_FMEDIA_V2 is not set # CONFIG_USE_SCMI_MHU is not set # CONFIG_USE_I2S is not set # CONFIG_USE_I3C is not set @@ -227,6 +229,7 @@ CONFIG_STACK_SIZE=0x400 # FreeRTOS Uart Drivers # CONFIG_FREERTOS_USE_UART=y +# CONFIG_FREERTOS_USE_SERIAL_V2 is not set # end of FreeRTOS Uart Drivers # @@ -252,12 +255,14 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_XMAC is not set # CONFIG_FREERTOS_USE_GMAC is not set +# CONFIG_FREERTOS_USE_XMAC_V2 is not set # end of FreeRTOS Eth Drivers # # FreeRTOS Spim Drivers # # CONFIG_FREERTOS_USE_FSPIM is not set +# CONFIG_FREERTOS_USE_FSPIM_V2 is not set # end of FreeRTOS Spim Drivers # @@ -283,6 +288,7 @@ CONFIG_FREERTOS_USE_UART=y # FreeRTOS I2c Drivers # # CONFIG_FREERTOS_USE_I2C is not set +# CONFIG_FREERTOS_USE_FI2C_V2 is not set # end of FreeRTOS I2c Drivers # diff --git a/example/peripheral/media/lvgl_indev/sdkconfig.h b/example/peripheral/media/lvgl_indev/sdkconfig.h index 8f761957221f5bfcb35bf1545be2ffeb0a1dac1b..48c0aa7f152e04cedc14f9ce2f438bb82211487d 100644 --- a/example/peripheral/media/lvgl_indev/sdkconfig.h +++ b/example/peripheral/media/lvgl_indev/sdkconfig.h @@ -66,6 +66,7 @@ #define CONFIG_DEFAULT_DEBUG_PRINT_UART1 /* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ /* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* CONFIG_UART_INIT_NOT_CLR_INTR is not set */ /* end of Soc configuration */ /* Board Configuration */ @@ -144,7 +145,8 @@ /* CONFIG_USE_PWM is not set */ /* CONFIG_USE_IPC is not set */ #define CONFIG_USE_MEDIA -#define CONFIG_USE_FMEDIA +#define CONFIG_USE_FMEDIA_V1 +/* CONFIG_USE_FMEDIA_V2 is not set */ /* CONFIG_USE_SCMI_MHU is not set */ /* CONFIG_USE_I2S is not set */ /* CONFIG_USE_I3C is not set */ @@ -206,6 +208,7 @@ /* FreeRTOS Uart Drivers */ #define CONFIG_FREERTOS_USE_UART +/* CONFIG_FREERTOS_USE_SERIAL_V2 is not set */ /* end of FreeRTOS Uart Drivers */ /* FreeRTOS Pwm Drivers */ @@ -227,11 +230,13 @@ /* CONFIG_FREERTOS_USE_XMAC is not set */ /* CONFIG_FREERTOS_USE_GMAC is not set */ +/* CONFIG_FREERTOS_USE_XMAC_V2 is not set */ /* end of FreeRTOS Eth Drivers */ /* FreeRTOS Spim Drivers */ /* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* CONFIG_FREERTOS_USE_FSPIM_V2 is not set */ /* end of FreeRTOS Spim Drivers */ /* FreeRTOS DMA Drivers */ @@ -253,6 +258,7 @@ /* FreeRTOS I2c Drivers */ /* CONFIG_FREERTOS_USE_I2C is not set */ +/* CONFIG_FREERTOS_USE_FI2C_V2 is not set */ /* end of FreeRTOS I2c Drivers */ /* FreeRTOS Mio Drivers */ diff --git a/example/peripheral/media/lvgl_indev/src/cmd.c b/example/peripheral/media/lvgl_indev/src/cmd.c index 2460d8561c286b0b63bda405d993883f76fa8faa..3365f692c2861cf227c027c1edf84105a2a3fb7b 100644 --- a/example/peripheral/media/lvgl_indev/src/cmd.c +++ b/example/peripheral/media/lvgl_indev/src/cmd.c @@ -41,7 +41,7 @@ #include "lv_obj.h" #include "lv_conf.h" #include "lv_indev_create.h" -#include "lv_indev_test.h" +#include "media_common.h" static void FFreeRTOSMediaCmdUsage(void) { @@ -154,13 +154,11 @@ static int MediaCmdEntry(int argc, char *argv[]) printf("please ensure the media has been inited \r\n"); return -2; } - if (argc < 3) + BaseType_t task_ret = FFreeRTOSMediaDeinit(); + if (pdPASS != task_ret) { return -2; } - - channel = (uint8_t)simple_strtoul(argv[2], NULL, 10); - FFreeRTOSMediaChannelDeinit(channel); } if (!strcmp(argv[1], "lsusb")) diff --git a/example/peripheral/media/lvgl_indev/src/lv_indev_create.c b/example/peripheral/media/lvgl_indev/src/lv_indev_create.c index 5772552f1e3495992c530fbaf2cbf9ddab4fe21a..9369efcc5eee74f51f077e5b2aeb7c6cfbc539fc 100644 --- a/example/peripheral/media/lvgl_indev/src/lv_indev_create.c +++ b/example/peripheral/media/lvgl_indev/src/lv_indev_create.c @@ -37,13 +37,25 @@ #include "../lvgl.h" #include "lv_indev_create.h" #include "lv_indev_port.h" -#include "lv_indev_test.h" #include "lv_port_disp.h" #include "lv_indev_example.h" +#include "media_common.h" + #include "usbh_core.h" #include "usbh_hid.h" +/*通道组合*/ +#define CHANNEL_NONE 0x0 /*不选择*/ +#define CHANNEL_DP_0 0x1 /*通道0*/ +#define CHANNEL_DP_1 0x2 /*通道1*/ +#define CHANNEL_DP_2 0x4 /*通道2*/ +#define CHANNEL_DP_0_1 (CHANNEL_DP_0 | CHANNEL_DP_1) /*通道0 1*/ +#define CHANNEL_DP_0_2 (CHANNEL_DP_0 | CHANNEL_DP_2) /*通道0 2*/ +#define CHANNEL_DP_1_2 (CHANNEL_DP_1 | CHANNEL_DP_2) /*通道1 2*/ +#define CHANNEL_DP_ALL (CHANNEL_DP_0 | CHANNEL_DP_1 | CHANNEL_DP_2) /*通道0 1 2*/ + +static u32 channel_mask = CHANNEL_DP_0_1; /* 默认选择双通道*/ /************************** Variable Definitions *****************************/ #define LVGL_CONTINUE_TIMER 10000000 #define LVGL_HEART_TIMER_PERIOD (pdMS_TO_TICKS(1UL)) @@ -56,6 +68,7 @@ static TaskHandle_t init_ms_task; static TaskHandle_t init_task; static TaskHandle_t lvgl_init_task; static TaskHandle_t hpd_task ; +static FFreeRTOSMedia os_media; /************************** functions Definitions *****************************/ static void LvglHeartTimerCallback(TimerHandle_t xTimer) { @@ -101,6 +114,27 @@ BaseType_t FFreeRTOSListUsbDev(int argc, char *argv[]) return lsusb(argc, argv); } +/** + * @name: FFreeRTOSLVGLConfigTask + * @msg: config the lvgl + * @param {void *} pvParameters is the parameters of demo + * @return Null + */ +void FFreeRTOSLVGLConfigTask(void) +{ + u32 index; + lv_init(); + FFreeRTOSPortInit(); + for (index = 0; index < FDP_INSTANCE_NUM; index ++) + { + if (channel_mask & BIT(index)) + { + FMediaDispFramebuffer(&os_media.dcdp_ctrl); + } + } + vTaskDelete(NULL); +} + BaseType_t FFreeRTOSInitKbCreate(u32 id) { BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ @@ -149,17 +183,17 @@ BaseType_t FFreeRTOSMediaInitCreate(void ) /* enter critical region */ taskENTER_CRITICAL(); /* Media init task */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaDeviceInit, /* 任务入口函数 */ - (const char *)"FFreeRTOSMediaDeviceInit", /* 任务名字 */ + xReturn = xTaskCreate((TaskFunction_t)FMediaInitTask, /* 任务入口函数 */ + (const char *)"FMediaInitTask", /* 任务名字 */ 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ (TaskHandle_t *)&init_task); /* 任务控制 */ /* Hpd task control */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdHandle, /* 任务入口函数 */ - (const char *)"FFreeRTOSMediaHpdHandle", /* 任务名字 */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaHpdTask", /* 任务名字 */ 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ (TaskHandle_t *)&hpd_task); /* exit critical region */ @@ -167,6 +201,25 @@ BaseType_t FFreeRTOSMediaInitCreate(void ) return xReturn; } +/* create media test*/ +BaseType_t FFreeRTOSMediaDeinit(void) +{ + + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + /* enter critical region */ + taskENTER_CRITICAL(); + /* Media init task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaChannelDeinit, /* 任务入口函数 */ + (const char *)"FMediaDeInitTask", /* 任务名字 */ + 1024, /* 任务栈大小 */ + &os_media, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&init_task); + /* exit critical region */ + taskEXIT_CRITICAL(); + return xReturn; +} + /** * @name: FFreeRTOSlVGLConfigCreate * @msg: set the lvgl init task diff --git a/example/peripheral/media/lvgl_indev/src/lv_indev_example.c b/example/peripheral/media/lvgl_indev/src/lv_indev_example.c index b62a055323f739f1b64b5563ac0847ae9579b838..43399e10a8ddc0a519ad33bb80987b1d59400c6f 100644 --- a/example/peripheral/media/lvgl_indev/src/lv_indev_example.c +++ b/example/peripheral/media/lvgl_indev/src/lv_indev_example.c @@ -32,7 +32,6 @@ #include "task.h" #include "../lvgl.h" -#include "lv_indev_test.h" #include "lv_indev_port.h" #include "lv_port_disp.h" #include "lv_spinbox.h" diff --git a/example/peripheral/media/lvgl_indev/src/lv_indev_test.c b/example/peripheral/media/lvgl_indev/src/lv_indev_test.c deleted file mode 100644 index 7de59d3c77b058f71ef95cb7f63b7b47bd6f36c8..0000000000000000000000000000000000000000 --- a/example/peripheral/media/lvgl_indev/src/lv_indev_test.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright (C) 2023, Phytium Technology Co., Ltd. All Rights Reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - * FilePath: lv_indev_test.c - * Created Date: 2023-07-06 14:36:43 - * Last Modified: 2025-05-20 10:43:26 - * Description: This file is for config the test - * - * Modify History: - * Ver Who Date Changes - * ----- ---------- -------- --------------------------------- - * 1.0 Wangzq 2023/07/06 Modify the format and establish the version - */ - -#include -#include -#include "FreeRTOSConfig.h" -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "fassert.h" -#include "fcpu_info.h" -#include "fparameters_comm.h" - -#include "fdcdp.h" -#include "fdc.h" -#include "fdp.h" -#include "fdp_hw.h" -#include "fdc_hw.h" -#include "fmedia_os.h" -#include "fdcdp_reg.h" -#include "fdcdp_crtc.h" -#include "lv_indev_port.h" -#include "lv_port_disp.h" - -typedef struct -{ - u32 bit_depth; - u32 bpc; - u32 color_depth; - u32 clock_mode; - u32 color_rep; - u32 width; - u32 height; - u32 multi_mode; -} FuserCfg; - -static const FuserCfg user_cfg = { - .bit_depth = 8, - .bpc = 8, - .color_depth = 32, - .clock_mode = 1, - .color_rep = 0, - .width = 800, - .height = 600, - .multi_mode = 0/*0:clone, 1 :horz, 2:vert*/ -}; -/************************** Variable Definitions *****************************/ -#define FMEDIA_EVT_INTR(index) BIT(index) -#define FMEDIA_CHANNEL_0 0 -#define FMEDIA_CHANNEL_1 1 - -static FFreeRTOSMedia os_media; - -static EventGroupHandle_t media_event = NULL; -static u8 static_frame_buffer_address[1920 * 1080 * 4] __attribute__((aligned(128))) = {0};/*Framebuffer 大小 (字节) = 屏幕宽度 (像素) × 屏幕高度 (像素) × 每像素位数 (bpp) / 8*/ -/************************** functions Definitions *****************************/ -static void FFreeRTOSMediaSendEvent(u32 evt_bits) -{ - FASSERT(media_event); - - BaseType_t x_result = pdFALSE; - BaseType_t xhigher_priority_task_woken = pdFALSE; - /*set the irq event for the task*/ - x_result = xEventGroupSetBitsFromISR(media_event, evt_bits, &xhigher_priority_task_woken); - -} - -static boolean FFreeRTOSMediaWaitEvent(u32 evt_bits, TickType_t wait_delay) -{ - FASSERT(media_event); - - EventBits_t event; - event = xEventGroupWaitBits(media_event, evt_bits, - pdTRUE, pdFALSE, wait_delay);/*wait the irq event for the task*/ - if (event & evt_bits) - { - return TRUE; - } - return FALSE; -} - -static boolean FFreeRTOSMediaClearEvent(EventGroupHandle_t pvEventGroup, const uint32_t ulBitsToClear) -{ - FASSERT(media_event); - - EventBits_t event; - event = xEventGroupClearBits(pvEventGroup, ulBitsToClear);/*clear the intr bits*/ - return TRUE; -} - -/** - * @name: FFreeRTOSMediaHpdConnectCallback - * @msg: the hpd connect event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaHpdConnectCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); - instance_p->is_initialized[index] = FDCDP_IS_INITIALIZED; - printf("Dp:%d connect\r\n", index); - -} - -/** - * @name: FFreeRTOSMediaHpdBreakCallback - * @msg: the hpd disconnect event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaHpdBreakCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - instance_p->is_initialized[index] = FDCDP_NOT_INITIALIZED; - FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); - printf("Dp:%d disconnect\r\n", index); -} - -/** - * @name: FFreeRTOSMediaAuxTimeoutCallback - * @msg: the aux timeout event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaAuxTimeoutCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - printf("Dp:%d aux connect timeout\r\n", index); -} - -/** - * @name: FFreeRTOSMediaAuxErrorCallback - * @msg: the aux error event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaAuxErrorCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - printf("Dp:%d aux connect error\r\n", index); -} - -/** - * @name: FFreeRTOSMediaIrqSet - * @msg: set the irq event and instance - * @param {FDcDp} *instance_p is the instance of dcdp - * @return Null - */ -static void FFreeRTOSMediaIrqSet(FDcDp *instance_p) -{ - FASSERT(instance_p != NULL); - u32 cpu_id; - u32 index; - - GetCpuId(&cpu_id); - InterruptSetTargetCpus(instance_p->dp_instance_p[0].config.irq_num, cpu_id);/*the dc0 and dc1 have the same num of irq_num*/ - - FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_CONNECTED, FFreeRTOSMediaHpdConnectCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_DISCONNECTED, FFreeRTOSMediaHpdBreakCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_TIMEOUT, FFreeRTOSMediaAuxTimeoutCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_ERROR, FFreeRTOSMediaAuxErrorCallback, (void *)instance_p); - - InterruptSetPriority(instance_p->dp_instance_p[0].config.irq_num, FREERTOS_MEDIA_IRQ_PRIORITY);/*dp0 and dp1 have the same irq_num*/ - InterruptInstall(instance_p->dp_instance_p[0].config.irq_num, FDcDpInterruptHandler, instance_p, "media"); - InterruptUmask(instance_p->dp_instance_p[0].config.irq_num); -} - -/** - * @name: FFreeRTOSMediaIrqAllEnable - * @msg: enable the irq - * @param {FDcDp} *instance_p is the instance of dcdp - * @return Null - */ -static void FFreeRTOSMediaIrqAllEnable(FDcDp *instance_p) -{ - int index = 0; - FDcDpIntrEventType event_type = FDCDP_HPD_IRQ_CONNECTED; - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) - { - for (event_type = 0; event_type < FDCDP_INSTANCE_NUM; event_type++) - { - FDcDpIrqEnable(instance_p, index, event_type); - } - } -} - -/** - * @name: FFreeRTOSMediaDeviceInit - * @msg: enable the Dc and Dp - * @return Null - */ -void FFreeRTOSMediaDeviceInit(void) -{ - u32 index, start_index, end_index; - - /*设置用户参数*/ - u32 channel = 2;/* 0 or 1 or 2*/ - if (channel == FDCDP_INSTANCE_NUM) - { - start_index = 0; - end_index = FDCDP_INSTANCE_NUM; - } - else - { - start_index = channel; - end_index = channel + 1; - } - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (index = start_index; index < end_index; index ++) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl,index); - - os_media.dcdp_ctrl.dc_instance_p[index].config = *FDcLookupConfig(index); - - os_media.dcdp_ctrl.dp_instance_p[index].config = *FDpLookupConfig(index); - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.bit_depth = user_cfg.bit_depth; - - os_media.dcdp_ctrl.dc_instance_p[index].crtc.bpc = user_cfg.bpc; - - os_media.dcdp_ctrl.dc_instance_p[index].color_depth = user_cfg.color_depth; - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.clock_mode = user_cfg.clock_mode; - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.color_rep_format = user_cfg.color_rep; - - os_media.dcdp_ctrl.dc_instance_p[index].channel = index; - - os_media.dcdp_ctrl.dc_instance_p[index].fb_addr = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - - os_media.dcdp_ctrl.dc_instance_p[index].fb_virtual = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - - FDcDpGeneralCfgInitial(&os_media.dcdp_ctrl, index); - } - FFreeRTOSMedia *os_config = FFreeRTOSMediaHwInit(&os_media,user_cfg.width, user_cfg.height); - FASSERT_MSG(NULL == media_event, "Event group exists."); - FASSERT_MSG((media_event = xEventGroupCreate()) != NULL, "Create event group failed."); - FFreeRTOSMediaIrqSet(&os_config->dcdp_ctrl); - FFreeRTOSMediaIrqAllEnable(&os_config->dcdp_ctrl); - vTaskDelete(NULL); -} - -/** - * @name: FFreeRTOSMediaChannelDeinit - * @msg: deinit the media - * @param {u32} id is the channel of dcdp - * @return Null - */ -void FFreeRTOSMediaChannelDeinit(u32 id) -{ - taskENTER_CRITICAL(); - vEventGroupDelete(media_event); - media_event = NULL; - FDcDpDeInitialize(&os_media.dcdp_ctrl, id); - taskEXIT_CRITICAL(); /* allow schedule after deinit */ - return ; -} - -/** - * @name: FFreeRTOSMediaHpdHandle - * @msg: handle the hpd event - * @return Null - */ -void FFreeRTOSMediaHpdHandle(void) -{ - u32 index; - u32 ret = FDP_SUCCESS; - - FFreeRTOSMediaWaitEvent(FMEDIA_EVT_INTR(FMEDIA_CHANNEL_0) | FMEDIA_EVT_INTR(FMEDIA_CHANNEL_1), portMAX_DELAY); - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (;;) - { - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) - { - if (os_media.dcdp_ctrl.is_initialized[index] == FDCDP_NOT_INITIALIZED) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl, index); - ret = FDcDpInitial(&os_media.dcdp_ctrl, index, user_cfg.width, user_cfg.height); - FFreeRTOSMediaClearEvent(media_event, FMEDIA_EVT_INTR(index)); - if (ret == FDP_SUCCESS) - { - printf("Hpd task finish , reinit the dp success.\r\n"); - } - os_media.dcdp_ctrl.is_initialized[index] = FDCDP_IS_INITIALIZED; - } - - } - vTaskDelay(200); - } -} - - -/** - * @name: FFreeRTOSLVGLConfigTask - * @msg: config the lvgl - * @param {void *} pvParameters is the parameters of demo - * @return Null - */ -void FFreeRTOSLVGLConfigTask(void) -{ - u32 index; - lv_init(); - FFreeRTOSPortInit(); - for (index = 0; index < FDCDP_INSTANCE_NUM; index ++) - { - FMediaDispFramebuffer(&os_media.dcdp_ctrl); - } - vTaskDelete(NULL); -} diff --git a/example/peripheral/media/lvgl_ui/README.md b/example/peripheral/media/lvgl_ui/README.md index 62a32770b04ed8cabee1fca2422e8683c088089e..575b55a2b4dd9745f6c37b504a1d128f16aeda6a 100644 --- a/example/peripheral/media/lvgl_ui/README.md +++ b/example/peripheral/media/lvgl_ui/README.md @@ -35,7 +35,7 @@ LVGL (Light and Versatile Graphics Library) 是最流行的免费开源嵌入式 本例程所需的硬件设备包括 -- 通过DP线将显示器与E2000板卡连接 +- 通过DP线将显示器与E2000D/Q DEMO、PhytiumPi开发板连接 - 利用串口调试线连接板卡和调试电脑,波特率设为 115200-8-1-N ### 2.2 SDK配置方法 @@ -64,9 +64,9 @@ LVGL (Light and Versatile Graphics Library) 是最流行的免费开源嵌入式 - 在host侧完成配置 ->配置成E2000,对于其它平台,使用对应的默认配置 +>配置成E2000Q demo,对于其它平台,使用对应的默认配置 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_media +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_media make menuconfig make image ``` diff --git a/example/peripheral/media/lvgl_ui/configs/pe2202_aarch32_demo_media.config b/example/peripheral/media/lvgl_ui/configs/pe2202_aarch32_demo_media.config index f4de77ab9ca2d29fd08443f37f147a883e4fff6e..66cbd8debeff014eff6d5207b5c1aa6ccd24de22 100644 --- a/example/peripheral/media/lvgl_ui/configs/pe2202_aarch32_demo_media.config +++ b/example/peripheral/media/lvgl_ui/configs/pe2202_aarch32_demo_media.config @@ -3,7 +3,7 @@ CONFIG_TARGET_PE2202=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_ui/configs/pe2202_aarch64_demo_media.config b/example/peripheral/media/lvgl_ui/configs/pe2202_aarch64_demo_media.config index 073e80e0b21aead7df0493381db93a431ebc9a09..36ef82c2278915f636fadfbc38c4c9010beafb66 100644 --- a/example/peripheral/media/lvgl_ui/configs/pe2202_aarch64_demo_media.config +++ b/example/peripheral/media/lvgl_ui/configs/pe2202_aarch64_demo_media.config @@ -2,7 +2,7 @@ CONFIG_TARGET_PE2202=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_demo_media.config b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_demo_media.config index 850cfa980c34c523a8250e37ceeb235d5f3ab81c..4bbd35cf3aab7b1db1fa062cfa66464e6adf67e6 100644 --- a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_demo_media.config +++ b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_demo_media.config @@ -2,7 +2,7 @@ CONFIG_ARCH_ARMV8_AARCH32=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_phytiumpi_media.config b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_phytiumpi_media.config index 1389b8c268a504ba40b7059405b0d5e4953a5d9c..4255fe8b4a6ba3013e962307783395a9ca4e3f54 100644 --- a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_phytiumpi_media.config +++ b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch32_phytiumpi_media.config @@ -3,7 +3,7 @@ CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_demo_media.config b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_demo_media.config index 244c389045e7e31ad20f176187e0f7541a3b3ee7..59fa115a86da932cb26ce941b3d95c6d6c84a822 100644 --- a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_demo_media.config +++ b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_demo_media.config @@ -1,7 +1,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_STACK_SIZE=0x100000 diff --git a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_phytiumpi_media.config b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_phytiumpi_media.config index c9a0383ff1524cd5868d7598f8697c70a8c87a07..b5a586e6a88ac1c2f17ff480ed8ee977c704a6a8 100644 --- a/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_phytiumpi_media.config +++ b/example/peripheral/media/lvgl_ui/configs/pe2204_aarch64_phytiumpi_media.config @@ -3,7 +3,7 @@ CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/lvgl_ui/inc/lv_indev_create.h b/example/peripheral/media/lvgl_ui/inc/lv_indev_create.h index 2f900c3e6e27669d981296ca4615a343ab65feee..33341f564fc3a9c94e6de4fb058ada16f9807eb6 100644 --- a/example/peripheral/media/lvgl_ui/inc/lv_indev_create.h +++ b/example/peripheral/media/lvgl_ui/inc/lv_indev_create.h @@ -43,6 +43,12 @@ extern "C" { #include "lvgl-8.3/lvgl.h" #endif +/*the lvgl demo*/ +void lv_demo_indev(void); + +/*lvgl config*/ +void FFreeRTOSLVGLConfigTask(void); + /*create the media demo init task*/ BaseType_t FFreeRTOSDemoCreate(void); @@ -58,6 +64,9 @@ BaseType_t FFreeRTOSListUsbDev(int argc, char *argv[]); /*init the media*/ BaseType_t FFreeRTOSMediaInitCreate(void); +/*deinit the media*/ +BaseType_t FFreeRTOSMediaDeinit(void); + /*set the lvgl init task*/ BaseType_t FFreeRTOSlVGLConfigCreate(void); diff --git a/example/peripheral/media/lvgl_ui/inc/lv_indev_test.h b/example/peripheral/media/lvgl_ui/inc/lv_indev_test.h deleted file mode 100644 index 133bf775b9bb0aa513e129bbf6de61af92527ebe..0000000000000000000000000000000000000000 --- a/example/peripheral/media/lvgl_ui/inc/lv_indev_test.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2023, Phytium Technology Co., Ltd. All Rights Reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * FilePath: lv_indev_test.h - * Date: 2023-02-05 18:27:47 - * LastEditTime: 2023-07-06 11:02:47 - * Description: This file is for providing the lvgl test config - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------ -------- -------------------------------------- - * 1.0 Wangzq 2023//07/06 Modify the format and establish the version - * 1.1 Wangzq 2023/07/07 change the third-party and driver relation - */ - -#ifndef LV_INDEV_TEST_H -#define LV_INDEV_TEST_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "lvgl.h" -#include "ftypes.h" - - -/*the lvgl demo*/ -void lv_demo_indev(void); - -/*deinit the media */ -void FFreeRTOSMediaChannelDeinit(u32 id); - -/*handle the hpd event*/ -void FFreeRTOSMediaHpdHandle(void); - -/*init the media */ -void FFreeRTOSMediaDeviceInit(void); - -/*lvgl config*/ -void FFreeRTOSLVGLConfigTask(void); - -#ifdef __cplusplus -} /*extern "C"*/ -#endif -#endif \ No newline at end of file diff --git a/example/peripheral/media/lvgl_ui/makefile b/example/peripheral/media/lvgl_ui/makefile index 19fd8ff42f59b2097918afcd78c62f26b6ec24c8..a2d96918a315fe807d0505a8689dbb45261e95d7 100644 --- a/example/peripheral/media/lvgl_ui/makefile +++ b/example/peripheral/media/lvgl_ui/makefile @@ -11,13 +11,14 @@ BOOT_IMG_NAME ?= freertos USER_CSRC := main.c USER_CSRC += $(wildcard src/*.c) -USER_CSRC += $(wildcard ../common/*.c) +USER_CSRC += $(wildcard ../media_common/*.c) USER_ASRC := USER_CXXSRC := USER_INCLUDE := $(PROJECT_DIR) \ $(PROJECT_DIR)/inc \ + $(PROJECT_DIR)/../media_common include $(FREERTOS_SDK_DIR)/tools/makeall.mk diff --git a/example/peripheral/media/lvgl_ui/sdkconfig b/example/peripheral/media/lvgl_ui/sdkconfig index 79b2eb17710c6450aba6561de711dbaaab08639b..9b76cd9e520a7f28631e15161b8e0b78270f14b2 100644 --- a/example/peripheral/media/lvgl_ui/sdkconfig +++ b/example/peripheral/media/lvgl_ui/sdkconfig @@ -70,6 +70,7 @@ CONFIG_TARGET_PE220X=y CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# CONFIG_UART_INIT_NOT_CLR_INTR is not set # end of Soc configuration # @@ -156,7 +157,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y +# CONFIG_USE_FMEDIA_V2 is not set # CONFIG_USE_SCMI_MHU is not set # CONFIG_USE_I2S is not set # CONFIG_USE_I3C is not set @@ -227,6 +229,7 @@ CONFIG_STACK_SIZE=0x400 # FreeRTOS Uart Drivers # CONFIG_FREERTOS_USE_UART=y +# CONFIG_FREERTOS_USE_SERIAL_V2 is not set # end of FreeRTOS Uart Drivers # @@ -252,12 +255,14 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_XMAC is not set # CONFIG_FREERTOS_USE_GMAC is not set +# CONFIG_FREERTOS_USE_XMAC_V2 is not set # end of FreeRTOS Eth Drivers # # FreeRTOS Spim Drivers # # CONFIG_FREERTOS_USE_FSPIM is not set +# CONFIG_FREERTOS_USE_FSPIM_V2 is not set # end of FreeRTOS Spim Drivers # @@ -283,6 +288,7 @@ CONFIG_FREERTOS_USE_UART=y # FreeRTOS I2c Drivers # # CONFIG_FREERTOS_USE_I2C is not set +# CONFIG_FREERTOS_USE_FI2C_V2 is not set # end of FreeRTOS I2c Drivers # diff --git a/example/peripheral/media/lvgl_ui/sdkconfig.h b/example/peripheral/media/lvgl_ui/sdkconfig.h index 8f761957221f5bfcb35bf1545be2ffeb0a1dac1b..48c0aa7f152e04cedc14f9ce2f438bb82211487d 100644 --- a/example/peripheral/media/lvgl_ui/sdkconfig.h +++ b/example/peripheral/media/lvgl_ui/sdkconfig.h @@ -66,6 +66,7 @@ #define CONFIG_DEFAULT_DEBUG_PRINT_UART1 /* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ /* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* CONFIG_UART_INIT_NOT_CLR_INTR is not set */ /* end of Soc configuration */ /* Board Configuration */ @@ -144,7 +145,8 @@ /* CONFIG_USE_PWM is not set */ /* CONFIG_USE_IPC is not set */ #define CONFIG_USE_MEDIA -#define CONFIG_USE_FMEDIA +#define CONFIG_USE_FMEDIA_V1 +/* CONFIG_USE_FMEDIA_V2 is not set */ /* CONFIG_USE_SCMI_MHU is not set */ /* CONFIG_USE_I2S is not set */ /* CONFIG_USE_I3C is not set */ @@ -206,6 +208,7 @@ /* FreeRTOS Uart Drivers */ #define CONFIG_FREERTOS_USE_UART +/* CONFIG_FREERTOS_USE_SERIAL_V2 is not set */ /* end of FreeRTOS Uart Drivers */ /* FreeRTOS Pwm Drivers */ @@ -227,11 +230,13 @@ /* CONFIG_FREERTOS_USE_XMAC is not set */ /* CONFIG_FREERTOS_USE_GMAC is not set */ +/* CONFIG_FREERTOS_USE_XMAC_V2 is not set */ /* end of FreeRTOS Eth Drivers */ /* FreeRTOS Spim Drivers */ /* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* CONFIG_FREERTOS_USE_FSPIM_V2 is not set */ /* end of FreeRTOS Spim Drivers */ /* FreeRTOS DMA Drivers */ @@ -253,6 +258,7 @@ /* FreeRTOS I2c Drivers */ /* CONFIG_FREERTOS_USE_I2C is not set */ +/* CONFIG_FREERTOS_USE_FI2C_V2 is not set */ /* end of FreeRTOS I2c Drivers */ /* FreeRTOS Mio Drivers */ diff --git a/example/peripheral/media/lvgl_ui/src/cmd.c b/example/peripheral/media/lvgl_ui/src/cmd.c index 2460d8561c286b0b63bda405d993883f76fa8faa..e2efa6f941aca00a857278567469396b437e52fc 100644 --- a/example/peripheral/media/lvgl_ui/src/cmd.c +++ b/example/peripheral/media/lvgl_ui/src/cmd.c @@ -41,7 +41,7 @@ #include "lv_obj.h" #include "lv_conf.h" #include "lv_indev_create.h" -#include "lv_indev_test.h" +#include "media_common.h" static void FFreeRTOSMediaCmdUsage(void) { @@ -64,7 +64,6 @@ static int MediaCmdEntry(int argc, char *argv[]) { u32 id ; u32 usb_id = 0; - u32 channel; static boolean inited = FALSE; if (argc < 2) { @@ -74,7 +73,6 @@ static int MediaCmdEntry(int argc, char *argv[]) if (!strcmp(argv[1], "init")) { BaseType_t task_ret = FFreeRTOSMediaInitCreate(); - if (pdPASS != task_ret) { return -2; @@ -154,13 +152,11 @@ static int MediaCmdEntry(int argc, char *argv[]) printf("please ensure the media has been inited \r\n"); return -2; } - if (argc < 3) + BaseType_t task_ret = FFreeRTOSMediaDeinit(); + if (pdPASS != task_ret) { return -2; } - - channel = (uint8_t)simple_strtoul(argv[2], NULL, 10); - FFreeRTOSMediaChannelDeinit(channel); } if (!strcmp(argv[1], "lsusb")) diff --git a/example/peripheral/media/lvgl_ui/src/lv_indev_create.c b/example/peripheral/media/lvgl_ui/src/lv_indev_create.c index b218e0bc4ca4a81661820cffb08389595a06964a..f689a5344404805ed77338393c8857a6111e78b3 100644 --- a/example/peripheral/media/lvgl_ui/src/lv_indev_create.c +++ b/example/peripheral/media/lvgl_ui/src/lv_indev_create.c @@ -36,13 +36,24 @@ #include "../lvgl.h" #include "lv_indev_create.h" #include "lv_indev_port.h" -#include "lv_indev_test.h" #include "lv_port_disp.h" #include "lv_indev_example.h" +#include "media_common.h" #include "usbh_core.h" #include "usbh_hid.h" +/*通道组合*/ +#define CHANNEL_NONE 0x0 /*不选择*/ +#define CHANNEL_DP_0 0x1 /*通道0*/ +#define CHANNEL_DP_1 0x2 /*通道1*/ +#define CHANNEL_DP_2 0x4 /*通道2*/ +#define CHANNEL_DP_0_1 (CHANNEL_DP_0 | CHANNEL_DP_1) /*通道0 1*/ +#define CHANNEL_DP_0_2 (CHANNEL_DP_0 | CHANNEL_DP_2) /*通道0 2*/ +#define CHANNEL_DP_1_2 (CHANNEL_DP_1 | CHANNEL_DP_2) /*通道1 2*/ +#define CHANNEL_DP_ALL (CHANNEL_DP_0 | CHANNEL_DP_1 | CHANNEL_DP_2) /*通道0 1 2*/ + +static u32 channel_mask = CHANNEL_DP_0_1; /* 默认选择双通道*/ /************************** Variable Definitions *****************************/ #define LVGL_CONTINUE_TIMER 10000000 #define LVGL_HEART_TIMER_PERIOD (pdMS_TO_TICKS(1UL)) @@ -55,6 +66,7 @@ static TaskHandle_t init_ms_task; static TaskHandle_t init_task; static TaskHandle_t lvgl_init_task; static TaskHandle_t hpd_task ; +static FFreeRTOSMedia os_media; /************************** functions Definitions *****************************/ static void LvglHeartTimerCallback(TimerHandle_t xTimer) { @@ -100,6 +112,27 @@ BaseType_t FFreeRTOSListUsbDev(int argc, char *argv[]) return lsusb(argc, argv); } +/** + * @name: FFreeRTOSLVGLConfigTask + * @msg: config the lvgl + * @param {void *} pvParameters is the parameters of demo + * @return Null + */ +void FFreeRTOSLVGLConfigTask(void) +{ + u32 index; + lv_init(); + FFreeRTOSPortInit(); + for (index = 0; index < FDP_INSTANCE_NUM; index ++) + { + if (channel_mask & BIT(index)) + { + FMediaDispFramebuffer(&os_media.dcdp_ctrl); + } + } + vTaskDelete(NULL); +} + BaseType_t FFreeRTOSInitKbCreate(u32 id) { BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ @@ -148,17 +181,17 @@ BaseType_t FFreeRTOSMediaInitCreate(void ) /* enter critical region */ taskENTER_CRITICAL(); /* Media init task */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaDeviceInit, /* 任务入口函数 */ + xReturn = xTaskCreate((TaskFunction_t)FMediaInitTask, /* 任务入口函数 */ (const char *)"FFreeRTOSMediaDeviceInit", /* 任务名字 */ 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ (TaskHandle_t *)&init_task); /* 任务控制 */ /* Hpd task control */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdHandle, /* 任务入口函数 */ - (const char *)"FFreeRTOSMediaHpdHandle", /* 任务名字 */ - 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaHpdTask", /* 任务名字 */ + 1024, /* 任务栈大小 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ (TaskHandle_t *)&hpd_task); /* exit critical region */ @@ -166,6 +199,25 @@ BaseType_t FFreeRTOSMediaInitCreate(void ) return xReturn; } +/* create media test*/ +BaseType_t FFreeRTOSMediaDeinit(void) +{ + + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + /* enter critical region */ + taskENTER_CRITICAL(); + /* Media init task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaChannelDeinit, /* 任务入口函数 */ + (const char *)"FMediaDeInitTask", /* 任务名字 */ + 1024, /* 任务栈大小 */ + &os_media, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&init_task); + /* exit critical region */ + taskEXIT_CRITICAL(); + return xReturn; +} + /** * @name: FFreeRTOSlVGLConfigCreate * @msg: set the lvgl init task diff --git a/example/peripheral/media/lvgl_ui/src/lv_indev_test.c b/example/peripheral/media/lvgl_ui/src/lv_indev_test.c deleted file mode 100644 index fc3b16882784b14f0c4cd8b9ba045c8529dcc1b1..0000000000000000000000000000000000000000 --- a/example/peripheral/media/lvgl_ui/src/lv_indev_test.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright (C) 2023, Phytium Technology Co., Ltd. All Rights Reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); you may not use - * this file except in compliance with the License. You may obtain a copy of - * the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - * FilePath: lv_indev_test.c - * Created Date: 2023-07-06 14:36:43 - * Last Modified: 2024-05-14 09:35:32 - * Description: This file is for config the test - * - * Modify History: - * Ver Who Date Changes - * ----- ---------- -------- --------------------------------- - * 1.0 Wangzq 2023/07/06 Modify the format and establish the version - */ - -#include -#include -#include "FreeRTOSConfig.h" -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "fassert.h" -#include "fcpu_info.h" -#include "fparameters_comm.h" - -#include "fdcdp.h" -#include "fdc.h" -#include "fdp.h" -#include "fdp_hw.h" -#include "fdc_hw.h" -#include "fmedia_os.h" - -#include "lv_indev_port.h" -#include "lv_port_disp.h" -#include "fdcdp_reg.h" -#include "fdcdp_crtc.h" - -typedef struct -{ - u32 bit_depth; - u32 bpc; - u32 color_depth; - u32 clock_mode; - u32 color_rep; - u32 width; - u32 height; - u32 multi_mode; -} FuserCfg; - -static const FuserCfg user_cfg = { - .bit_depth = 8, - .bpc = 8, - .color_depth = 32, - .clock_mode = 1, - .color_rep = 0, - .width = 800, - .height = 600, - .multi_mode = 0/*0:clone, 1 :horz, 2:vert*/ -}; -/************************** Variable Definitions *****************************/ -#define FMEDIA_EVT_INTR(index) BIT(index) -#define FMEDIA_CHANNEL_0 0 -#define FMEDIA_CHANNEL_1 1 - -static FFreeRTOSMedia os_media; - -static EventGroupHandle_t media_event = NULL; -static u8 static_frame_buffer_address[1920 * 1080 * 4] __attribute__((aligned(128))) = {0};/*Framebuffer 大小 (字节) = 屏幕宽度 (像素) × 屏幕高度 (像素) × 每像素位数 (bpp) / 8*/ -/************************** functions Definitions *****************************/ -static void FFreeRTOSMediaSendEvent(u32 evt_bits) -{ - FASSERT(media_event); - - BaseType_t x_result = pdFALSE; - BaseType_t xhigher_priority_task_woken = pdFALSE; - /*set the irq event for the task*/ - x_result = xEventGroupSetBitsFromISR(media_event, evt_bits, &xhigher_priority_task_woken); - -} - -static boolean FFreeRTOSMediaWaitEvent(u32 evt_bits, TickType_t wait_delay) -{ - FASSERT(media_event); - - EventBits_t event; - event = xEventGroupWaitBits(media_event, evt_bits, - pdTRUE, pdFALSE, wait_delay);/*wait the irq event for the task*/ - if (event & evt_bits) - { - return TRUE; - } - return FALSE; -} - -static boolean FFreeRTOSMediaClearEvent(EventGroupHandle_t pvEventGroup, const uint32_t ulBitsToClear) -{ - FASSERT(media_event); - - EventBits_t event; - event = xEventGroupClearBits(pvEventGroup, ulBitsToClear);/*clear the intr bits*/ - return TRUE; -} - -/** - * @name: FFreeRTOSMediaHpdConnectCallback - * @msg: the hpd connect event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaHpdConnectCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); - instance_p->is_initialized[index] = FDCDP_IS_INITIALIZED; - printf("Dp:%d connect\r\n", index); - -} - -/** - * @name: FFreeRTOSMediaHpdBreakCallback - * @msg: the hpd disconnect event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaHpdBreakCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - instance_p->is_initialized[index] = FDCDP_NOT_INITIALIZED; - FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); - printf("Dp:%d disconnect\r\n", index); -} - -/** - * @name: FFreeRTOSMediaAuxTimeoutCallback - * @msg: the aux timeout event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaAuxTimeoutCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - printf("Dp:%d aux connect timeout\r\n", index); -} - -/** - * @name: FFreeRTOSMediaAuxErrorCallback - * @msg: the aux error event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaAuxErrorCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - printf("Dp:%d aux connect error\r\n", index); -} - -/** - * @name: FFreeRTOSMediaIrqSet - * @msg: set the irq event and instance - * @param {FDcDp} *instance_p is the instance of dcdp - * @return Null - */ -static void FFreeRTOSMediaIrqSet(FDcDp *instance_p) -{ - FASSERT(instance_p != NULL); - u32 cpu_id; - u32 index; - - GetCpuId(&cpu_id); - InterruptSetTargetCpus(instance_p->dp_instance_p[0].config.irq_num, cpu_id);/*the dc0 and dc1 have the same num of irq_num*/ - - FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_CONNECTED, FFreeRTOSMediaHpdConnectCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_DISCONNECTED, FFreeRTOSMediaHpdBreakCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_TIMEOUT, FFreeRTOSMediaAuxTimeoutCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_ERROR, FFreeRTOSMediaAuxErrorCallback, (void *)instance_p); - - InterruptSetPriority(instance_p->dp_instance_p[0].config.irq_num, FREERTOS_MEDIA_IRQ_PRIORITY);/*dp0 and dp1 have the same irq_num*/ - InterruptInstall(instance_p->dp_instance_p[0].config.irq_num, FDcDpInterruptHandler, instance_p, "media"); - InterruptUmask(instance_p->dp_instance_p[0].config.irq_num); -} - -/** - * @name: FFreeRTOSMediaIrqAllEnable - * @msg: enable the irq - * @param {FDcDp} *instance_p is the instance of dcdp - * @return Null - */ -static void FFreeRTOSMediaIrqAllEnable(FDcDp *instance_p) -{ - int index = 0; - FDcDpIntrEventType event_type = FDCDP_HPD_IRQ_CONNECTED; - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) - { - for (event_type = 0; event_type < FDCDP_INSTANCE_NUM; event_type++) - { - FDcDpIrqEnable(instance_p, index, event_type); - } - } -} - -/** - * @name: FFreeRTOSMediaDeviceInit - * @msg: enable the Dc and Dp - * @return Null - */ -void FFreeRTOSMediaDeviceInit(void) -{ - u32 index, start_index, end_index; - - /*设置用户参数*/ - u32 channel = 2;/* 0 or 1 or 2*/ - if (channel == FDCDP_INSTANCE_NUM) - { - start_index = 0; - end_index = FDCDP_INSTANCE_NUM; - } - else - { - start_index = channel; - end_index = channel + 1; - } - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (index = start_index; index < end_index; index ++) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl,index); - - os_media.dcdp_ctrl.dc_instance_p[index].config = *FDcLookupConfig(index); - - os_media.dcdp_ctrl.dp_instance_p[index].config = *FDpLookupConfig(index); - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.bit_depth = user_cfg.bit_depth; - - os_media.dcdp_ctrl.dc_instance_p[index].crtc.bpc = user_cfg.bpc; - - os_media.dcdp_ctrl.dc_instance_p[index].color_depth = user_cfg.color_depth; - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.clock_mode = user_cfg.clock_mode; - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.color_rep_format = user_cfg.color_rep; - - os_media.dcdp_ctrl.dc_instance_p[index].channel = index; - - os_media.dcdp_ctrl.dc_instance_p[index].fb_addr = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - - os_media.dcdp_ctrl.dc_instance_p[index].fb_virtual = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - - FDcDpGeneralCfgInitial(&os_media.dcdp_ctrl, index); - } - FFreeRTOSMedia *os_config = FFreeRTOSMediaHwInit(&os_media,user_cfg.width, user_cfg.height); - FASSERT_MSG(NULL == media_event, "Event group exists."); - FASSERT_MSG((media_event = xEventGroupCreate()) != NULL, "Create event group failed."); - FFreeRTOSMediaIrqSet(&os_config->dcdp_ctrl); - FFreeRTOSMediaIrqAllEnable(&os_config->dcdp_ctrl); - vTaskDelete(NULL); -} - -/** - * @name: FFreeRTOSMediaChannelDeinit - * @msg: deinit the media - * @param {u32} id is the channel of dcdp - * @return Null - */ -void FFreeRTOSMediaChannelDeinit(u32 id) -{ - taskENTER_CRITICAL(); - vEventGroupDelete(media_event); - media_event = NULL; - FDcDpDeInitialize(&os_media.dcdp_ctrl, id); - taskEXIT_CRITICAL(); /* allow schedule after deinit */ - return ; -} - -/** - * @name: FFreeRTOSMediaHpdHandle - * @msg: handle the hpd event - * @return Null - */ -void FFreeRTOSMediaHpdHandle(void) -{ - u32 index; - u32 ret = FDP_SUCCESS; - - FFreeRTOSMediaWaitEvent(FMEDIA_EVT_INTR(FMEDIA_CHANNEL_0) | FMEDIA_EVT_INTR(FMEDIA_CHANNEL_1), portMAX_DELAY); - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (;;) - { - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) - { - if (os_media.dcdp_ctrl.is_initialized[index] == FDCDP_NOT_INITIALIZED) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl, index); - ret = FDcDpInitial(&os_media.dcdp_ctrl, index, user_cfg.width, user_cfg.height); - FFreeRTOSMediaClearEvent(media_event, FMEDIA_EVT_INTR(index)); - if (ret == FDP_SUCCESS) - { - printf("Hpd task finish , reinit the dp success.\r\n"); - } - os_media.dcdp_ctrl.is_initialized[index] = FDCDP_IS_INITIALIZED; - } - } - vTaskDelay(200); - } -} - - -/** - * @name: FFreeRTOSLVGLConfigTask - * @msg: config the lvgl - * @param {void *} pvParameters is the parameters of demo - * @return Null - */ -void FFreeRTOSLVGLConfigTask(void) -{ - u32 index; - lv_init(); - FFreeRTOSPortInit(); - for (index = 0; index < FDCDP_INSTANCE_NUM; index ++) - { - FMediaDispFramebuffer(&os_media.dcdp_ctrl); - } - vTaskDelete(NULL); -} diff --git a/example/peripheral/media/lvgl_demo/src/lv_demo_test.c b/example/peripheral/media/media_common/media_common.c similarity index 55% rename from example/peripheral/media/lvgl_demo/src/lv_demo_test.c rename to example/peripheral/media/media_common/media_common.c index 4204208df7935b8f99039d5eefb03840cdb41bdc..50d5fdfb75dd41d88b05d6ceabc5b5d7a7936b07 100644 --- a/example/peripheral/media/lvgl_demo/src/lv_demo_test.c +++ b/example/peripheral/media/media_common/media_common.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023, Phytium Technology Co., Ltd. All Rights Reserved. + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of @@ -13,41 +13,38 @@ * See the License for the specific language governing permissions and * limitations under the License. * - * FilePath: lv_demo_test.c - * Date: 2023-02-05 18:27:47 - * LastEditTime: 2023-07-06 11:02:47 - * Description: This file is for providing the port of test lvgl demo * - * Modify History: + * FilePath: media_common.c + * Date: 2025-07-11 11:32:48 + * LastEditTime: 2025-07-11 13:25:48 + * Description: This file is for testing light the screen + * + * Modify History: * Ver   Who        Date         Changes - * ----- ------ -------- -------------------------------------- - * 1.0 Wangzq 2023/03/20 Modify the format and establish the version - * 1.1 Wangzq 2023/07/06 adapt the sdk and change the lvgl config + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2025/07/11 change the third-party and driver relation */ - -#include #include -#include -#include "FreeRTOS.h" +#include +#include +#include +#include "task.h" +#include "ftypes.h" #include "fassert.h" -#include "finterrupt.h" +#include "fdebug.h" #include "fparameters_comm.h" -#include "timers.h" -#include "task.h" -#include "fcpu_info.h" +#include "finterrupt.h" +#include "fkernel.h" #include "event_groups.h" +#include "fcpu_info.h" #include "fmedia_os.h" #include "fdcdp.h" -#include "fdc.h" -#include "fdp.h" #include "fdp_hw.h" -#include "fdc_hw.h" +#include "fdp.h" #include "fdcdp_reg.h" #include "fdcdp_crtc.h" -#include "lv_conf.h" -#include "lv_port_disp.h" - +#include "media_common.h" typedef struct { u32 bit_depth; @@ -70,14 +67,49 @@ static const FuserCfg user_cfg = { .height = 600, .multi_mode = 0/*0:clone, 1 :horz, 2:vert*/ }; +/*通道组合*/ +#define CHANNEL_NONE 0x0 /*不选择*/ +#define CHANNEL_DP_0 0x1 /*通道0*/ +#define CHANNEL_DP_1 0x2 /*通道1*/ +#define CHANNEL_DP_2 0x4 /*通道2*/ +#define CHANNEL_DP_0_1 (CHANNEL_DP_0 | CHANNEL_DP_1) /*通道0 1*/ +#define CHANNEL_DP_0_2 (CHANNEL_DP_0 | CHANNEL_DP_2) /*通道0 2*/ +#define CHANNEL_DP_1_2 (CHANNEL_DP_1 | CHANNEL_DP_2) /*通道1 2*/ +#define CHANNEL_DP_ALL (CHANNEL_DP_0 | CHANNEL_DP_1 | CHANNEL_DP_2) /*通道0 1 2*/ + +static u32 channel_mask = CHANNEL_DP_0_1; /* 默认选择双通道*/ /************************** Variable Definitions *****************************/ #define FMEDIA_EVT_INTR(index) BIT(index) #define FMEDIA_CHANNEL_0 0 #define FMEDIA_CHANNEL_1 1 +static EventGroupHandle_t media_event = NULL; static u8 static_frame_buffer_address[1920 * 1080 * 4] __attribute__((aligned(128))) = {0};/*Framebuffer 大小 (字节) = 屏幕宽度 (像素) × 屏幕高度 (像素) × 每像素位数 (bpp) / 8*/ -static EventGroupHandle_t media_event = NULL; -static FFreeRTOSMedia os_media; -/**********************Macros (Inline Functions) Definitions *********************/ +/***************** Macros (Inline Functions) Definitions *********************/ +/** + * @name: FMediaCtrlProbe + * @msg: set the media control + * @return + */ +static void FMediaCtrlProbe(FFreeRTOSMedia *os_media) +{ + u32 index; + for (index = 0; index < FDC_INSTANCE_NUM; index ++) + { if (channel_mask & BIT(index)) + { + FDcDpCfgInitialize(&os_media->dcdp_ctrl, index); + os_media->dcdp_ctrl.dc_instance_p[index].config = *FDcLookupConfig(index); + } + } + for (index = 0; index < FDP_INSTANCE_NUM; index ++) + { + if (channel_mask & BIT(index)) + { + os_media->dcdp_ctrl.dp_instance_p[index].config = *FDpLookupConfig(index); + } + } + return ; +} + static void FFreeRTOSMediaSendEvent(u32 evt_bits) { FASSERT(media_event); @@ -86,13 +118,20 @@ static void FFreeRTOSMediaSendEvent(u32 evt_bits) BaseType_t xhigher_priority_task_woken = pdFALSE; /*set the irq event for the task*/ x_result = xEventGroupSetBitsFromISR(media_event, evt_bits, &xhigher_priority_task_woken); +} + +static boolean FFreeRTOSMediaClearEvent(EventGroupHandle_t pvEventGroup, const uint32_t ulBitsToClear) +{ + FASSERT(media_event); + EventBits_t event; + event = xEventGroupClearBits(pvEventGroup, ulBitsToClear);/*clear the intr bits*/ + return TRUE; } static boolean FFreeRTOSMediaWaitEvent(u32 evt_bits, TickType_t wait_delay) { FASSERT(media_event); - EventBits_t event; event = xEventGroupWaitBits(media_event, evt_bits, pdTRUE, pdFALSE, wait_delay);/*wait the irq event for the task*/ @@ -103,13 +142,54 @@ static boolean FFreeRTOSMediaWaitEvent(u32 evt_bits, TickType_t wait_delay) return FALSE; } -static boolean FFreeRTOSMediaClearEvent(EventGroupHandle_t pvEventGroup, const uint32_t ulBitsToClear) +/* create the hpd task */ +void FFreeRTOSMediaHpdTask(FFreeRTOSMedia *os_media) { - FASSERT(media_event); + u32 index; + u32 ret = 0 ; + FFreeRTOSMediaWaitEvent(FMEDIA_EVT_INTR(FMEDIA_CHANNEL_0) | FMEDIA_EVT_INTR(FMEDIA_CHANNEL_1), portMAX_DELAY); + os_media->dcdp_ctrl.multi_mode = user_cfg.multi_mode; + for (;;) + { + for (index = 0; index < FDP_INSTANCE_NUM; index++) + { + if (channel_mask & BIT(index)) + { + if (os_media->dcdp_ctrl.connect_flg[index] == FDCDP_DISCONNCET_TO_CONNECT) + { + FDcDpCfgInitialize(&os_media->dcdp_ctrl, index); + ret = FDcDpInitial(&os_media->dcdp_ctrl, index, user_cfg.width, user_cfg.height); + FFreeRTOSMediaClearEvent(media_event, FMEDIA_EVT_INTR(index)); + if (ret == FDP_SUCCESS) + { + printf("Hpd task finish , reinit the dp success.\r\n"); + } + os_media->dcdp_ctrl.connect_flg[index] = FDCDP_IS_INITIALIZED; + } + } + vTaskDelay(200); + } + vTaskDelete(NULL); +} +} - EventBits_t event; - event = xEventGroupClearBits(pvEventGroup, ulBitsToClear);/*clear the intr bits*/ - return TRUE; +/** + * @name: FDcDpIrqAllEnable + * @msg: enable the irq + * @param {FDcDp} *instance_p is the instance of dcdp + * @return Null + */ +static void FDcDpIrqAllEnable(FDcDp *instance_p) +{ + int index = 0; + FDcDpIntrEventType event_type = FDCDP_HPD_IRQ_CONNECTED; + for (index = 0; index < FDP_INSTANCE_NUM; index++) + { + for (event_type = 0; event_type < FDCDP_INTR_MAX_NUM; event_type++) + { + FDcDpIrqEnable(instance_p, index, event_type); + } + } } /** @@ -125,9 +205,8 @@ static void FFreeRTOSMediaHpdConnectCallback(void *args, u32 index) FDcDp *instance_p = (FDcDp *)args; FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); - instance_p->is_initialized[index] = FDCDP_IS_INITIALIZED; + instance_p->connect_flg[index] = FDCDP_DISCONNCET_TO_CONNECT; printf("Dp:%d connect\r\n", index); - } /** @@ -142,7 +221,7 @@ static void FFreeRTOSMediaHpdBreakCallback(void *args, u32 index) FASSERT(args != NULL); FDcDp *instance_p = (FDcDp *)args; FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - instance_p->is_initialized[index] = FDCDP_NOT_INITIALIZED; + instance_p->connect_flg[index] = FDCDP_CONNECT_TO_DISCONNCET; FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); printf("Dp:%d disconnect\r\n", index); } @@ -190,160 +269,87 @@ static void FFreeRTOSMediaIrqSet(FDcDp *instance_p) u32 index; GetCpuId(&cpu_id); - InterruptSetTargetCpus(instance_p->dp_instance_p[0].config.irq_num, cpu_id);/*the dc0 and dc1 have the same num of irq_num*/ + for (index = 0; index < FDC_INSTANCE_NUM; index ++) + { + if (channel_mask & BIT(index)) + { + InterruptSetTargetCpus(instance_p->dp_instance_p[index].config.irq_num, cpu_id);/*the dc0 and dc1 have the same num of irq_num*/ + InterruptSetPriority(instance_p->dp_instance_p[index].config.irq_num, FREERTOS_MEDIA_IRQ_PRIORITY);/*dp0 and dp1 have the same irq_num*/ + InterruptInstall(instance_p->dp_instance_p[index].config.irq_num, FDcDpInterruptHandler, instance_p, ""); + InterruptUmask(instance_p->dp_instance_p[index].config.irq_num); + } + } FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_CONNECTED, FFreeRTOSMediaHpdConnectCallback, (void *)instance_p); FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_DISCONNECTED, FFreeRTOSMediaHpdBreakCallback, (void *)instance_p); FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_TIMEOUT, FFreeRTOSMediaAuxTimeoutCallback, (void *)instance_p); FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_ERROR, FFreeRTOSMediaAuxErrorCallback, (void *)instance_p); - - InterruptSetPriority(instance_p->dp_instance_p[0].config.irq_num, FREERTOS_MEDIA_IRQ_PRIORITY);/*dp0 and dp1 have the same irq_num*/ - InterruptInstall(instance_p->dp_instance_p[0].config.irq_num, FDcDpInterruptHandler, instance_p, "media"); - InterruptUmask(instance_p->dp_instance_p[0].config.irq_num); } /** - * @name: FFreeRTOSMediaIrqAllEnable - * @msg: enable the irq - * @param {FDcDp} *instance_p is the instance of dcdp - * @return Null + * @name: FMediaInitTask + * @msg: init the media control + * @return ret,FMEDIA_DP_SUCCESS means success */ -static void FFreeRTOSMediaIrqAllEnable(FDcDp *instance_p) +FError FMediaInitTask(FFreeRTOSMedia *os_media) { - int index = 0; - FDcDpIntrEventType event_type = FDCDP_HPD_IRQ_CONNECTED; - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) - { - for (event_type = 0; event_type < FDCDP_INSTANCE_NUM; event_type++) - { - FDcDpIrqEnable(instance_p, index, event_type); - } - } -} - -/** - * @name: FFreeRTOSMediaDeviceInit - * @msg: enable the Dc and Dp - * @return Null - */ -void FFreeRTOSMediaDeviceInit(void) -{ - u32 index, start_index, end_index; - + FASSERT_MSG(NULL == media_event, "Event group exists."); + FASSERT_MSG((media_event = xEventGroupCreate()) != NULL, "Create event group failed."); + u32 index; + FError ret = FT_SUCCESS; /*设置用户参数*/ - u32 channel = 2;/* 0 or 1 or 2*/ - if (channel == FDCDP_INSTANCE_NUM) + FMediaCtrlProbe(os_media); + for (index = 0; index < FDP_INSTANCE_NUM; index ++) { - start_index = 0; - end_index = FDCDP_INSTANCE_NUM; - } - else - { - start_index = channel; - end_index = channel + 1; - } - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (index = start_index; index < end_index; index ++) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl,index); - - os_media.dcdp_ctrl.dc_instance_p[index].config = *FDcLookupConfig(index); - - os_media.dcdp_ctrl.dp_instance_p[index].config = *FDpLookupConfig(index); + if (channel_mask & BIT(index)) + { + os_media->dcdp_ctrl.dp_instance_p[index].trans_config.bit_depth = user_cfg.bit_depth; - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.bit_depth = user_cfg.bit_depth; + os_media->dcdp_ctrl.dc_instance_p[index].crtc.bpc = user_cfg.bpc; - os_media.dcdp_ctrl.dc_instance_p[index].crtc.bpc = user_cfg.bpc; + os_media->dcdp_ctrl.dc_instance_p[index].color_depth = user_cfg.color_depth; - os_media.dcdp_ctrl.dc_instance_p[index].color_depth = user_cfg.color_depth; + os_media->dcdp_ctrl.dp_instance_p[index].trans_config.clock_mode = user_cfg.clock_mode; - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.clock_mode = user_cfg.clock_mode; + os_media->dcdp_ctrl.dp_instance_p[index].trans_config.color_rep_format = user_cfg.color_rep; - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.color_rep_format = user_cfg.color_rep; + os_media->dcdp_ctrl.dc_instance_p[index].channel = index; - os_media.dcdp_ctrl.dc_instance_p[index].channel = index; + os_media->dcdp_ctrl.dc_instance_p[index].fb_addr = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - os_media.dcdp_ctrl.dc_instance_p[index].fb_addr = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ + os_media->dcdp_ctrl.dc_instance_p[index].fb_virtual = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - os_media.dcdp_ctrl.dc_instance_p[index].fb_virtual = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ + os_media->dcdp_ctrl.dp_instance_p[index].port = index; + + FDcDpGeneralCfgInitial(&os_media->dcdp_ctrl, index); - FDcDpGeneralCfgInitial(&os_media.dcdp_ctrl, index); + FFreeRTOSMediaHwInit(os_media, index,user_cfg.width, user_cfg.height); + } } - - FFreeRTOSMedia *os_config = FFreeRTOSMediaHwInit(&os_media,user_cfg.width, user_cfg.height); - FASSERT_MSG(NULL == media_event, "Event group exists."); - FASSERT_MSG((media_event = xEventGroupCreate()) != NULL, "Create event group failed."); - FFreeRTOSMediaIrqSet(&os_config->dcdp_ctrl); - FFreeRTOSMediaIrqAllEnable(&os_config->dcdp_ctrl); + FFreeRTOSMediaIrqSet(&os_media->dcdp_ctrl); + FDcDpIrqAllEnable(&os_media->dcdp_ctrl); vTaskDelete(NULL); + return ret; } - /** * @name: FFreeRTOSMediaChannelDeinit - * @msg:: deinit the media - * @param {u32} id is the num of dcdp + * @msg: deinit the media + * @param {u32} id is the number of dcdp * @return Null */ -void FFreeRTOSMediaChannelDeinit(u32 id) +void FFreeRTOSMediaChannelDeinit(FFreeRTOSMedia *os_media) { taskENTER_CRITICAL(); vEventGroupDelete(media_event); media_event = NULL; - FDcDpDeInitialize(&os_media.dcdp_ctrl, id); - taskEXIT_CRITICAL(); /* allow schedule after deinit */ - return ; -} - -/** - * @name: FFreeRTOSMediaHpdHandle - * @msg: handle the hpd event - * @return Null - */ -void FFreeRTOSMediaHpdHandle(void) -{ u32 index; - u32 ret = FDP_SUCCESS; - - FFreeRTOSMediaWaitEvent(FMEDIA_EVT_INTR(FMEDIA_CHANNEL_0) | FMEDIA_EVT_INTR(FMEDIA_CHANNEL_1), portMAX_DELAY); - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (;;) + for (index = 0; index < FDP_INSTANCE_NUM; index ++) { - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) + if (channel_mask & BIT(index)) { - if (os_media.dcdp_ctrl.is_initialized[index] == FDCDP_NOT_INITIALIZED) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl, index); - ret = FDcDpInitial(&os_media.dcdp_ctrl, index, user_cfg.width, user_cfg.height); - FFreeRTOSMediaClearEvent(media_event, FMEDIA_EVT_INTR(index)); - if (ret == FDP_SUCCESS) - { - printf("Hpd task finish , reinit the dp success.\r\n"); - } - os_media.dcdp_ctrl.is_initialized[index] = FDCDP_IS_INITIALIZED; - } - + FDcDpDeInitialize(&os_media->dcdp_ctrl, index);/*deinit the id channel*/ } - vTaskDelay(200); } + taskEXIT_CRITICAL(); + return; } - -/** - * @name: FFreeRTOSLVGLConfigTask - * @msg: config the lvgl - * @return Null - */ -void FFreeRTOSLVGLConfigTask(void) -{ - u32 index; - lv_init(); - FFreeRTOSPortInit(); - for (index = 0; index < FDCDP_INSTANCE_NUM; index ++) - { - FMediaDispFramebuffer(&os_media.dcdp_ctrl); - } - vTaskDelete(NULL); -} - - - - diff --git a/example/peripheral/media/lvgl_demo/inc/lv_demo_test.h b/example/peripheral/media/media_common/media_common.h similarity index 52% rename from example/peripheral/media/lvgl_demo/inc/lv_demo_test.h rename to example/peripheral/media/media_common/media_common.h index fa3537f56934d456c2412ef974c6877fb1341b21..a33f0f7b91a69b87bc63ae32c73a4fcad3a3c1b2 100644 --- a/example/peripheral/media/lvgl_demo/inc/lv_demo_test.h +++ b/example/peripheral/media/media_common/media_common.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023, Phytium Technology Co., Ltd. All Rights Reserved. + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of @@ -13,40 +13,39 @@ * See the License for the specific language governing permissions and * limitations under the License. * - * FilePath: lv_demo_test.h - * Date: 2023-02-05 18:27:47 - * LastEditTime: 2023-07-07 11:02:47 - * Description: This file is for providing the lvgl demo config * - * Modify History: + * FilePath: media_common.h + * Date: 2022-08-25 16:22:40 + * LastEditTime: 2022-07-07 15:40:40 + * Description: This file is for defining the config and functions + * + * Modify History: * Ver   Who        Date         Changes * ----- ------ -------- -------------------------------------- - * 1.0 Wangzq 2023/03/20 Modify the format and establish the version - * 1.1 Wangzq 2023/07/07 change the third-party and driver relation + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version */ -#ifndef LV_DEMO_TEST_H -#define LV_DEMO_TEST_H - -#ifdef __cplusplus -extern "C" { -#endif +#ifndef MEDIA_COMMON_H +#define MEDIA_COMMON_H #include "ftypes.h" -#include "fparameters.h" +#include "fdcdp.h" #include "ferror_code.h" +#include "fmedia_os.h" - +#ifdef __cplusplus +extern "C" +{ +#endif +/*hpd task*/ +void FFreeRTOSMediaHpdTask(FFreeRTOSMedia *os_media); +/*init the media*/ +FError FMediaInitTask(FFreeRTOSMedia *os_media); /*deinit the media*/ -void FFreeRTOSMediaChannelDeinit(u32 id); -/*lvgl config task*/ -void FFreeRTOSLVGLConfigTask(void ); -/*handle the hpd event*/ -void FFreeRTOSMediaHpdHandle(void); -/*enable the Dc and Dp*/ -void FFreeRTOSMediaDeviceInit(void); +void FFreeRTOSMediaChannelDeinit(FFreeRTOSMedia *os_media); + #ifdef __cplusplus -} /*extern "C"*/ +} #endif -#endif /*LV_PORT_DISP_TEMPL_H*/ \ No newline at end of file +#endif // ! \ No newline at end of file diff --git a/example/peripheral/media/media_test/README.md b/example/peripheral/media/media_test/README.md index 4554d4a34fe5a6cf2e1aaea4d264735638c0696a..372af8ad648251206561b0e7af9f8f73d73c60a1 100644 --- a/example/peripheral/media/media_test/README.md +++ b/example/peripheral/media/media_test/README.md @@ -6,8 +6,8 @@ DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数据,按照 Display 协议处理后送给 DP PHY 接入显示器。 -本司E2000系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 -本例程主要展示本司E2000系列以及phytiumpi芯片DC显示驱动功能。 +本司PE220X系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 +本例程主要展示本司PE220X系列以及phytiumpi芯片DC显示驱动功能。 本例程example主要是测试驱动能否正常点亮屏幕。 @@ -40,7 +40,7 @@ DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数 本例程所需的硬件设备包括 -- 通过DP线将显示器与E2000板卡连接 +- 通过DP线将显示器与E2000D/Q DEMO、PhytiumPi开发板连接 - 利用串口调试线连接板卡和调试电脑,波特率设为 115200-8-1-N @@ -69,9 +69,9 @@ DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数 - 在host侧完成配置 ->配置成E2000,对于其它平台,使用对应的默认配置 +>配置成E2000Q demo,对于其它平台,使用对应的默认配置 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_media +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_media make menuconfig make image ``` diff --git a/example/peripheral/media/media_test/configs/pe2202_aarch32_demo_media.config b/example/peripheral/media/media_test/configs/pe2202_aarch32_demo_media.config index 88fa094967007716b6ed18303917ec7141328594..2058a1142fe5fd6ade1b0b7376943c2a64791ad1 100644 --- a/example/peripheral/media/media_test/configs/pe2202_aarch32_demo_media.config +++ b/example/peripheral/media/media_test/configs/pe2202_aarch32_demo_media.config @@ -4,7 +4,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_LOG_EXTRA_INFO=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/media_test/configs/pe2202_aarch64_demo_media.config b/example/peripheral/media/media_test/configs/pe2202_aarch64_demo_media.config index 6229f818b5c393d6bccc2531e473b1ae726989ba..f6e1d47d05d48528d37d2f6203b2999166395817 100644 --- a/example/peripheral/media/media_test/configs/pe2202_aarch64_demo_media.config +++ b/example/peripheral/media/media_test/configs/pe2202_aarch64_demo_media.config @@ -3,7 +3,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_LOG_EXTRA_INFO=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/media_test/configs/pe2204_aarch32_demo_media.config b/example/peripheral/media/media_test/configs/pe2204_aarch32_demo_media.config index f1148fab54272af3b44be7915a0d1fd7389af1fa..2fec2b0f53bc39b6dba88649d4a8ba69b5c50623 100644 --- a/example/peripheral/media/media_test/configs/pe2204_aarch32_demo_media.config +++ b/example/peripheral/media/media_test/configs/pe2204_aarch32_demo_media.config @@ -3,7 +3,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_LOG_EXTRA_INFO=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/media_test/configs/pe2204_aarch32_phytiumpi_media.config b/example/peripheral/media/media_test/configs/pe2204_aarch32_phytiumpi_media.config index 02c963aa09e6c51c8b29416a1edfaee6e7792665..ef268b6c3f88a1e1d1186660630ad6d602c522c8 100644 --- a/example/peripheral/media/media_test/configs/pe2204_aarch32_phytiumpi_media.config +++ b/example/peripheral/media/media_test/configs/pe2204_aarch32_phytiumpi_media.config @@ -4,7 +4,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_LOG_EXTRA_INFO=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/media_test/configs/pe2204_aarch64_demo_media.config b/example/peripheral/media/media_test/configs/pe2204_aarch64_demo_media.config index 334028137f8d8987e6efe96422204f7ef0a561e1..20cca72ea01eaa285f8679bd4c298f8cc9251eb9 100644 --- a/example/peripheral/media/media_test/configs/pe2204_aarch64_demo_media.config +++ b/example/peripheral/media/media_test/configs/pe2204_aarch64_demo_media.config @@ -2,7 +2,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_LOG_EXTRA_INFO=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/media_test/configs/pe2204_aarch64_phytiumpi_media.config b/example/peripheral/media/media_test/configs/pe2204_aarch64_phytiumpi_media.config index 8ec00082d1b4ff0de9e3c3f12faabe17b3ba4565..fe209825b287d784f42d348b1a083e57883b6e25 100644 --- a/example/peripheral/media/media_test/configs/pe2204_aarch64_phytiumpi_media.config +++ b/example/peripheral/media/media_test/configs/pe2204_aarch64_phytiumpi_media.config @@ -4,7 +4,7 @@ CONFIG_TARGET_NAME="media" CONFIG_LOG_DEBUG=y CONFIG_LOG_EXTRA_INFO=y CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_MAX_LENGTH=0x20000000 CONFIG_FREERTOS_USE_MEDIA=y diff --git a/example/peripheral/media/media_test/inc/media_example.h b/example/peripheral/media/media_test/inc/media_example.h index 57af48b0d5dbed333a19f62c45cac3a53ce9035b..251df16c36ca659ac5e20621f220b1e346a1c95d 100644 --- a/example/peripheral/media/media_test/inc/media_example.h +++ b/example/peripheral/media/media_test/inc/media_example.h @@ -31,6 +31,8 @@ #include "ftypes.h" #include "fdcdp.h" +#include "ferror_code.h" + #ifdef __cplusplus extern "C" @@ -45,14 +47,15 @@ typedef struct u8 reserve; } GraphicsTest; +/*select the channel*/ +u8 FMediaChannelIsSelected(u32 channel_index); + /*create the media demo*/ -FError FMediaDisplayDemo(void); +FError FMediaDisplayDemo(index); /*create the media init task*/ BaseType_t FFreeRTOSMediaCreate(void); -/*deinit the media*/ -void FFreeRTOSMediaChannelDeinit(u32 id); #ifdef __cplusplus } diff --git a/example/peripheral/media/media_test/makefile b/example/peripheral/media/media_test/makefile index 681587e37cb8a2adc896e36036c56f9a99321b9f..e4628de717ec1778c54c1f814265baaae36ef803 100644 --- a/example/peripheral/media/media_test/makefile +++ b/example/peripheral/media/media_test/makefile @@ -8,13 +8,16 @@ BOOT_IMG_NAME ?= freertos USER_CSRC := main.c USER_CSRC += $(wildcard src/*.c) -USER_CSRC += $(wildcard ../common/*.c) +USER_CSRC += $(wildcard ../media_common/*.c) USER_ASRC := USER_CXXSRC := +USER_INCLUDE += $(PROJECT_DIR) + USER_INCLUDE := $(PROJECT_DIR) \ $(PROJECT_DIR)/inc \ + $(PROJECT_DIR)/../media_common include $(FREERTOS_SDK_DIR)/tools/makeall.mk diff --git a/example/peripheral/media/media_test/sdkconfig b/example/peripheral/media/media_test/sdkconfig index 62fdbc5fb83ec684300c666b0c7e6bef2a631865..f9aba351abee00543523487f7feb68ee9ae46dc7 100644 --- a/example/peripheral/media/media_test/sdkconfig +++ b/example/peripheral/media/media_test/sdkconfig @@ -70,6 +70,7 @@ CONFIG_TARGET_PE220X=y CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# CONFIG_UART_INIT_NOT_CLR_INTR is not set # end of Soc configuration # @@ -156,7 +157,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set CONFIG_USE_MEDIA=y -CONFIG_USE_FMEDIA=y +CONFIG_USE_FMEDIA_V1=y +# CONFIG_USE_FMEDIA_V2 is not set # CONFIG_USE_SCMI_MHU is not set # CONFIG_USE_I2S is not set # CONFIG_USE_I3C is not set @@ -227,6 +229,7 @@ CONFIG_STACK_SIZE=0x400 # FreeRTOS Uart Drivers # CONFIG_FREERTOS_USE_UART=y +# CONFIG_FREERTOS_USE_SERIAL_V2 is not set # end of FreeRTOS Uart Drivers # @@ -252,12 +255,14 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_XMAC is not set # CONFIG_FREERTOS_USE_GMAC is not set +# CONFIG_FREERTOS_USE_XMAC_V2 is not set # end of FreeRTOS Eth Drivers # # FreeRTOS Spim Drivers # # CONFIG_FREERTOS_USE_FSPIM is not set +# CONFIG_FREERTOS_USE_FSPIM_V2 is not set # end of FreeRTOS Spim Drivers # @@ -283,6 +288,7 @@ CONFIG_FREERTOS_USE_UART=y # FreeRTOS I2c Drivers # # CONFIG_FREERTOS_USE_I2C is not set +# CONFIG_FREERTOS_USE_FI2C_V2 is not set # end of FreeRTOS I2c Drivers # diff --git a/example/peripheral/media/media_test/sdkconfig.h b/example/peripheral/media/media_test/sdkconfig.h index 135f0bb91b5921fff4ca72e13fdeaab54bea45af..0e8dd28dacd5b25129d630042a8ea9ae698fc661 100644 --- a/example/peripheral/media/media_test/sdkconfig.h +++ b/example/peripheral/media/media_test/sdkconfig.h @@ -66,6 +66,7 @@ #define CONFIG_DEFAULT_DEBUG_PRINT_UART1 /* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ /* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* CONFIG_UART_INIT_NOT_CLR_INTR is not set */ /* end of Soc configuration */ /* Board Configuration */ @@ -144,7 +145,8 @@ /* CONFIG_USE_PWM is not set */ /* CONFIG_USE_IPC is not set */ #define CONFIG_USE_MEDIA -#define CONFIG_USE_FMEDIA +#define CONFIG_USE_FMEDIA_V1 +/* CONFIG_USE_FMEDIA_V2 is not set */ /* CONFIG_USE_SCMI_MHU is not set */ /* CONFIG_USE_I2S is not set */ /* CONFIG_USE_I3C is not set */ @@ -206,6 +208,7 @@ /* FreeRTOS Uart Drivers */ #define CONFIG_FREERTOS_USE_UART +/* CONFIG_FREERTOS_USE_SERIAL_V2 is not set */ /* end of FreeRTOS Uart Drivers */ /* FreeRTOS Pwm Drivers */ @@ -227,11 +230,13 @@ /* CONFIG_FREERTOS_USE_XMAC is not set */ /* CONFIG_FREERTOS_USE_GMAC is not set */ +/* CONFIG_FREERTOS_USE_XMAC_V2 is not set */ /* end of FreeRTOS Eth Drivers */ /* FreeRTOS Spim Drivers */ /* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* CONFIG_FREERTOS_USE_FSPIM_V2 is not set */ /* end of FreeRTOS Spim Drivers */ /* FreeRTOS DMA Drivers */ @@ -253,6 +258,7 @@ /* FreeRTOS I2c Drivers */ /* CONFIG_FREERTOS_USE_I2C is not set */ +/* CONFIG_FREERTOS_USE_FI2C_V2 is not set */ /* end of FreeRTOS I2c Drivers */ /* FreeRTOS Mio Drivers */ diff --git a/example/peripheral/media/media_test/src/cmd_media.c b/example/peripheral/media/media_test/src/cmd_media.c index 55e26d094be841cd172695cb7b2b373029f08b17..343ba12a8d3a638aa8b7ca9a5f51f2d8bbe6ab47 100644 --- a/example/peripheral/media/media_test/src/cmd_media.c +++ b/example/peripheral/media/media_test/src/cmd_media.c @@ -35,6 +35,7 @@ #include "shell_port.h" #include "media_example.h" +#include "media_common.h" static void FFreeRTOSMediaCmdUsage(void) @@ -59,7 +60,6 @@ static int MediaCmdEntry(int argc, char *argv[]) } if (!strcmp(argv[1], "init")) { - BaseType_t task_ret = FFreeRTOSMediaCreate(); if (pdPASS != task_ret) @@ -68,15 +68,6 @@ static int MediaCmdEntry(int argc, char *argv[]) } inited = TRUE; } - if (!strcmp(argv[1], "demo")) - { - if (inited != TRUE) - { - printf("please ensure the media has been inited \r\n"); - return -2; - } - FMediaDisplayDemo(); - } if (!strcmp(argv[1], "deinit")) { if (inited != TRUE) @@ -84,13 +75,19 @@ static int MediaCmdEntry(int argc, char *argv[]) printf("please ensure the media has been inited \r\n"); return -2; } - if (argc >= 3) + + BaseType_t task_ret = FFreeRTOSMediaDeinit(); + + if (pdPASS != task_ret) { - id = (u32)simple_strtoul(argv[2], NULL, 10); + return -2; } - FFreeRTOSMediaChannelDeinit(id); } + if (!strcmp(argv[1], "demo")) + { + FMediaDisplayDemo(); + } return 0; } diff --git a/example/peripheral/media/media_test/src/media_example.c b/example/peripheral/media/media_test/src/media_example.c index 4894d49eeaee952768fcfea5e08dd8fad6408638..f4c62ff9d105d2a8c2ff303a9dbe90295728d759 100644 --- a/example/peripheral/media/media_test/src/media_example.c +++ b/example/peripheral/media/media_test/src/media_example.c @@ -44,256 +44,30 @@ #include "fdp_hw.h" #include "fdp.h" #include "fdcdp_reg.h" -#include"media_example.h" +#include "media_example.h" +#include "media_example.h" #include "fdcdp_crtc.h" -typedef struct -{ - u32 bit_depth; - u32 bpc; - u32 color_depth; - u32 clock_mode; - u32 color_rep; - u32 width; - u32 height; - u32 multi_mode; -} FuserCfg; - -static const FuserCfg user_cfg = { - .bit_depth = 8, - .bpc = 8, - .color_depth = 32, - .clock_mode = 1, - .color_rep = 0, - .width = 800, - .height = 600, - .multi_mode = 0/*0:clone, 1 :horz, 2:vert*/ -}; +#include "media_common.h" /************************** Variable Definitions *****************************/ -#define FMEDIA_EVT_INTR(index) BIT(index) -#define FMEDIA_CHANNEL_0 0 -#define FMEDIA_CHANNEL_1 1 +/*通道组合*/ +#define CHANNEL_NONE 0x0 /*不选择*/ +#define CHANNEL_DP_0 0x1 /*通道0*/ +#define CHANNEL_DP_1 0x2 /*通道1*/ +#define CHANNEL_DP_2 0x4 /*通道2*/ +#define CHANNEL_DP_0_1 (CHANNEL_DP_0 | CHANNEL_DP_1) /*通道0 1*/ +#define CHANNEL_DP_0_2 (CHANNEL_DP_0 | CHANNEL_DP_2) /*通道0 2*/ +#define CHANNEL_DP_1_2 (CHANNEL_DP_1 | CHANNEL_DP_2) /*通道1 2*/ +#define CHANNEL_DP_ALL (CHANNEL_DP_0 | CHANNEL_DP_1 | CHANNEL_DP_2) /*通道0 1 2*/ + +static u32 channel_mask = CHANNEL_DP_0_1; /* 默认选择双通道*/ /***************** Macros (Inline Functions) Definitions *********************/ static TaskHandle_t init_task; -static TaskHandle_t hpd_task ; - +static TaskHandle_t hpd_task; static FFreeRTOSMedia os_media; -static EventGroupHandle_t media_event = NULL; static GraphicsTest blt_buffer; -static u8 static_frame_buffer_address[1920 * 1080 * 4] __attribute__((aligned(128))) = {0};/*Framebuffer 大小 (字节) = 屏幕宽度 (像素) × 屏幕高度 (像素) × 每像素位数 (bpp) / 8*/ /************************** Function Prototypes ******************************/ -static void FFreeRTOSMediaSendEvent(u32 evt_bits) -{ - FASSERT(media_event); - BaseType_t x_result = pdFALSE; - BaseType_t xhigher_priority_task_woken = pdFALSE; - /*set the irq event for the task*/ - x_result = xEventGroupSetBitsFromISR(media_event, evt_bits, &xhigher_priority_task_woken); -} - -static boolean FFreeRTOSMediaWaitEvent(u32 evt_bits, TickType_t wait_delay) -{ - FASSERT(media_event); - EventBits_t event; - event = xEventGroupWaitBits(media_event, evt_bits, - pdTRUE, pdFALSE, wait_delay);/*wait the irq event for the task*/ - if (event & evt_bits) - { - return TRUE; - } - return FALSE; -} - -static boolean FFreeRTOSMediaClearEvent(EventGroupHandle_t pvEventGroup, const uint32_t ulBitsToClear) -{ - FASSERT(media_event); - EventBits_t event; - event = xEventGroupClearBits(pvEventGroup, ulBitsToClear);/*clear the intr bits*/ - return TRUE; -} - -/** - * @name: FFreeRTOSMediaHpdConnectCallback - * @msg: the hpd connect event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaHpdConnectCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); - instance_p->is_initialized[index] = FDCDP_IS_INITIALIZED; - printf("Dp:%d connect\r\n", index); -} - -/** - * @name: FFreeRTOSMediaHpdBreakCallback - * - * - * - * @msg: the hpd disconnect event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaHpdBreakCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - instance_p->is_initialized[index] = FDCDP_NOT_INITIALIZED; - FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); - printf("Dp:%d disconnect\r\n", index); -} - -/** - * @name: FFreeRTOSMediaAuxTimeoutCallback - * @msg: the aux timeout event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaAuxTimeoutCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - printf("Dp:%d aux connect timeout\r\n", index); -} - -/** - * @name: FFreeRTOSMediaAuxErrorCallback - * @msg: the aux error event - * @param {void} *args is the instance of dcdp - * @param {u32} index is the channel - * @return Null - */ -static void FFreeRTOSMediaAuxErrorCallback(void *args, u32 index) -{ - FASSERT(args != NULL); - FDcDp *instance_p = (FDcDp *)args; - FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, PHYTIUM_DP_INTERRUPT_STATUS); /*clear interrupt*/ - printf("Dp:%d aux connect error\r\n", index); -} - -/** - * @name: FFreeRTOSMediaIrqSet - * @msg: set the irq event and instance - * @param {FDcDp} *instance_p is the instance of dcdp - * @return Null - */ -static void FFreeRTOSMediaIrqSet(FDcDp *instance_p) -{ - FASSERT(instance_p != NULL); - u32 cpu_id; - - GetCpuId(&cpu_id); - InterruptSetTargetCpus(instance_p->dp_instance_p[0].config.irq_num, cpu_id);/*the dc0 and dc1 have the same num of irq_num*/ - - FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_CONNECTED, FFreeRTOSMediaHpdConnectCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_DISCONNECTED, FFreeRTOSMediaHpdBreakCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_TIMEOUT, FFreeRTOSMediaAuxTimeoutCallback, (void *)instance_p); - FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_ERROR, FFreeRTOSMediaAuxErrorCallback, (void *)instance_p); - - InterruptSetPriority(instance_p->dp_instance_p[0].config.irq_num, FREERTOS_MEDIA_IRQ_PRIORITY);/*dp0 and dp1 have the same irq_num*/ - InterruptInstall(instance_p->dp_instance_p[0].config.irq_num, FDcDpInterruptHandler, instance_p, "media"); - InterruptUmask(instance_p->dp_instance_p[0].config.irq_num); -} - -/** - * @name: FDcDpIrqAllEnable - * @msg: enable the irq - * @param {FDcDp} *instance_p is the instance of dcdp - * @return Null - */ -static void FDcDpIrqAllEnable(FDcDp *instance_p) -{ - int index = 0; - FDcDpIntrEventType event_type = FDCDP_HPD_IRQ_CONNECTED; - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) - { - for (event_type = 0; event_type < FDCDP_INSTANCE_NUM; event_type++) - { - FDcDpIrqEnable(instance_p, index, event_type); - } - } -} - -/** - * @name: FFreeRTOSMediaInitTask - * @msg: a task for init the media - * @return Null - */ -static void FFreeRTOSMediaInitTask(void) -{ - FError ret = FDP_SUCCESS; - u32 index, start_index, end_index; - - /*设置用户参数*/ - u32 channel = 2;/* 0 or 1 or 2*/ - if (channel == FDCDP_INSTANCE_NUM) - { - start_index = 0; - end_index = FDCDP_INSTANCE_NUM; - } - else - { - start_index = channel; - end_index = channel + 1; - } - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (index = start_index; index < end_index; index ++) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl,index); - - os_media.dcdp_ctrl.dc_instance_p[index].config = *FDcLookupConfig(index); - - os_media.dcdp_ctrl.dp_instance_p[index].config = *FDpLookupConfig(index); - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.bit_depth = user_cfg.bit_depth; - - os_media.dcdp_ctrl.dc_instance_p[index].crtc.bpc = user_cfg.bpc; - - os_media.dcdp_ctrl.dc_instance_p[index].color_depth = user_cfg.color_depth; - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.clock_mode = user_cfg.clock_mode; - - os_media.dcdp_ctrl.dp_instance_p[index].trans_config.color_rep_format = user_cfg.color_rep; - - os_media.dcdp_ctrl.dc_instance_p[index].channel = index; - - os_media.dcdp_ctrl.dc_instance_p[index].fb_addr = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - - os_media.dcdp_ctrl.dc_instance_p[index].fb_virtual = (uintptr)static_frame_buffer_address ;/*当前例程虚拟地址和物理地址一致,实际需要根据需要进行映射*/ - - FDcDpGeneralCfgInitial(&os_media.dcdp_ctrl, index); - } - - FFreeRTOSMedia *os_config = FFreeRTOSMediaHwInit(&os_media,user_cfg.width, user_cfg.height); - FFreeRTOSMediaIrqSet(&os_config->dcdp_ctrl); - FDcDpIrqAllEnable(&os_config->dcdp_ctrl); - vTaskDelete(NULL); -} - -/** - * @name: FFreeRTOSMediaChannelDeinit - * @msg: deinit the media - * @param {u32} id is the number of dcdp - * @return Null - */ -void FFreeRTOSMediaChannelDeinit(u32 id) -{ - taskENTER_CRITICAL(); - vEventGroupDelete(media_event); - media_event = NULL; - FDcDpDeInitialize(&os_media.dcdp_ctrl, id);/*deinit the id channel*/ - taskEXIT_CRITICAL(); - return; -} /** * @name: BltVideoToFill @@ -326,20 +100,16 @@ static void BltVideoToFill(FDcCtrl *instance_p, GraphicsTest *config, u32 width, FASSERT(instance_p != NULL); FASSERT(config != NULL); - u32 ResWidth; - u32 ResHeight; - u32 Stride; - u32 I; - u32 J; - u32 Blt; + u32 stride; + u32 blt; - Stride = FDcWidthToStride(width, 32, 1); - memcpy(&Blt, config, sizeof(GraphicsTest)); - for (I = 0; I < (height); I++) + stride = FDcWidthToStride(width, 32, 1); + memcpy(&blt, config, sizeof(GraphicsTest)); + for (int i = 0; i < (height); i++) { - for (J = 0; J < (width * 2); J++) + for (int j = 0; j < (width * 2); j++) { - PhyFramebufferWrite(instance_p, I * Stride + J * 4, 1, &Blt); + PhyFramebufferWrite(instance_p, i * stride + j * 4, 1, &blt); } } @@ -351,43 +121,18 @@ static void BltVideoToFill(FDcCtrl *instance_p, GraphicsTest *config, u32 width, * @return Null */ FError FMediaDisplayDemo(void) -{ - FDcDp *instance_p = &os_media.dcdp_ctrl; - for (u32 index = 0; index < FDCDP_INSTANCE_NUM; index ++) - { - blt_buffer.Red = 0xff; - blt_buffer.Green = 0xff; - blt_buffer.Blue = 0x0; - blt_buffer.reserve = 0; - BltVideoToFill(&instance_p->dc_instance_p[index], &blt_buffer, user_cfg.width, user_cfg.height); - } -} - -/* create the hpd task */ -static void FFreeRTOSMediaHpdTask(void) { u32 index; - u32 ret = 0 ; - FFreeRTOSMediaWaitEvent(FMEDIA_EVT_INTR(FMEDIA_CHANNEL_0) | FMEDIA_EVT_INTR(FMEDIA_CHANNEL_1), portMAX_DELAY); - os_media.dcdp_ctrl.multi_mode = user_cfg.multi_mode; - for (;;) - { - for (index = 0; index < FDCDP_INSTANCE_NUM; index++) + for (index = 0; index < FDP_INSTANCE_NUM; index ++) + { + if (channel_mask & BIT(index)) { - if (os_media.dcdp_ctrl.is_initialized[index] == FDCDP_NOT_INITIALIZED) - { - FDcDpCfgInitialize(&os_media.dcdp_ctrl, index); - ret = FDcDpInitial(&os_media.dcdp_ctrl, index, user_cfg.width, user_cfg.height); - FFreeRTOSMediaClearEvent(media_event, FMEDIA_EVT_INTR(index)); - if (ret == FDP_SUCCESS) - { - printf("Hpd task finish , reinit the dp success.\r\n"); - } - os_media.dcdp_ctrl.is_initialized[index] = FDCDP_IS_INITIALIZED; - } - + blt_buffer.Red = 0x0; + blt_buffer.Green = 0xff; + blt_buffer.Blue = 0xff; + blt_buffer.reserve = 0; + BltVideoToFill(&os_media.dcdp_ctrl.dc_instance_p[index], &blt_buffer, 800, 600); } - vTaskDelay(200); } } @@ -395,15 +140,13 @@ static void FFreeRTOSMediaHpdTask(void) BaseType_t FFreeRTOSMediaCreate(void) { BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ - FASSERT_MSG(NULL == media_event, "Event group exists."); - FASSERT_MSG((media_event = xEventGroupCreate()) != NULL, "Create event group failed."); /* enter critical region */ taskENTER_CRITICAL(); /* Media init task */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaInitTask, /* 任务入口函数 */ - (const char *)"FFreeRTOSMediaInitTask", /* 任务名字 */ + xReturn = xTaskCreate((TaskFunction_t)FMediaInitTask, /* 任务入口函数 */ + (const char *)"FMediaInitTask", /* 任务名字 */ 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ (TaskHandle_t *)&init_task); @@ -411,10 +154,30 @@ BaseType_t FFreeRTOSMediaCreate(void) xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdTask, /* 任务入口函数 */ (const char *)"FFreeRTOSMediaHpdTask", /* 任务名字 */ 1024, /* 任务栈大小 */ - NULL, /* 任务入口函数参数 */ + &os_media, /* 任务入口函数参数 */ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ (TaskHandle_t *)&hpd_task); /* exit critical region */ taskEXIT_CRITICAL(); return xReturn; } + +/* create media test*/ +BaseType_t FFreeRTOSMediaDeinit() +{ + + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + /* enter critical region */ + taskENTER_CRITICAL(); + /* Media init task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaChannelDeinit, /* 任务入口函数 */ + (const char *)"FMediaDeInitTask", /* 任务名字 */ + 1024, /* 任务栈大小 */ + &os_media, /* 任务入口函数参数 */ + + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&init_task); + /* exit critical region */ + taskEXIT_CRITICAL(); + return xReturn; +} \ No newline at end of file diff --git a/example/peripheral/usb/usb_device/README.md b/example/peripheral/usb/usb_device/README.md index 24d1cb78ede282207d807a7c7e124e3b64b2b62b..15addc82de5d5b97e7a18b5d4c09c6ba1425f1dc 100644 --- a/example/peripheral/usb/usb_device/README.md +++ b/example/peripheral/usb/usb_device/README.md @@ -44,10 +44,7 @@ PD2408 上提供了 USB 3.0 OTG 控制器,本例程通过 CherryUSB,支持 - make 将目录下的工程进行编译 - make clean 将目录下的工程进行清理 - make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址 -- make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中 -- make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中 -- make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中 -- make load_e2000q_aarch32 将预设32bit e2000q 下的配置加载至工程中 +- make load_kconfig LOAD_CONFIG_NAME= 将预设配置加载至工程中 - make menuconfig 配置目录下的参数变量 - make backup_kconfig 将目录下的sdkconfig 备份到./configs下 @@ -63,7 +60,7 @@ PD2408 上提供了 USB 3.0 OTG 控制器,本例程通过 CherryUSB,支持 - 选择目标平台和例程需要的配置 ``` -make load_e2000d_aarch64 +- make load_kconfig LOAD_CONFIG_NAME= 将预设配置加载至工程中 ``` - 进行编译 diff --git a/example/peripheral/usb/usb_device/makefile b/example/peripheral/usb/usb_device/makefile index 2cb75eecfe4d35105f4e4124855e08611b0113d8..b3c8b0ed6229099fdcd712c9ea2d58c3abaa038e 100644 --- a/example/peripheral/usb/usb_device/makefile +++ b/example/peripheral/usb/usb_device/makefile @@ -47,26 +47,12 @@ endif mk_pusb3lib: $(CROSS_COMPILE)ar rcs $(SDK_DIR)/third-party/cherryusb/port/pusb3/libpusb3_dc_a64.a ./build/cherryusb/fpusb3/*.o -all_libs: - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb2/libpusb2_dc_a64.c -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_pusb2_no_log - make clean image mk_pusb2lib - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb2/libpusb2_dc_a32_hardfp.c -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pusb2_hardfp_no_log - make clean image mk_pusb2lib - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb2/libpusb2_dc_a32_softfp*.c -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pusb2_softfp_no_log - make clean image mk_pusb2lib - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb3/libpusb3_dc_a64.c -f - make load_kconfig LOAD_CONFIG_NAME=pd2408_aarch64_demo_pusb3_no_log - make clean image mk_pusb3lib - all_images: - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_pusb2_lib + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_pusb2_lib make clean image - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pusb2_hardfp_lib + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch32_demo_pusb2_hardfp_lib make clean image - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pusb2_softfp_lib + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch32_demo_pusb2_softfp_lib make clean image make load_kconfig LOAD_CONFIG_NAME=pd2408_aarch64_demo_pusb3_lib make clean image \ No newline at end of file diff --git a/example/peripheral/usb/usb_host/README.md b/example/peripheral/usb/usb_host/README.md index c7c619b2b41dc19d3d5d8af06d33d501e52a766f..8e1c3cacdc3e97e5e03cb3af7a82f89707f871e3 100644 --- a/example/peripheral/usb/usb_host/README.md +++ b/example/peripheral/usb/usb_host/README.md @@ -51,7 +51,7 @@ CherryUSB 是一个用于嵌入式系统 USB 协议栈,支持运行在Host模 - 选择目标平台和例程需要的配置 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch64_demo_cherry_usb +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_pusb2 ``` - 进行编译 @@ -167,7 +167,7 @@ usbh kbd 0 /dev/input1 - 加载飞腾派配置,然后编译镜像 ``` -make load_kconfig LOAD_CONFIG_NAME=phytiumpi_aarch64_firefly_cherry_usb +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_pusb2 ``` - 连接 USB 设备到 XHCI 0,注意不要连错,只有靠板子正面一侧的蓝色插槽对应的是 XHCI 控制器 diff --git a/example/peripheral/usb/usb_host/makefile b/example/peripheral/usb/usb_host/makefile index c4c5f55cad3393efcbae319402ea65bed3d97285..d0f4fa8e19df28d6b4938f9beed6bc49500598d3 100644 --- a/example/peripheral/usb/usb_host/makefile +++ b/example/peripheral/usb/usb_host/makefile @@ -60,43 +60,20 @@ endif mk_pusb3lib: $(CROSS_COMPILE)ar rcs $(SDK_DIR)/third-party/cherryusb/port/pusb3/libpusb3_hc_a64.a ./build/cherryusb/fpusb3/*.o ./build/cherryusb/fxhci/*.o -all_libs: - @rm $(SDK_DIR)/third-party/cherryusb/port/xhci/phytium/libxhci_a64.a -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_xhci_no_log - make clean image mk_xhcilib - @rm $(SDK_DIR)/third-party/cherryusb/port/xhci/phytium/libxhci_a32_hardfp.a -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_xhci_no_log_hardfp - make clean image mk_xhcilib - @rm $(SDK_DIR)/third-party/cherryusb/port/xhci/phytium/libxhci_a32_softfp*.a -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_xhci_no_log_softfp - make clean image mk_xhcilib - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb2/libpusb2_hc_a64.c -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_pusb2_no_log - make clean image mk_pusb2lib - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb2/libpusb2_hc_a32_hardfp.c -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pusb2_hardfp_no_log - make clean image mk_pusb2lib - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb2/libpusb2_hc_a32_softfp*.c -f - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pusb2_softfp_no_log - make clean image mk_pusb2lib - @rm $(SDK_DIR)/third-party/cherryusb/port/pusb3/libpusb3_hc_a64.c -f - make load_kconfig LOAD_CONFIG_NAME=pd2408_aarch64_demo_pusb3_non_log - make clean image mk_pusb3lib - all_images: - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_xhci_lib + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_xhci make clean image - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_xhci_lib_hardfp + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch32_demo_xhci_hardfp make clean image - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_xhci_lib_softfp + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch32_demo_xhci_softfp make clean image - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_pcie_xhci_lib + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_pcie_xhci make clean image - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pcie_xhci_lib_hardfp + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch32_demo_pcie_xhci_hardfp make clean image - make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch32_demo_pcie_xhci_lib_softfp + make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch32_demo_pcie_xhci_softfp make clean image - make load_kconfig LOAD_CONFIG_NAME=pd2408_aarch64_demo_pcie_xhci_lib + make load_kconfig LOAD_CONFIG_NAME=pd2408_aarch64_test_a_pcie_xhci make clean image - make load_kconfig LOAD_CONFIG_NAME=pd2408_aarch64_demo_pusb3_lib + make load_kconfig LOAD_CONFIG_NAME=pd2408_aarch64_test_a_pusb3 make clean image \ No newline at end of file diff --git a/example/storage/spim_spiffs/README.md b/example/storage/spim_spiffs/README.md index 22728e1e5cf85bf8675b19bcf472c1d06afe43ba..a3f3dd2f0f16ca70805e412b77a39dff05a2fc23 100755 --- a/example/storage/spim_spiffs/README.md +++ b/example/storage/spim_spiffs/README.md @@ -82,8 +82,7 @@ - make 将目录下的工程进行编译 - make clean 将目录下的工程进行清理 - make image 将目录下的工程进行编译,并将生成的elf 复制到目标地址 -- make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中 -- make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中 +- make load_kconfig LOAD_CONFIG_NAME= 将预设配置加载至工程中 - make menuconfig 配置目录下的参数变量 - make backup_kconfig 将目录下的sdkconfig 备份到./configs下 diff --git a/example/system/amp/openamp_for_linux/configs/pd2008_aarch32_test_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pd2008_aarch32_test_openamp_for_linux.config index 510b0a105fdbc60d4ebdcc3d89d0dd5edc18da55..4e46dffaf147be3d58947805795c49540a65d672 100644 --- a/example/system/amp/openamp_for_linux/configs/pd2008_aarch32_test_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pd2008_aarch32_test_openamp_for_linux.config @@ -1,6 +1,7 @@ CONFIG_ARCH_ARMV8_AARCH32=y CONFIG_USE_L3CACHE=y CONFIG_TARGET_PD2008=y +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y diff --git a/example/system/amp/openamp_for_linux/configs/pd2008_aarch64_test_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pd2008_aarch64_test_openamp_for_linux.config index 0a6fdbd43ea8fea0ce54f9b88f298ba536520b30..257850effbedfe5cc4f6be30be057c2b7558d596 100644 --- a/example/system/amp/openamp_for_linux/configs/pd2008_aarch64_test_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pd2008_aarch64_test_openamp_for_linux.config @@ -1,5 +1,6 @@ CONFIG_USE_L3CACHE=y CONFIG_TARGET_PD2008=y +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y diff --git a/example/system/amp/openamp_for_linux/configs/pd2308_aarch64_demo_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pd2308_aarch64_demo_openamp_for_linux.config index 172d3af1e9865722056ffa9926ded7d321a61a89..f3138fd37504074cb44b2043949e01d43c2042bf 100644 --- a/example/system/amp/openamp_for_linux/configs/pd2308_aarch64_demo_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pd2308_aarch64_demo_openamp_for_linux.config @@ -1,10 +1,10 @@ # CONFIG_BOOT_WITH_FLUSH_CACHE is not set CONFIG_TARGET_PD2308=y +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y CONFIG_ENABLE_IOPAD=y -CONFIG_USE_SERIAL=y # CONFIG_OUTPUT_BINARY is not set CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 diff --git a/example/system/amp/openamp_for_linux/configs/pe2202_aarch32_demo_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pe2202_aarch32_demo_openamp_for_linux.config index 2dd8fc09a05b5537e2a50e11c5c7910698bbcefe..1e7f22a0348ed1a8e3973b5d0b5556b1444ac9f2 100644 --- a/example/system/amp/openamp_for_linux/configs/pe2202_aarch32_demo_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pe2202_aarch32_demo_openamp_for_linux.config @@ -1,9 +1,9 @@ CONFIG_ARCH_ARMV8_AARCH32=y CONFIG_TARGET_PE2202=y +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y -CONFIG_USE_SERIAL=y # CONFIG_OUTPUT_BINARY is not set CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 diff --git a/example/system/amp/openamp_for_linux/configs/pe2202_aarch64_demo_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pe2202_aarch64_demo_openamp_for_linux.config index b1a19778cbb2ac4117c9b28be795fe562ddff39a..8923c45da2fbacc93ae56782d005702d0c9aa810 100644 --- a/example/system/amp/openamp_for_linux/configs/pe2202_aarch64_demo_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pe2202_aarch64_demo_openamp_for_linux.config @@ -1,9 +1,9 @@ # CONFIG_BOOT_WITH_FLUSH_CACHE is not set CONFIG_TARGET_PE2202=y +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y -CONFIG_USE_SERIAL=y # CONFIG_OUTPUT_BINARY is not set CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 diff --git a/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_demo_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_demo_openamp_for_linux.config index 7271cf89d41a15a159e5fb6e3120db5987689a94..06e86319eb1e66f6aabb61159d1781b4d20d2ca4 100644 --- a/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_demo_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_demo_openamp_for_linux.config @@ -1,8 +1,8 @@ CONFIG_ARCH_ARMV8_AARCH32=y +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y -CONFIG_USE_SERIAL=y # CONFIG_OUTPUT_BINARY is not set CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 diff --git a/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_phytiumpi_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_phytiumpi_openamp_for_linux.config index 7174740aa11d3b4ceb5d3cdf3886d1e0d2c4afbb..53010045064666511000c7a0380675eb5b0c27eb 100644 --- a/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_phytiumpi_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pe2204_aarch32_phytiumpi_openamp_for_linux.config @@ -1,9 +1,9 @@ CONFIG_ARCH_ARMV8_AARCH32=y +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y -CONFIG_USE_SERIAL=y # CONFIG_OUTPUT_BINARY is not set CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 diff --git a/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_demo_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_demo_openamp_for_linux.config index 32a17e3f5aa424afc5aef3c146138f7a3285a121..a6ff0066a0e0147e59f179661765cc7fe9453512 100644 --- a/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_demo_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_demo_openamp_for_linux.config @@ -1,8 +1,8 @@ # CONFIG_BOOT_WITH_FLUSH_CACHE is not set +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y -CONFIG_USE_SERIAL=y # CONFIG_OUTPUT_BINARY is not set CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 diff --git a/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_phytiumpi_openamp_for_linux.config b/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_phytiumpi_openamp_for_linux.config index 7745d666f8e18ad77a53434d62094c4ce3e13d06..5d4e766fbc302bd41807438632ba142dd864f9d5 100644 --- a/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_phytiumpi_openamp_for_linux.config +++ b/example/system/amp/openamp_for_linux/configs/pe2204_aarch64_phytiumpi_openamp_for_linux.config @@ -1,9 +1,9 @@ # CONFIG_BOOT_WITH_FLUSH_CACHE is not set +CONFIG_UART_INIT_NOT_CLR_INTR=y CONFIG_PHYTIUMPI_FIREFLY_BOARD=y CONFIG_LOG_VERBOS=y CONFIG_LOG_DISPALY_CORE_NUM=y CONFIG_INTERRUPT_ROLE_SLAVE=y -CONFIG_USE_SERIAL=y # CONFIG_OUTPUT_BINARY is not set CONFIG_DEFAULT_LINKER_SCRIPT=y CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 diff --git a/example/system/amp/openamp_for_linux/sdkconfig b/example/system/amp/openamp_for_linux/sdkconfig index 5b5be5e88036e3ffde761b2ecda337e3ff70a689..1478d246865db9d99360c49338bb2d9605548805 100644 --- a/example/system/amp/openamp_for_linux/sdkconfig +++ b/example/system/amp/openamp_for_linux/sdkconfig @@ -82,6 +82,7 @@ CONFIG_TARGET_PE220X=y CONFIG_DEFAULT_DEBUG_PRINT_UART1=y # CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set # CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +CONFIG_UART_INIT_NOT_CLR_INTR=y # end of Soc configuration # @@ -237,6 +238,7 @@ CONFIG_STACK_SIZE=0x400 # FreeRTOS Uart Drivers # CONFIG_FREERTOS_USE_UART=y +# CONFIG_FREERTOS_USE_SERIAL_V2 is not set # end of FreeRTOS Uart Drivers # @@ -262,12 +264,14 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_XMAC is not set # CONFIG_FREERTOS_USE_GMAC is not set +# CONFIG_FREERTOS_USE_XMAC_V2 is not set # end of FreeRTOS Eth Drivers # # FreeRTOS Spim Drivers # # CONFIG_FREERTOS_USE_FSPIM is not set +# CONFIG_FREERTOS_USE_FSPIM_V2 is not set # end of FreeRTOS Spim Drivers # @@ -293,6 +297,7 @@ CONFIG_FREERTOS_USE_UART=y # FreeRTOS I2c Drivers # # CONFIG_FREERTOS_USE_I2C is not set +# CONFIG_FREERTOS_USE_FI2C_V2 is not set # end of FreeRTOS I2c Drivers # diff --git a/example/system/amp/openamp_for_linux/sdkconfig.h b/example/system/amp/openamp_for_linux/sdkconfig.h index 044bddcc4807b70ed2f25b9e7be651f0ed990f70..8b9f175c8c567b7299a5399a605bc61fd452ac56 100644 --- a/example/system/amp/openamp_for_linux/sdkconfig.h +++ b/example/system/amp/openamp_for_linux/sdkconfig.h @@ -73,6 +73,7 @@ #define CONFIG_DEFAULT_DEBUG_PRINT_UART1 /* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ /* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +#define CONFIG_UART_INIT_NOT_CLR_INTR /* end of Soc configuration */ /* Board Configuration */ @@ -211,6 +212,7 @@ /* FreeRTOS Uart Drivers */ #define CONFIG_FREERTOS_USE_UART +/* CONFIG_FREERTOS_USE_SERIAL_V2 is not set */ /* end of FreeRTOS Uart Drivers */ /* FreeRTOS Pwm Drivers */ @@ -232,11 +234,13 @@ /* CONFIG_FREERTOS_USE_XMAC is not set */ /* CONFIG_FREERTOS_USE_GMAC is not set */ +/* CONFIG_FREERTOS_USE_XMAC_V2 is not set */ /* end of FreeRTOS Eth Drivers */ /* FreeRTOS Spim Drivers */ /* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* CONFIG_FREERTOS_USE_FSPIM_V2 is not set */ /* end of FreeRTOS Spim Drivers */ /* FreeRTOS DMA Drivers */ @@ -258,6 +262,7 @@ /* FreeRTOS I2c Drivers */ /* CONFIG_FREERTOS_USE_I2C is not set */ +/* CONFIG_FREERTOS_USE_FI2C_V2 is not set */ /* end of FreeRTOS I2c Drivers */ /* FreeRTOS Mio Drivers */ diff --git a/example/system/nested_interrupt/README.md b/example/system/nested_interrupt/README.md index 7a606ddc8961b4f08a87a4a5049c40c99eee56fa..519451823a3abc9114b5269598c79b33106802e8 100644 --- a/example/system/nested_interrupt/README.md +++ b/example/system/nested_interrupt/README.md @@ -67,12 +67,12 @@ - 在host侧完成配置 -> 配置成ft2004,对于其它平台,使用对于的默认配置,如D2000 `make load_kconfig LOAD_CONFIG_NAME=d2000_aarch32_test_nested_interrupt` +> 配置成ft2004,对于其它平台,使用对于的默认配置,如D2000 `make load_kconfig LOAD_CONFIG_NAME=pd2008_aarch64_test_nested_interrupt` - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=ft2004_aarch64_dsk_nested_interrupt +make load_kconfig LOAD_CONFIG_NAME=pd2008_aarch64_test_nested_interrupt ``` - 选择例程需要的配置 diff --git a/example/system/posix/README.md b/example/system/posix/README.md index cbd1a26b309d1b09e8f43cb39b2eb7ccd4754877..0b1af180cb387c0bf094a73097246530b2854913 100644 --- a/example/system/posix/README.md +++ b/example/system/posix/README.md @@ -73,12 +73,12 @@ posix测试用例 (posix_example.c) - 在host侧完成配置 -> 配置成E2000D,对于其它平台,使用对于的默认配置,如E2000Q `make load_kconfig LOAD_CONFIG_NAME=e2000q_aarch64_demo_posix` +> 配置成E2000D demo,对于其它平台,使用对于的默认配置,如E2000Q `make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_posix` - 选择目标平台 ``` -make load_kconfig LOAD_CONFIG_NAME=e2000d_aarch64_demo_posix +make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_posix ``` - 选择例程需要的配置 diff --git a/install.py b/install.py index 39e8c0b1a2115c5a314ade83f120dbeab97e8780..fb0b29292adf6d168a4e694603b353482bf72cf3 100755 --- a/install.py +++ b/install.py @@ -28,7 +28,7 @@ curr_path = os.getcwd() freertos_sdk_path = install_path # Add standalone sdk -standalone_sdk_v="b7c46c8f32bc14165a3b141badf47150f62a0989" +standalone_sdk_v="329f9046f27b3c545548ab395bcfa3c4abf4b0d6" if (install_platform == windows_x64): standalone_path=freertos_sdk_path + '\\standalone' else: diff --git a/third-party/freertos/portable/freertos_configs.c b/third-party/freertos/portable/freertos_configs.c index dd2e1db0ce04902d037cec3da3947b180d4957ae..a61e1e26e2d84bee9e9b98b871e9adf7b9f68101 100644 --- a/third-party/freertos/portable/freertos_configs.c +++ b/third-party/freertos/portable/freertos_configs.c @@ -1,11 +1,3 @@ -/* - * @Author: zhangyan 1422953826@qq.com - * @Date: 2025-05-20 10:01:56 - * @LastEditors: zhangyan 1422953826@qq.com - * @LastEditTime: 2025-05-20 11:03:03 - * @FilePath: \phytium-free-rtos-sdk\third-party\freertos\portable\freertos_configs.c - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE - */ /* * Copyright (C) 2022, Phytium Technology Co., Ltd. All Rights Reserved. * diff --git a/third-party/lvgl-8.3/port/lv_port_disp.c b/third-party/lvgl-8.3/port/lv_port_disp.c index 6f6077a2512ebe8b6495ff72a624c1de84fe79c1..1d5633b8906a466fe2e2cbad049ed3511798dcb0 100644 --- a/third-party/lvgl-8.3/port/lv_port_disp.c +++ b/third-party/lvgl-8.3/port/lv_port_disp.c @@ -43,7 +43,7 @@ #include "lv_conf.h" #include "../lvgl.h" -static lv_color_int_t *rtt_fbp[FDCDP_INSTANCE_NUM] ; +static lv_color_int_t *rtt_fbp[FDP_INSTANCE_NUM] ; static u32 multi_mode;