From 2055ce8b75f9ae9c150365d66b8c8e2d3f2adb7c Mon Sep 17 00:00:00 2001 From: root Date: Wed, 10 Jul 2024 17:14:18 +0800 Subject: [PATCH] code update 2024_07_10 --- docs/ChangeLog.md | 20 + example/peripheral/adc/Kconfig | 7 - example/peripheral/adc/README.md | 117 ------ .../configs/e2000d_aarch32_demo_adc.config | 372 ------------------ .../configs/e2000d_aarch64_demo_adc.config | 361 ----------------- example/peripheral/adc/figs/create.png | Bin 22708 -> 0 bytes example/peripheral/adc/figs/delete.png | Bin 23344 -> 0 bytes example/peripheral/adc/inc/adc_example.h | 41 -- example/peripheral/adc/main.c | 53 --- example/peripheral/adc/makefile | 32 -- example/peripheral/adc/sdkconfig | 361 ----------------- example/peripheral/adc/sdkconfig.h | 323 --------------- example/peripheral/adc/src/adc_example.c | 267 ------------- example/peripheral/pwm/inc/pwm_example.h | 13 +- .../qspi/src/qspi_flash_indirect_example.c | 23 +- .../sdif/src/sdif_emmc_read_write.c | 2 +- example/storage/fatfs/src/fatfs_examples.c | 77 ---- install.py | 6 +- third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.c | 16 +- third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.h | 5 +- 20 files changed, 63 insertions(+), 2033 deletions(-) delete mode 100644 example/peripheral/adc/Kconfig delete mode 100644 example/peripheral/adc/README.md delete mode 100644 example/peripheral/adc/configs/e2000d_aarch32_demo_adc.config delete mode 100644 example/peripheral/adc/configs/e2000d_aarch64_demo_adc.config delete mode 100644 example/peripheral/adc/figs/create.png delete mode 100644 example/peripheral/adc/figs/delete.png delete mode 100644 example/peripheral/adc/inc/adc_example.h delete mode 100644 example/peripheral/adc/main.c delete mode 100644 example/peripheral/adc/makefile delete mode 100644 example/peripheral/adc/sdkconfig delete mode 100644 example/peripheral/adc/sdkconfig.h delete mode 100644 example/peripheral/adc/src/adc_example.c diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index e4ff99c9..81bd5f91 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -1,3 +1,23 @@ +# Phytium Standalone SDK 2024-07-10 ChangeLog + +Change Log since 2024-07-10 + +## example + +- modify qspi indirect example, fix length problem in function FQspiFlashPortReadData + +# Phytium Standalone SDK 2024-07-10 ChangeLog + +Change Log since 2024-06-18 + +## third-party + +- update fsl_sdmmc by standalone + +## example + +- init emmc by hs200 mode + # Phytium Standalone SDK 2024-06-18 ChangeLog Change Log since 2024-06-18 diff --git a/example/peripheral/adc/Kconfig b/example/peripheral/adc/Kconfig deleted file mode 100644 index dafb622e..00000000 --- a/example/peripheral/adc/Kconfig +++ /dev/null @@ -1,7 +0,0 @@ -# -# For a description of the syntax of this configuration file, -# see tools/kconfiglib/kconfig-language.txt. -# - - -source "$(SDK_DIR)/../freertos.kconfig" diff --git a/example/peripheral/adc/README.md b/example/peripheral/adc/README.md deleted file mode 100644 index 0824663e..00000000 --- a/example/peripheral/adc/README.md +++ /dev/null @@ -1,117 +0,0 @@ -# adc base on freertos - -## 1. 例程介绍 - -本例程示范了freertos环境下的adc的使用,包括adc的初始化、adc周期读取操作; -程序启动后,创建adc初始化任务,设置adc时钟分频、转换模式等; -创建adc定时读取任务FFreeRTOSAdcReadTask,用于定时读取adc转换结果; -创建单次模式的软件定时器,回调函数为删除FFreeRTOSAdcReadTask,去初始化adc,删除软件定时器; -使用C板进行测试,选择ADC0作为采样点,也就是adc0控制器的通道0,对应板上J154的引脚5; - -目前E2000_demo开发板引出了的IO不支持,所以此例程的代码仅供参考!!! - -## 2. 如何使用例程 - -本例程需要用到 - -- Phytium开发板(E2000D) -- [Phytium FreeRTOS SDK](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk) -- [Phytium standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk) - -### 2.1 硬件配置方法 - -本例程支持的硬件平台包括 - -- E2000D - -对应的配置项是, - -- CONFIG_TARGET_E2000D - -### 2.2 SDK配置方法 - -本例程需要, - -- 使能Shell -- 使能Adc - -对应的配置项是, - -- CONFIG_USE_LETTER_SHELL -- CONFIG_USE_ADC -- CONFIG_FREERTOS_USE_ADC - -本例子已经提供好具体的编译指令,以下进行介绍: -- make 将目录下的工程进行编译 -- make clean 将目录下的工程进行清理 -- make image 将目录下的工程进行编译,并将生成的elf 复制到目标地址 -- make list_kconfig 当前工程支持哪些配置文件 -- make load_kconfig LOAD_CONFIG_NAME= 将预设配置加载至工程中 -- make menuconfig 配置目录下的参数变量 -- make backup_kconfig 将目录下的sdkconfig 备份到./configs下 - -具体使用方法为: -- 在当前目录下 -- 执行以上指令 - -### 2.3 构建和下载 - -#### 2.3.1 构建过程 - -- 在host侧完成配置 - 配置成e2000d -- 选择目标平台 - -``` -make load_e2000d_aarch32 -``` - -- 选择例程需要的配置 - -``` -make menuconfig -``` - -- 编译清除 - -``` -make clean -``` - -- 将编译出的镜像放置到tftp目录下 - -``` -make image -``` - -#### 2.3.2 下载过程 - -- host侧设置重启host侧tftp服务器 - -``` -sudo service tftpd-hpa restart -``` - -- 开发板侧使用bootelf命令跳转 - -``` -setenv ipaddr 192.168.4.20 -setenv serverip 192.168.4.50 -setenv gatewayip 192.168.4.1 -tftpboot 0x90100000 freertos.elf -bootelf -p 0x90100000 -``` - -### 2.4 输出与实验现象 - -- 系统进入后,创建adc初始化任务,创建定时读取任务,并创建单次模式软件定时器 - -![create](./figs/create.png) - -- 定时器时间到,触发单次模式软件定时器的回调函数,去初始化adc,删除占空比变化任务,删除软件定时器 - -![delete](./figs/delete.png) - -## 3. 如何解决问题 - -## 4. 修改历史记录 diff --git a/example/peripheral/adc/configs/e2000d_aarch32_demo_adc.config b/example/peripheral/adc/configs/e2000d_aarch32_demo_adc.config deleted file mode 100644 index 745f75d7..00000000 --- a/example/peripheral/adc/configs/e2000d_aarch32_demo_adc.config +++ /dev/null @@ -1,372 +0,0 @@ -CONFIG_USE_FREERTOS=y - -# -# Arch configuration -# -CONFIG_TARGET_ARMv8=y -CONFIG_ARCH_NAME="armv8" - -# -# Arm architecture configuration -# -# CONFIG_ARCH_ARMV8_AARCH64 is not set -CONFIG_ARCH_ARMV8_AARCH32=y - -# -# Compiler configuration -# -CONFIG_ARM_GCC_SELECT=y -# CONFIG_ARM_CLANG_SELECT is not set -CONFIG_TOOLCHAIN_NAME="gcc" -CONFIG_TARGET_ARMV8_AARCH32=y -CONFIG_ARCH_EXECUTION_STATE="aarch32" - -# -# Fpu configuration -# -CONFIG_CRYPTO_NEON_FP_ARMV8=y -# CONFIG_VFPV4 is not set -# CONFIG_VFPV4_D16 is not set -# CONFIG_VFPV3 is not set -# CONFIG_VFPV3_D16 is not set -CONFIG_ARM_MFPU="crypto-neon-fp-armv8" -CONFIG_MFLOAT_ABI_HARD=y -# CONFIG_MFLOAT_ABI_SOFTFP is not set -CONFIG_ARM_MFLOAT_ABI="hard" -# end of Fpu configuration -# end of Compiler configuration - -CONFIG_USE_AARCH64_L1_TO_AARCH32=y -# end of Arm architecture configuration - -CONFIG_MMU_PAGE_SIZE=0x1000 -CONFIG_FMMU_NUM_L2_TABLES=256 -# end of Arch configuration - -# -# Soc configuration -# -# CONFIG_TARGET_PHYTIUMPI is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y -# CONFIG_TARGET_E2000S is not set -# CONFIG_TARGET_FT2004 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_PD2308 is not set -CONFIG_SOC_NAME="e2000" -CONFIG_TARGET_TYPE_NAME="d" -CONFIG_SOC_CORE_NUM=2 -CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 -CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 -CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 -CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set -# end of Soc configuration - -# -# Board Configuration -# -CONFIG_E2000D_DEMO_BOARD=y -CONFIG_BOARD_NAME="demo" - -# -# IO mux configuration when board start up -# -# CONFIG_USE_SPI_IOPAD is not set -# CONFIG_USE_GPIO_IOPAD is not set -# CONFIG_USE_CAN_IOPAD is not set -# CONFIG_USE_QSPI_IOPAD is not set -# CONFIG_USE_PWM_IOPAD is not set -# CONFIG_USE_ADC_IOPAD is not set -# CONFIG_USE_MIO_IOPAD is not set -# CONFIG_USE_TACHO_IOPAD is not set -# CONFIG_USE_UART_IOPAD is not set -# CONFIG_USE_THIRD_PARTY_IOPAD is not set -# end of IO mux configuration when board start up - -# CONFIG_CUS_DEMO_BOARD is not set - -# -# Build project name -# -CONFIG_TARGET_NAME="adc" -# end of Build project name -# end of Board Configuration - -# -# Sdk common configuration -# -CONFIG_ELOG_LINE_BUF_SIZE=0x100 -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -CONFIG_LOG_INFO=y -# CONFIG_LOG_WARN is not set -# CONFIG_LOG_ERROR is not set -# CONFIG_LOG_NONE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set -# end of Sdk common configuration - -# -# Image information configuration -# -# CONFIG_IMAGE_INFO is not set -# end of Image information configuration - -# -# Drivers configuration -# -CONFIG_USE_IOMUX=y -# CONFIG_ENABLE_IOCTRL is not set -CONFIG_ENABLE_IOPAD=y -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# end of Usart Configuration - -# CONFIG_USE_GPIO is not set -# CONFIG_USE_ETH is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -CONFIG_USE_ADC=y - -# -# ADC Configuration -# -CONFIG_USE_FADC=y -# end of ADC Configuration - -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_USE_I2S is not set -# CONFIG_USE_I3C is not set -# end of Drivers configuration - -# -# Build setup -# -CONFIG_CHECK_DEPS=y -CONFIG_OUTPUT_BINARY=y - -# -# Optimization options -# -# CONFIG_DEBUG_NOOPT is not set -# CONFIG_DEBUG_CUSTOMOPT is not set -CONFIG_DEBUG_FULLOPT=y -CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y -CONFIG_DEBUG_LINK_MAP=y -# CONFIG_CCACHE is not set -# CONFIG_ARCH_COVERAGE is not set -# CONFIG_LTO_FULL is not set -# end of Optimization options - -# -# Debug options -# -# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set -# CONFIG_WALL_WARNING_ERROR is not set -# CONFIG_STRICT_PROTOTYPES is not set -# CONFIG_DEBUG_SYMBOLS is not set -# CONFIG_FRAME_POINTER is not set -# CONFIG_OUTPUT_ASM_DIS is not set -# CONFIG_ENABLE_WSHADOW is not set -# CONFIG_ENABLE_WUNDEF is not set -CONFIG_DOWNGRADE_DIAG_WARNING=y -# end of Debug options - -# -# Lib -# -CONFIG_USE_COMPILE_CHAIN=y -# CONFIG_USE_NEWLIB is not set -# CONFIG_USE_USER_DEFINED is not set -# end of Lib - -# CONFIG_ENABLE_CXX is not set - -# -# Linker Options -# -CONFIG_DEFAULT_LINKER_SCRIPT=y -# CONFIG_USER_DEFINED_LD is not set -CONFIG_IMAGE_LOAD_ADDRESS=0x80100000 -CONFIG_IMAGE_MAX_LENGTH=0x2000000 -CONFIG_HEAP_SIZE=1 -CONFIG_SVC_STACK_SIZE=0x1000 -CONFIG_SYS_STACK_SIZE=0x1000 -CONFIG_IRQ_STACK_SIZE=0x1000 -CONFIG_ABORT_STACK_SIZE=0x1000 -CONFIG_FIQ_STACK_SIZE=0x1000 -CONFIG_UNDEF_STACK_SIZE=0x1000 -# end of Linker Options -# end of Build setup - -# -# Component Configuration -# - -# -# Freertos Uart Drivers -# -CONFIG_FREERTOS_USE_UART=y -# end of Freertos Uart Drivers - -# -# Freertos Pwm Drivers -# -# CONFIG_FREERTOS_USE_PWM is not set -# end of Freertos Pwm Drivers - -# -# Freertos Qspi Drivers -# -# CONFIG_FREERTOS_USE_QSPI is not set -# end of Freertos Qspi Drivers - -# -# Freertos Wdt Drivers -# -# CONFIG_FREERTOS_USE_WDT is not set -# end of Freertos Wdt Drivers - -# -# Freertos Eth Drivers -# -# CONFIG_FREERTOS_USE_XMAC is not set -# CONFIG_FREERTOS_USE_GMAC is not set -# end of Freertos Eth Drivers - -# -# Freertos Spim Drivers -# -# CONFIG_FREERTOS_USE_FSPIM is not set -# end of Freertos Spim Drivers - -# -# Freertos DMA Drivers -# -# CONFIG_FREERTOS_USE_FDDMA is not set -# CONFIG_FREERTOS_USE_FGDMA is not set -# end of Freertos DMA Drivers - -# -# Freertos Adc Drivers -# -CONFIG_FREERTOS_USE_ADC=y -# end of Freertos Adc Drivers - -# -# Freertos Can Drivers -# -# CONFIG_FREERTOS_USE_CAN is not set -# end of Freertos Can Drivers - -# -# Freertos I2c Drivers -# -# CONFIG_FREERTOS_USE_I2C is not set -# end of Freertos I2c Drivers - -# -# Freertos Mio Drivers -# -# CONFIG_FREERTOS_USE_MIO is not set -# end of Freertos Mio Drivers - -# -# Freertos Timer Drivers -# -# CONFIG_FREERTOS_USE_TIMER is not set -# end of Freertos Timer Drivers - -# -# Freertos Media Drivers -# -# CONFIG_FREERTOS_USE_MEDIA is not set -# end of Freertos Media Drivers - -# -# Freertos I2s Drivers -# -# CONFIG_FREERTOS_USE_I2S is not set -# end of Freertos I2s Drivers -# end of Component Configuration - -# -# Third-party configuration -# -# CONFIG_USE_LWIP is not set -CONFIG_USE_LETTER_SHELL=y - -# -# Letter Shell Configuration -# -CONFIG_LS_PL011_UART=y -CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y -# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set -# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set -# end of Letter Shell Configuration - -# CONFIG_USE_AMP is not set -# CONFIG_USE_YMODEM is not set -# CONFIG_USE_SFUD is not set -CONFIG_USE_BACKTRACE=y -# CONFIG_USE_FATFS_0_1_4 is not set -# CONFIG_USE_TLSF is not set -# CONFIG_USE_SPIFFS is not set -# CONFIG_USE_LITTLE_FS is not set -# CONFIG_USE_LVGL is not set -# CONFIG_USE_FREEMODBUS is not set -# CONFIG_USE_CHERRY_USB is not set -# CONFIG_USE_FSL_SDMMC is not set -# CONFIG_USE_FSL_WIFI is not set -# end of Third-party configuration - -# -# FreeRTOS Kernel Configuration -# -CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y -CONFIG_FREERTOS_HZ=1000 -CONFIG_FREERTOS_MAX_PRIORITIES=32 -CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 -CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y -CONFIG_FREERTOS_USE_TRACE_FACILITY=y -CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y -# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set -CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 -CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 -# CONFIG_FREERTOS_USE_POSIX is not set -# end of FreeRTOS Kernel Configuration diff --git a/example/peripheral/adc/configs/e2000d_aarch64_demo_adc.config b/example/peripheral/adc/configs/e2000d_aarch64_demo_adc.config deleted file mode 100644 index 08c35c94..00000000 --- a/example/peripheral/adc/configs/e2000d_aarch64_demo_adc.config +++ /dev/null @@ -1,361 +0,0 @@ -CONFIG_USE_FREERTOS=y - -# -# Arch configuration -# -CONFIG_TARGET_ARMv8=y -CONFIG_ARCH_NAME="armv8" - -# -# Arm architecture configuration -# -CONFIG_ARCH_ARMV8_AARCH64=y -# CONFIG_ARCH_ARMV8_AARCH32 is not set - -# -# Compiler configuration -# -CONFIG_ARM_GCC_SELECT=y -# CONFIG_ARM_CLANG_SELECT is not set -CONFIG_TOOLCHAIN_NAME="gcc" -CONFIG_TARGET_ARMV8_AARCH64=y -CONFIG_ARCH_EXECUTION_STATE="aarch64" -CONFIG_ARM_NEON=y -CONFIG_ARM_CRC=y -CONFIG_ARM_CRYPTO=y -CONFIG_ARM_FLOAT_POINT=y -# CONFIG_GCC_CODE_MODEL_TINY is not set -CONFIG_GCC_CODE_MODEL_SMALL=y -# CONFIG_GCC_CODE_MODEL_LARGE is not set -# end of Compiler configuration - -# CONFIG_BOOT_WITH_FLUSH_CACHE is not set -# CONFIG_MMU_DEBUG_PRINTS is not set -# end of Arm architecture configuration - -CONFIG_MMU_PAGE_SIZE=0x1000 -CONFIG_MAX_XLAT_TABLES=256 -# end of Arch configuration - -# -# Soc configuration -# -# CONFIG_TARGET_PHYTIUMPI is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y -# CONFIG_TARGET_E2000S is not set -# CONFIG_TARGET_FT2004 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_PD2308 is not set -CONFIG_SOC_NAME="e2000" -CONFIG_TARGET_TYPE_NAME="d" -CONFIG_SOC_CORE_NUM=2 -CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 -CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 -CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 -CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set -# end of Soc configuration - -# -# Board Configuration -# -CONFIG_E2000D_DEMO_BOARD=y -CONFIG_BOARD_NAME="demo" - -# -# IO mux configuration when board start up -# -# CONFIG_USE_SPI_IOPAD is not set -# CONFIG_USE_GPIO_IOPAD is not set -# CONFIG_USE_CAN_IOPAD is not set -# CONFIG_USE_QSPI_IOPAD is not set -# CONFIG_USE_PWM_IOPAD is not set -# CONFIG_USE_ADC_IOPAD is not set -# CONFIG_USE_MIO_IOPAD is not set -# CONFIG_USE_TACHO_IOPAD is not set -# CONFIG_USE_UART_IOPAD is not set -# CONFIG_USE_THIRD_PARTY_IOPAD is not set -# end of IO mux configuration when board start up - -# CONFIG_CUS_DEMO_BOARD is not set - -# -# Build project name -# -CONFIG_TARGET_NAME="adc" -# end of Build project name -# end of Board Configuration - -# -# Sdk common configuration -# -CONFIG_ELOG_LINE_BUF_SIZE=0x100 -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -CONFIG_LOG_INFO=y -# CONFIG_LOG_WARN is not set -# CONFIG_LOG_ERROR is not set -# CONFIG_LOG_NONE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set -# end of Sdk common configuration - -# -# Image information configuration -# -# CONFIG_IMAGE_INFO is not set -# end of Image information configuration - -# -# Drivers configuration -# -CONFIG_USE_IOMUX=y -# CONFIG_ENABLE_IOCTRL is not set -CONFIG_ENABLE_IOPAD=y -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# end of Usart Configuration - -# CONFIG_USE_GPIO is not set -# CONFIG_USE_ETH is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -CONFIG_USE_ADC=y - -# -# ADC Configuration -# -CONFIG_USE_FADC=y -# end of ADC Configuration - -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_USE_I2S is not set -# CONFIG_USE_I3C is not set -# end of Drivers configuration - -# -# Build setup -# -CONFIG_CHECK_DEPS=y -CONFIG_OUTPUT_BINARY=y - -# -# Optimization options -# -# CONFIG_DEBUG_NOOPT is not set -# CONFIG_DEBUG_CUSTOMOPT is not set -CONFIG_DEBUG_FULLOPT=y -CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y -CONFIG_DEBUG_LINK_MAP=y -# CONFIG_CCACHE is not set -# CONFIG_ARCH_COVERAGE is not set -# CONFIG_LTO_FULL is not set -# end of Optimization options - -# -# Debug options -# -# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set -# CONFIG_WALL_WARNING_ERROR is not set -# CONFIG_STRICT_PROTOTYPES is not set -# CONFIG_DEBUG_SYMBOLS is not set -# CONFIG_FRAME_POINTER is not set -# CONFIG_OUTPUT_ASM_DIS is not set -# CONFIG_ENABLE_WSHADOW is not set -# CONFIG_ENABLE_WUNDEF is not set -CONFIG_DOWNGRADE_DIAG_WARNING=y -# end of Debug options - -# -# Lib -# -CONFIG_USE_COMPILE_CHAIN=y -# CONFIG_USE_NEWLIB is not set -# CONFIG_USE_USER_DEFINED is not set -# end of Lib - -# CONFIG_ENABLE_CXX is not set - -# -# Linker Options -# -CONFIG_DEFAULT_LINKER_SCRIPT=y -# CONFIG_USER_DEFINED_LD is not set -CONFIG_IMAGE_LOAD_ADDRESS=0x80100000 -CONFIG_IMAGE_MAX_LENGTH=0x2000000 -CONFIG_HEAP_SIZE=1 -CONFIG_STACK_SIZE=0x400 -# end of Linker Options -# end of Build setup - -# -# Component Configuration -# - -# -# Freertos Uart Drivers -# -CONFIG_FREERTOS_USE_UART=y -# end of Freertos Uart Drivers - -# -# Freertos Pwm Drivers -# -# CONFIG_FREERTOS_USE_PWM is not set -# end of Freertos Pwm Drivers - -# -# Freertos Qspi Drivers -# -# CONFIG_FREERTOS_USE_QSPI is not set -# end of Freertos Qspi Drivers - -# -# Freertos Wdt Drivers -# -# CONFIG_FREERTOS_USE_WDT is not set -# end of Freertos Wdt Drivers - -# -# Freertos Eth Drivers -# -# CONFIG_FREERTOS_USE_XMAC is not set -# CONFIG_FREERTOS_USE_GMAC is not set -# end of Freertos Eth Drivers - -# -# Freertos Spim Drivers -# -# CONFIG_FREERTOS_USE_FSPIM is not set -# end of Freertos Spim Drivers - -# -# Freertos DMA Drivers -# -# CONFIG_FREERTOS_USE_FDDMA is not set -# CONFIG_FREERTOS_USE_FGDMA is not set -# end of Freertos DMA Drivers - -# -# Freertos Adc Drivers -# -CONFIG_FREERTOS_USE_ADC=y -# end of Freertos Adc Drivers - -# -# Freertos Can Drivers -# -# CONFIG_FREERTOS_USE_CAN is not set -# end of Freertos Can Drivers - -# -# Freertos I2c Drivers -# -# CONFIG_FREERTOS_USE_I2C is not set -# end of Freertos I2c Drivers - -# -# Freertos Mio Drivers -# -# CONFIG_FREERTOS_USE_MIO is not set -# end of Freertos Mio Drivers - -# -# Freertos Timer Drivers -# -# CONFIG_FREERTOS_USE_TIMER is not set -# end of Freertos Timer Drivers - -# -# Freertos Media Drivers -# -# CONFIG_FREERTOS_USE_MEDIA is not set -# end of Freertos Media Drivers - -# -# Freertos I2s Drivers -# -# CONFIG_FREERTOS_USE_I2S is not set -# end of Freertos I2s Drivers -# end of Component Configuration - -# -# Third-party configuration -# -# CONFIG_USE_LWIP is not set -CONFIG_USE_LETTER_SHELL=y - -# -# Letter Shell Configuration -# -CONFIG_LS_PL011_UART=y -CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y -# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set -# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set -# end of Letter Shell Configuration - -# CONFIG_USE_AMP is not set -# CONFIG_USE_YMODEM is not set -# CONFIG_USE_SFUD is not set -CONFIG_USE_BACKTRACE=y -# CONFIG_USE_FATFS_0_1_4 is not set -# CONFIG_USE_TLSF is not set -# CONFIG_USE_SPIFFS is not set -# CONFIG_USE_LITTLE_FS is not set -# CONFIG_USE_LVGL is not set -# CONFIG_USE_FREEMODBUS is not set -# CONFIG_USE_CHERRY_USB is not set -# CONFIG_USE_FSL_SDMMC is not set -# CONFIG_USE_FSL_WIFI is not set -# end of Third-party configuration - -# -# FreeRTOS Kernel Configuration -# -CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y -CONFIG_FREERTOS_HZ=1000 -CONFIG_FREERTOS_MAX_PRIORITIES=32 -CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 -CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y -CONFIG_FREERTOS_USE_TRACE_FACILITY=y -CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y -# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set -CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 -CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 -# CONFIG_FREERTOS_USE_POSIX is not set -# end of FreeRTOS Kernel Configuration diff --git a/example/peripheral/adc/figs/create.png b/example/peripheral/adc/figs/create.png deleted file mode 100644 index c56a4d3485e446b5d02ca919c4bfc2b8ca151364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22708 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

-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 d>A`*fxq(-GkM>+@u=^zlAfJ!e4(jpLgQz@bM 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 -#include "adc_example.h" - -int main(void) -{ - BaseType_t ret; - - /* test adc 0 */ - ret = FFreeRTOSAdcCreate(0); - if (ret != pdPASS) - { - goto FAIL_EXIT; - } - - ret = LSUserShellTask() ; - if (ret != pdPASS) - { - goto FAIL_EXIT; - } - - vTaskStartScheduler(); /* 启动任务,开启调度 */ - while (1); /* 正常不会执行到这里 */ - -FAIL_EXIT: - printf("failed 0x%x. \r\n", ret); - return 0; -} diff --git a/example/peripheral/adc/makefile b/example/peripheral/adc/makefile deleted file mode 100644 index 92052c59..00000000 --- a/example/peripheral/adc/makefile +++ /dev/null @@ -1,32 +0,0 @@ - -PROJECT_DIR = $(CURDIR) -FREERTOS_SDK_DIR = $(CURDIR)/../../.. - - -# # 设置启动镜像名 -BOOT_IMG_NAME ?= freertos - -USER_CSRC := main.c -USER_CSRC += $(wildcard src/*.c) -USER_CSRC += $(wildcard ../common/*.c) - -USER_ASRC := -USER_CXXSRC := - -USER_INCLUDE := $(PROJECT_DIR) \ - $(PROJECT_DIR)/inc \ - - -include $(FREERTOS_SDK_DIR)/tools/makeall.mk - -USR_BOOT_DIR ?= /mnt/d/tftpboot - - -image: - $(MAKE) clean - $(MAKE) all -j - @cp ./$(IMAGE_OUT_NAME).elf $(USR_BOOT_DIR)/freertos.elf -ifdef CONFIG_OUTPUT_BINARY - @cp ./$(IMAGE_OUT_NAME).bin $(USR_BOOT_DIR)/freertos.bin -endif - @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l \ No newline at end of file diff --git a/example/peripheral/adc/sdkconfig b/example/peripheral/adc/sdkconfig deleted file mode 100644 index 08c35c94..00000000 --- a/example/peripheral/adc/sdkconfig +++ /dev/null @@ -1,361 +0,0 @@ -CONFIG_USE_FREERTOS=y - -# -# Arch configuration -# -CONFIG_TARGET_ARMv8=y -CONFIG_ARCH_NAME="armv8" - -# -# Arm architecture configuration -# -CONFIG_ARCH_ARMV8_AARCH64=y -# CONFIG_ARCH_ARMV8_AARCH32 is not set - -# -# Compiler configuration -# -CONFIG_ARM_GCC_SELECT=y -# CONFIG_ARM_CLANG_SELECT is not set -CONFIG_TOOLCHAIN_NAME="gcc" -CONFIG_TARGET_ARMV8_AARCH64=y -CONFIG_ARCH_EXECUTION_STATE="aarch64" -CONFIG_ARM_NEON=y -CONFIG_ARM_CRC=y -CONFIG_ARM_CRYPTO=y -CONFIG_ARM_FLOAT_POINT=y -# CONFIG_GCC_CODE_MODEL_TINY is not set -CONFIG_GCC_CODE_MODEL_SMALL=y -# CONFIG_GCC_CODE_MODEL_LARGE is not set -# end of Compiler configuration - -# CONFIG_BOOT_WITH_FLUSH_CACHE is not set -# CONFIG_MMU_DEBUG_PRINTS is not set -# end of Arm architecture configuration - -CONFIG_MMU_PAGE_SIZE=0x1000 -CONFIG_MAX_XLAT_TABLES=256 -# end of Arch configuration - -# -# Soc configuration -# -# CONFIG_TARGET_PHYTIUMPI is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y -# CONFIG_TARGET_E2000S is not set -# CONFIG_TARGET_FT2004 is not set -# CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_PD2308 is not set -CONFIG_SOC_NAME="e2000" -CONFIG_TARGET_TYPE_NAME="d" -CONFIG_SOC_CORE_NUM=2 -CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 -CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 -CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 -CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 -CONFIG_TARGET_E2000=y -CONFIG_DEFAULT_DEBUG_PRINT_UART1=y -# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set -# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set -# end of Soc configuration - -# -# Board Configuration -# -CONFIG_E2000D_DEMO_BOARD=y -CONFIG_BOARD_NAME="demo" - -# -# IO mux configuration when board start up -# -# CONFIG_USE_SPI_IOPAD is not set -# CONFIG_USE_GPIO_IOPAD is not set -# CONFIG_USE_CAN_IOPAD is not set -# CONFIG_USE_QSPI_IOPAD is not set -# CONFIG_USE_PWM_IOPAD is not set -# CONFIG_USE_ADC_IOPAD is not set -# CONFIG_USE_MIO_IOPAD is not set -# CONFIG_USE_TACHO_IOPAD is not set -# CONFIG_USE_UART_IOPAD is not set -# CONFIG_USE_THIRD_PARTY_IOPAD is not set -# end of IO mux configuration when board start up - -# CONFIG_CUS_DEMO_BOARD is not set - -# -# Build project name -# -CONFIG_TARGET_NAME="adc" -# end of Build project name -# end of Board Configuration - -# -# Sdk common configuration -# -CONFIG_ELOG_LINE_BUF_SIZE=0x100 -# CONFIG_LOG_VERBOS is not set -# CONFIG_LOG_DEBUG is not set -CONFIG_LOG_INFO=y -# CONFIG_LOG_WARN is not set -# CONFIG_LOG_ERROR is not set -# CONFIG_LOG_NONE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_LOG_DISPALY_CORE_NUM is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set -# end of Sdk common configuration - -# -# Image information configuration -# -# CONFIG_IMAGE_INFO is not set -# end of Image information configuration - -# -# Drivers configuration -# -CONFIG_USE_IOMUX=y -# CONFIG_ENABLE_IOCTRL is not set -CONFIG_ENABLE_IOPAD=y -# CONFIG_USE_SPI is not set -# CONFIG_USE_QSPI is not set -CONFIG_USE_SERIAL=y - -# -# Usart Configuration -# -CONFIG_ENABLE_Pl011_UART=y -# end of Usart Configuration - -# CONFIG_USE_GPIO is not set -# CONFIG_USE_ETH is not set -# CONFIG_USE_CAN is not set -# CONFIG_USE_I2C is not set -# CONFIG_USE_TIMER is not set -# CONFIG_USE_MIO is not set -# CONFIG_USE_SDMMC is not set -# CONFIG_USE_PCIE is not set -# CONFIG_USE_WDT is not set -# CONFIG_USE_DMA is not set -# CONFIG_USE_NAND is not set -# CONFIG_USE_RTC is not set -# CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set -CONFIG_USE_ADC=y - -# -# ADC Configuration -# -CONFIG_USE_FADC=y -# end of ADC Configuration - -# CONFIG_USE_PWM is not set -# CONFIG_USE_IPC is not set -# CONFIG_USE_MEDIA is not set -# CONFIG_USE_SCMI_MHU is not set -# CONFIG_USE_I2S is not set -# CONFIG_USE_I3C is not set -# end of Drivers configuration - -# -# Build setup -# -CONFIG_CHECK_DEPS=y -CONFIG_OUTPUT_BINARY=y - -# -# Optimization options -# -# CONFIG_DEBUG_NOOPT is not set -# CONFIG_DEBUG_CUSTOMOPT is not set -CONFIG_DEBUG_FULLOPT=y -CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y -CONFIG_DEBUG_LINK_MAP=y -# CONFIG_CCACHE is not set -# CONFIG_ARCH_COVERAGE is not set -# CONFIG_LTO_FULL is not set -# end of Optimization options - -# -# Debug options -# -# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set -# CONFIG_WALL_WARNING_ERROR is not set -# CONFIG_STRICT_PROTOTYPES is not set -# CONFIG_DEBUG_SYMBOLS is not set -# CONFIG_FRAME_POINTER is not set -# CONFIG_OUTPUT_ASM_DIS is not set -# CONFIG_ENABLE_WSHADOW is not set -# CONFIG_ENABLE_WUNDEF is not set -CONFIG_DOWNGRADE_DIAG_WARNING=y -# end of Debug options - -# -# Lib -# -CONFIG_USE_COMPILE_CHAIN=y -# CONFIG_USE_NEWLIB is not set -# CONFIG_USE_USER_DEFINED is not set -# end of Lib - -# CONFIG_ENABLE_CXX is not set - -# -# Linker Options -# -CONFIG_DEFAULT_LINKER_SCRIPT=y -# CONFIG_USER_DEFINED_LD is not set -CONFIG_IMAGE_LOAD_ADDRESS=0x80100000 -CONFIG_IMAGE_MAX_LENGTH=0x2000000 -CONFIG_HEAP_SIZE=1 -CONFIG_STACK_SIZE=0x400 -# end of Linker Options -# end of Build setup - -# -# Component Configuration -# - -# -# Freertos Uart Drivers -# -CONFIG_FREERTOS_USE_UART=y -# end of Freertos Uart Drivers - -# -# Freertos Pwm Drivers -# -# CONFIG_FREERTOS_USE_PWM is not set -# end of Freertos Pwm Drivers - -# -# Freertos Qspi Drivers -# -# CONFIG_FREERTOS_USE_QSPI is not set -# end of Freertos Qspi Drivers - -# -# Freertos Wdt Drivers -# -# CONFIG_FREERTOS_USE_WDT is not set -# end of Freertos Wdt Drivers - -# -# Freertos Eth Drivers -# -# CONFIG_FREERTOS_USE_XMAC is not set -# CONFIG_FREERTOS_USE_GMAC is not set -# end of Freertos Eth Drivers - -# -# Freertos Spim Drivers -# -# CONFIG_FREERTOS_USE_FSPIM is not set -# end of Freertos Spim Drivers - -# -# Freertos DMA Drivers -# -# CONFIG_FREERTOS_USE_FDDMA is not set -# CONFIG_FREERTOS_USE_FGDMA is not set -# end of Freertos DMA Drivers - -# -# Freertos Adc Drivers -# -CONFIG_FREERTOS_USE_ADC=y -# end of Freertos Adc Drivers - -# -# Freertos Can Drivers -# -# CONFIG_FREERTOS_USE_CAN is not set -# end of Freertos Can Drivers - -# -# Freertos I2c Drivers -# -# CONFIG_FREERTOS_USE_I2C is not set -# end of Freertos I2c Drivers - -# -# Freertos Mio Drivers -# -# CONFIG_FREERTOS_USE_MIO is not set -# end of Freertos Mio Drivers - -# -# Freertos Timer Drivers -# -# CONFIG_FREERTOS_USE_TIMER is not set -# end of Freertos Timer Drivers - -# -# Freertos Media Drivers -# -# CONFIG_FREERTOS_USE_MEDIA is not set -# end of Freertos Media Drivers - -# -# Freertos I2s Drivers -# -# CONFIG_FREERTOS_USE_I2S is not set -# end of Freertos I2s Drivers -# end of Component Configuration - -# -# Third-party configuration -# -# CONFIG_USE_LWIP is not set -CONFIG_USE_LETTER_SHELL=y - -# -# Letter Shell Configuration -# -CONFIG_LS_PL011_UART=y -CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y -# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set -# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set -# end of Letter Shell Configuration - -# CONFIG_USE_AMP is not set -# CONFIG_USE_YMODEM is not set -# CONFIG_USE_SFUD is not set -CONFIG_USE_BACKTRACE=y -# CONFIG_USE_FATFS_0_1_4 is not set -# CONFIG_USE_TLSF is not set -# CONFIG_USE_SPIFFS is not set -# CONFIG_USE_LITTLE_FS is not set -# CONFIG_USE_LVGL is not set -# CONFIG_USE_FREEMODBUS is not set -# CONFIG_USE_CHERRY_USB is not set -# CONFIG_USE_FSL_SDMMC is not set -# CONFIG_USE_FSL_WIFI is not set -# end of Third-party configuration - -# -# FreeRTOS Kernel Configuration -# -CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y -CONFIG_FREERTOS_HZ=1000 -CONFIG_FREERTOS_MAX_PRIORITIES=32 -CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 -CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y -CONFIG_FREERTOS_USE_TRACE_FACILITY=y -CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y -# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set -CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 -CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 -# CONFIG_FREERTOS_USE_POSIX is not set -# end of FreeRTOS Kernel Configuration diff --git a/example/peripheral/adc/sdkconfig.h b/example/peripheral/adc/sdkconfig.h deleted file mode 100644 index 3cb9cffa..00000000 --- a/example/peripheral/adc/sdkconfig.h +++ /dev/null @@ -1,323 +0,0 @@ -#ifndef SDK_CONFIG_H__ -#define SDK_CONFIG_H__ - -#define CONFIG_USE_FREERTOS - -/* Arch configuration */ - -#define CONFIG_TARGET_ARMv8 -#define CONFIG_ARCH_NAME "armv8" - -/* Arm architecture configuration */ - -#define CONFIG_ARCH_ARMV8_AARCH64 -/* CONFIG_ARCH_ARMV8_AARCH32 is not set */ - -/* Compiler configuration */ - -#define CONFIG_ARM_GCC_SELECT -/* CONFIG_ARM_CLANG_SELECT is not set */ -#define CONFIG_TOOLCHAIN_NAME "gcc" -#define CONFIG_TARGET_ARMV8_AARCH64 -#define CONFIG_ARCH_EXECUTION_STATE "aarch64" -#define CONFIG_ARM_NEON -#define CONFIG_ARM_CRC -#define CONFIG_ARM_CRYPTO -#define CONFIG_ARM_FLOAT_POINT -/* CONFIG_GCC_CODE_MODEL_TINY is not set */ -#define CONFIG_GCC_CODE_MODEL_SMALL -/* CONFIG_GCC_CODE_MODEL_LARGE is not set */ -/* end of Compiler configuration */ -/* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ -/* CONFIG_MMU_DEBUG_PRINTS is not set */ -/* end of Arm architecture configuration */ -#define CONFIG_MMU_PAGE_SIZE 0x1000 -#define CONFIG_MAX_XLAT_TABLES 256 -/* end of Arch configuration */ - -/* Soc configuration */ - -/* CONFIG_TARGET_PHYTIUMPI is not set */ -/* CONFIG_TARGET_E2000Q is not set */ -#define CONFIG_TARGET_E2000D -/* CONFIG_TARGET_E2000S is not set */ -/* CONFIG_TARGET_FT2004 is not set */ -/* CONFIG_TARGET_D2000 is not set */ -/* CONFIG_TARGET_PD2308 is not set */ -#define CONFIG_SOC_NAME "e2000" -#define CONFIG_TARGET_TYPE_NAME "d" -#define CONFIG_SOC_CORE_NUM 2 -#define CONFIG_F32BIT_MEMORY_ADDRESS 0x80000000 -#define CONFIG_F32BIT_MEMORY_LENGTH 0x80000000 -#define CONFIG_F64BIT_MEMORY_ADDRESS 0x2000000000 -#define CONFIG_F64BIT_MEMORY_LENGTH 0x800000000 -#define CONFIG_TARGET_E2000 -#define CONFIG_DEFAULT_DEBUG_PRINT_UART1 -/* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ -/* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ -/* end of Soc configuration */ - -/* Board Configuration */ - -#define CONFIG_E2000D_DEMO_BOARD -#define CONFIG_BOARD_NAME "demo" - -/* IO mux configuration when board start up */ - -/* CONFIG_USE_SPI_IOPAD is not set */ -/* CONFIG_USE_GPIO_IOPAD is not set */ -/* CONFIG_USE_CAN_IOPAD is not set */ -/* CONFIG_USE_QSPI_IOPAD is not set */ -/* CONFIG_USE_PWM_IOPAD is not set */ -/* CONFIG_USE_ADC_IOPAD is not set */ -/* CONFIG_USE_MIO_IOPAD is not set */ -/* CONFIG_USE_TACHO_IOPAD is not set */ -/* CONFIG_USE_UART_IOPAD is not set */ -/* CONFIG_USE_THIRD_PARTY_IOPAD is not set */ -/* end of IO mux configuration when board start up */ -/* CONFIG_CUS_DEMO_BOARD is not set */ - -/* Build project name */ - -#define CONFIG_TARGET_NAME "adc" -/* end of Build project name */ -/* end of Board Configuration */ - -/* Sdk common configuration */ - -#define CONFIG_ELOG_LINE_BUF_SIZE 0x100 -/* CONFIG_LOG_VERBOS is not set */ -/* CONFIG_LOG_DEBUG is not set */ -#define CONFIG_LOG_INFO -/* CONFIG_LOG_WARN is not set */ -/* CONFIG_LOG_ERROR is not set */ -/* CONFIG_LOG_NONE is not set */ -/* CONFIG_LOG_EXTRA_INFO is not set */ -/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ -/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ -/* end of Sdk common configuration */ - -/* Image information configuration */ - -/* CONFIG_IMAGE_INFO is not set */ -/* end of Image information configuration */ - -/* Drivers configuration */ - -#define CONFIG_USE_IOMUX -/* CONFIG_ENABLE_IOCTRL is not set */ -#define CONFIG_ENABLE_IOPAD -/* CONFIG_USE_SPI is not set */ -/* CONFIG_USE_QSPI is not set */ -#define CONFIG_USE_SERIAL - -/* Usart Configuration */ - -#define CONFIG_ENABLE_Pl011_UART -/* end of Usart Configuration */ -/* CONFIG_USE_GPIO is not set */ -/* CONFIG_USE_ETH is not set */ -/* CONFIG_USE_CAN is not set */ -/* CONFIG_USE_I2C is not set */ -/* CONFIG_USE_TIMER is not set */ -/* CONFIG_USE_MIO is not set */ -/* CONFIG_USE_SDMMC is not set */ -/* CONFIG_USE_PCIE is not set */ -/* CONFIG_USE_WDT is not set */ -/* CONFIG_USE_DMA is not set */ -/* CONFIG_USE_NAND is not set */ -/* CONFIG_USE_RTC is not set */ -/* CONFIG_USE_SATA is not set */ -/* CONFIG_USE_USB is not set */ -#define CONFIG_USE_ADC - -/* ADC Configuration */ - -#define CONFIG_USE_FADC -/* end of ADC Configuration */ -/* CONFIG_USE_PWM is not set */ -/* CONFIG_USE_IPC is not set */ -/* CONFIG_USE_MEDIA is not set */ -/* CONFIG_USE_SCMI_MHU is not set */ -/* CONFIG_USE_I2S is not set */ -/* CONFIG_USE_I3C is not set */ -/* end of Drivers configuration */ - -/* Build setup */ - -#define CONFIG_CHECK_DEPS -#define CONFIG_OUTPUT_BINARY - -/* Optimization options */ - -/* CONFIG_DEBUG_NOOPT is not set */ -/* CONFIG_DEBUG_CUSTOMOPT is not set */ -#define CONFIG_DEBUG_FULLOPT -#define CONFIG_DEBUG_OPT_UNUSED_SECTIONS -#define CONFIG_DEBUG_LINK_MAP -/* CONFIG_CCACHE is not set */ -/* CONFIG_ARCH_COVERAGE is not set */ -/* CONFIG_LTO_FULL is not set */ -/* end of Optimization options */ - -/* Debug options */ - -/* CONFIG_DEBUG_ENABLE_ALL_WARNING is not set */ -/* CONFIG_WALL_WARNING_ERROR is not set */ -/* CONFIG_STRICT_PROTOTYPES is not set */ -/* CONFIG_DEBUG_SYMBOLS is not set */ -/* CONFIG_FRAME_POINTER is not set */ -/* CONFIG_OUTPUT_ASM_DIS is not set */ -/* CONFIG_ENABLE_WSHADOW is not set */ -/* CONFIG_ENABLE_WUNDEF is not set */ -#define CONFIG_DOWNGRADE_DIAG_WARNING -/* end of Debug options */ - -/* Lib */ - -#define CONFIG_USE_COMPILE_CHAIN -/* CONFIG_USE_NEWLIB is not set */ -/* CONFIG_USE_USER_DEFINED is not set */ -/* end of Lib */ -/* CONFIG_ENABLE_CXX is not set */ - -/* Linker Options */ - -#define CONFIG_DEFAULT_LINKER_SCRIPT -/* CONFIG_USER_DEFINED_LD is not set */ -#define CONFIG_IMAGE_LOAD_ADDRESS 0x80100000 -#define CONFIG_IMAGE_MAX_LENGTH 0x2000000 -#define CONFIG_HEAP_SIZE 1 -#define CONFIG_STACK_SIZE 0x400 -/* end of Linker Options */ -/* end of Build setup */ - -/* Component Configuration */ - -/* Freertos Uart Drivers */ - -#define CONFIG_FREERTOS_USE_UART -/* end of Freertos Uart Drivers */ - -/* Freertos Pwm Drivers */ - -/* CONFIG_FREERTOS_USE_PWM is not set */ -/* end of Freertos Pwm Drivers */ - -/* Freertos Qspi Drivers */ - -/* CONFIG_FREERTOS_USE_QSPI is not set */ -/* end of Freertos Qspi Drivers */ - -/* Freertos Wdt Drivers */ - -/* CONFIG_FREERTOS_USE_WDT is not set */ -/* end of Freertos Wdt Drivers */ - -/* Freertos Eth Drivers */ - -/* CONFIG_FREERTOS_USE_XMAC is not set */ -/* CONFIG_FREERTOS_USE_GMAC is not set */ -/* end of Freertos Eth Drivers */ - -/* Freertos Spim Drivers */ - -/* CONFIG_FREERTOS_USE_FSPIM is not set */ -/* end of Freertos Spim Drivers */ - -/* Freertos DMA Drivers */ - -/* CONFIG_FREERTOS_USE_FDDMA is not set */ -/* CONFIG_FREERTOS_USE_FGDMA is not set */ -/* end of Freertos DMA Drivers */ - -/* Freertos Adc Drivers */ - -#define CONFIG_FREERTOS_USE_ADC -/* end of Freertos Adc Drivers */ - -/* Freertos Can Drivers */ - -/* CONFIG_FREERTOS_USE_CAN is not set */ -/* end of Freertos Can Drivers */ - -/* Freertos I2c Drivers */ - -/* CONFIG_FREERTOS_USE_I2C is not set */ -/* end of Freertos I2c Drivers */ - -/* Freertos Mio Drivers */ - -/* CONFIG_FREERTOS_USE_MIO is not set */ -/* end of Freertos Mio Drivers */ - -/* Freertos Timer Drivers */ - -/* CONFIG_FREERTOS_USE_TIMER is not set */ -/* end of Freertos Timer Drivers */ - -/* Freertos Media Drivers */ - -/* CONFIG_FREERTOS_USE_MEDIA is not set */ -/* end of Freertos Media Drivers */ - -/* Freertos I2s Drivers */ - -/* CONFIG_FREERTOS_USE_I2S is not set */ -/* end of Freertos I2s Drivers */ -/* end of Component Configuration */ - -/* Third-party configuration */ - -/* CONFIG_USE_LWIP is not set */ -#define CONFIG_USE_LETTER_SHELL - -/* Letter Shell Configuration */ - -#define CONFIG_LS_PL011_UART -#define CONFIG_DEFAULT_LETTER_SHELL_USE_UART1 -/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */ -/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */ -/* end of Letter Shell Configuration */ -/* CONFIG_USE_AMP is not set */ -/* CONFIG_USE_YMODEM is not set */ -/* CONFIG_USE_SFUD is not set */ -#define CONFIG_USE_BACKTRACE -/* CONFIG_USE_FATFS_0_1_4 is not set */ -/* CONFIG_USE_TLSF is not set */ -/* CONFIG_USE_SPIFFS is not set */ -/* CONFIG_USE_LITTLE_FS is not set */ -/* CONFIG_USE_LVGL is not set */ -/* CONFIG_USE_FREEMODBUS is not set */ -/* CONFIG_USE_CHERRY_USB is not set */ -/* CONFIG_USE_FSL_SDMMC is not set */ -/* CONFIG_USE_FSL_WIFI is not set */ -/* end of Third-party configuration */ - -/* FreeRTOS Kernel Configuration */ - -#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER -#define CONFIG_FREERTOS_HZ 1000 -#define CONFIG_FREERTOS_MAX_PRIORITIES 32 -#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13 -#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11 -#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 -#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024 -#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32 -#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 -#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 -#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 -#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 -#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS -#define CONFIG_FREERTOS_USE_TRACE_FACILITY -#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS -/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */ -#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240 -#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1 -/* CONFIG_FREERTOS_USE_POSIX is not set */ -/* end of FreeRTOS Kernel Configuration */ - -#endif diff --git a/example/peripheral/adc/src/adc_example.c b/example/peripheral/adc/src/adc_example.c deleted file mode 100644 index ce1e2fef..00000000 --- a/example/peripheral/adc/src/adc_example.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: adc_example.c - * Date: 2022-07-11 11:32:48 - * LastEditTime: 2022-07-11 11:32:48 - * Description: This file is for ADC task implementations - * - * Modify History: - * Ver Who Date Changes - * ----- ------ -------- -------------------------------------- - * 1.0 wangxiaodong 2022/08/31 first commit - */ -#include -#include "FreeRTOSConfig.h" -#include "FreeRTOS.h" -#include "task.h" -#include "timers.h" -#include "fadc.h" -#include "fadc_os.h" -#include "fcpu_info.h" -#include "fio_mux.h" -#include "fassert.h" - -/* The periods assigned to the one-shot timers. */ -#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 60000UL )) - -/* adc read period */ -#define ADC_READ_PERIOD ( pdMS_TO_TICKS( 2000UL )) - -/* adc channel use, 0/1 */ -#define ADC_CHANNEL_USE FADC_CHANNEL_0 - -/* TESTC board, ADC_VREF = 1.25V */ -#define REF_VOL 1.25 - -/* test task number */ -#define TEST_TASK_NUM 1 - -static xSemaphoreHandle xCountingSemaphore; - -static xTaskHandle read_handle; -static TimerHandle_t xOneShotTimer; - -static FFreeRTOSAdc *os_adc_ctrl_p; - -static void FFreeRTOSAdcDelete(FFreeRTOSAdc *os_adc_p); - -static void FFreeRTOSAdcIntrSet(FFreeRTOSAdc *os_adc_p) -{ - u32 cpu_id; - GetCpuId(&cpu_id); - - FAdcCtrl *instance_p = &os_adc_p->adc_ctrl; - InterruptSetTargetCpus(instance_p->config.irq_num, cpu_id); - InterruptSetPriority(instance_p->config.irq_num, instance_p->config.irq_prority); - InterruptInstall(instance_p->config.irq_num, FAdcIntrHandler, instance_p, "adc"); - InterruptUmask(instance_p->config.irq_num); -} - -static void FFreeRTOSAdcInitTask(void *pvParameters) -{ - /* The adc_id to use is passed in via the parameter. - Cast this to a adc_id pointer. */ - u32 adc_id = (u32)(uintptr)pvParameters; - - FError ret = FADC_SUCCESS; - /*init iomux*/ - FIOMuxInit(); - /* set channel 0 and 1 iopad*/ -#if defined(CONFIG_TARGET_E2000) - FIOPadSetAdcMux(adc_id, ADC_CHANNEL_USE); -#endif - - /* init adc controller */ - os_adc_ctrl_p = FFreeRTOSAdcInit(adc_id); - if (os_adc_ctrl_p == NULL) - { - printf("FFreeRTOSAdcInit failed!!!\n"); - goto adc_init_exit; - } - - /* init adc interrupt handler */ - FFreeRTOSAdcIntrSet(os_adc_ctrl_p); - - /* adc config */ - FFreeRTOSAdcConfig adc_config; - memset(&adc_config, 0, sizeof(adc_config)); - - adc_config.channel = ADC_CHANNEL_USE; - - /* adc controller configuration*/ - adc_config.convert_config.convert_mode = FADC_SINGLE_CONVERT; - adc_config.convert_config.channel_mode = FADC_MULTI_CHANNEL; - adc_config.convert_config.convert_interval = 10; - adc_config.convert_config.clk_div = 8; - - /* adc channel threshold configuration*/ - adc_config.threshold_config.high_threshold = 1000; - adc_config.threshold_config.low_threshold = 0; - - /* adc channel interrupt configuration*/ - adc_config.event_type = FADC_INTR_EVENT_COVFIN; - - ret = FFreeRTOSAdcSet(os_adc_ctrl_p, &adc_config); - if (FADC_SUCCESS != ret) - { - printf("FFreeRTOSAdcSet failed !!!\n"); - goto adc_init_exit; - } - - printf("FFreeRTOSAdcInitTask execute success !!!\r\n"); - - for (int i = 0; i < TEST_TASK_NUM; i++) - { - xSemaphoreGive(xCountingSemaphore); - } - -adc_init_exit: - vTaskDelete(NULL); -} - -static void FFreeRTOSAdcReadTask(void *pvParameters) -{ - xSemaphoreTake(xCountingSemaphore, portMAX_DELAY); - - FError ret = FADC_SUCCESS; - float val = 0.0; - u16 adc_val = 0; - u16 count = 0; - - /* As per most tasks, this task is implemented in an infinite loop. */ - for (;;) - { - ret = FFreeRTOSAdcRead(os_adc_ctrl_p, ADC_CHANNEL_USE, &adc_val); - if (ret == FADC_SUCCESS) - { - val = (float)adc_val; - val = val * REF_VOL / 1024; /* 2^10 */ - printf("adc read success, count=%d, reg_value=%d, value=%f.\r\n", count, adc_val, val); - } - else - { - printf("adc read failed.\r\n"); - } - count++; - - vTaskDelay(ADC_READ_PERIOD); - } -} - -static void prvOneShotTimerCallback(TimerHandle_t xTimer) -{ - /* Output a string to show the time at which the callback was executed. */ - printf("One-shot timer callback executing, will delete FFreeRTOSAdcReadTask.\r\n"); - - FFreeRTOSAdcDelete(os_adc_ctrl_p); -} - -/* create adc test, id is adc module number */ -BaseType_t FFreeRTOSAdcCreate(u32 id) -{ - FASSERT(id < FADC_NUM); - BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */ - BaseType_t timer_started = pdPASS; - - xCountingSemaphore = xSemaphoreCreateCounting(TEST_TASK_NUM, 0); - if (xCountingSemaphore == NULL) - { - printf("FFreeRTOSAdcCreate xCountingSemaphore create failed.\r\n"); - return pdFAIL; - } - /* enter critical region */ - taskENTER_CRITICAL(); - /* adc init task */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSAdcInitTask, /* 任务入口函数 */ - (const char *)"FFreeRTOSAdcInitTask",/* 任务名字 */ - (uint16_t)1024, /* 任务栈大小 */ - (void *)(uintptr)id,/* 任务入口函数参数 */ - (UBaseType_t)1, /* 任务的优先级 */ - NULL); /* 任务控制 */ - - /* 读adc任务 */ - xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSAdcReadTask, /* 任务入口函数 */ - (const char *)"FFreeRTOSAdcReadTask",/* 任务名字 */ - (uint16_t)1024, /* 任务栈大小 */ - NULL,/* 任务入口函数参数 */ - (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ - (TaskHandle_t *)&read_handle); /* 任务控制 */ - - /* Create the one shot software timer, storing the handle to the created - software timer in xOneShotTimer. */ - xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */ - ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */ - pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */ - 0, /* This example use the timer id. */ - prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */ - - /* Check the timers were created. */ - if (xOneShotTimer != NULL) - { - /* Start the software timers, using a block time of 0 (no block time). - The scheduler has not been started yet so any block time specified here - would be ignored anyway. */ - timer_started = xTimerStart(xOneShotTimer, 0); - - /* The implementation of xTimerStart() uses the timer command queue, and - xTimerStart() will fail if the timer command queue gets full. The timer - service task does not get created until the scheduler is started, so all - commands sent to the command queue will stay in the queue until after - the scheduler has been started. Check both calls to xTimerStart() - passed. */ - if (timer_started != pdPASS) - { - vPrintf("CreateSoftwareTimerTasks xTimerStart failed. \r\n"); - } - } - else - { - vPrintf("CreateSoftwareTimerTasks xTimerCreate failed. \r\n"); - } - - /* exit critical region */ - taskEXIT_CRITICAL(); - - return xReturn; -} - -static void FFreeRTOSAdcDelete(FFreeRTOSAdc *os_adc_p) -{ - BaseType_t xReturn = pdPASS; - - /* deinit adc controller */ - FFreeRTOSAdcDeinit(os_adc_p); - FIOMuxDeInit();/*deinit iomux */ - - if (read_handle) - { - vTaskDelete(read_handle); - vPrintf("Delete FFreeRTOSAdcReadTask success.\r\n"); - } - - /* delete count sem */ - vSemaphoreDelete(xCountingSemaphore); - - /* delete timer */ - xReturn = xTimerDelete(xOneShotTimer, 0); - if (xReturn != pdPASS) - { - vPrintf("Delete OneShot Software Timer failed.\r\n"); - } - else - { - vPrintf("Delete OneShot Software Timer success.\r\n"); - } - -} \ No newline at end of file diff --git a/example/peripheral/pwm/inc/pwm_example.h b/example/peripheral/pwm/inc/pwm_example.h index cbbffd33..2cddea93 100644 --- a/example/peripheral/pwm/inc/pwm_example.h +++ b/example/peripheral/pwm/inc/pwm_example.h @@ -26,6 +26,7 @@ #ifndef PWM_EXAMPLE_H #define PWM_EXAMPLE_H #include "FreeRTOS.h" +#include "sdkconfig.h" #ifdef __cplusplus extern "C" @@ -33,13 +34,17 @@ extern "C" #endif /************************** Constant Definitions *****************************/ -#if defined(CONFIG_E2000Q_DEMO_BOARD)||defined(CONFIG_E2000D_DEMO_BOARD) +#if defined(CONFIG_FIREFLY_DEMO_BOARD) +#define PWM_TEST_ID FPWM3_ID +#define PWM_TEST_CHANNEL FPWM_CHANNEL_0 +#elif defined(CONFIG_PD2308_DEMO_BOARD) +#define PWM_TEST_ID FPWM0_ID +#define PWM_TEST_CHANNEL FPWM_CHANNEL_0 +#else #define PWM_TEST_ID FPWM2_ID #define PWM_TEST_CHANNEL FPWM_CHANNEL_1 -#elif defined(CONFIG_FIREFLY_DEMO_BOARD) -#define PWM_TEST_ID FPWM4_ID -#define PWM_TEST_CHANNEL FPWM_CHANNEL_0 #endif + /* pwm test */ BaseType_t FFreeRTOSPwmDeadBandTaskCreate(); BaseType_t FFreeRTOSPwmSingleChannelTaskCreate(); diff --git a/example/peripheral/qspi/src/qspi_flash_indirect_example.c b/example/peripheral/qspi/src/qspi_flash_indirect_example.c index e51142d3..87e5cc6f 100644 --- a/example/peripheral/qspi/src/qspi_flash_indirect_example.c +++ b/example/peripheral/qspi/src/qspi_flash_indirect_example.c @@ -13,14 +13,15 @@ * * FilePath: qspi_flash_indirect_example.c * Date: 2023-11-20 11:32:48 - * LastEditTime: 2023-11-20 11:32:48 + * LastEditTime: 2024-7-10 11:32:48 * Description: This file is an example function implementation for the indirect mode of qspi flash * * Modify History: * Ver   Who         Date          Changes * ----- ------      --------     -------------------------------------- * 1.0 huangjin 2023/11/16 first release - * 1.1 zhangyan 2024/4/18 add no letter shell mode, adapt to auto-test system + * 1.1 zhangyan 2024/4/18 add no letter shell mode, adapt to auto-test system + * 1.2 huangjin 2024/7/10 modify QspiRead function */ #include #include "FreeRTOSConfig.h" @@ -49,9 +50,6 @@ static u8 rd_buf[DAT_LENGTH] = {0}; static u8 wr_buf[DAT_LENGTH] = {0}; -/* test task number */ -#define READ_WRITE_TASK_NUM 3 - enum { QSPI_TEST_SUCCESS = 0, @@ -91,9 +89,14 @@ static FError QspiRead(void) FError ret = FQSPI_SUCCESS; const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS); int i = 0; + u32 read_index = 0; /* Read norflash data */ - ret = FQspiFlashPortReadData(&os_qspi_ctrl_p->qspi_ctrl, FQSPI_FLASH_CMD_READ, flash_wr_start, rd_buf, DAT_LENGTH); + while (read_index < DAT_LENGTH) + { + ret = FQspiFlashPortReadData(&os_qspi_ctrl_p->qspi_ctrl, FQSPI_FLASH_CMD_READ, flash_wr_start+read_index, rd_buf+read_index, FQSPI_CMD_PORT_CMD_RW_MAX); + read_index += FQSPI_CMD_PORT_CMD_RW_MAX; + } if (FQSPI_SUCCESS != ret) { FQSPI_ERROR("QspiRead FFreeRTOSQspiTransfer failed, return value: 0x%x\r\n", ret); @@ -141,8 +144,8 @@ static FError QspiWrite(void) /* Write norflash data */ while (array_index < sizeof(wr_buf)) { - u8 data_to_write[4] = {0}; - for (i = 0; i < 4; i++) + u8 data_to_write[FQSPI_CMD_PORT_CMD_RW_MAX] = {0}; + for (i = 0; i < FQSPI_CMD_PORT_CMD_RW_MAX; i++) { if (array_index < sizeof(wr_buf)) { @@ -154,13 +157,13 @@ static FError QspiWrite(void) break; } } - ret = FQspiFlashPortWriteData(&os_qspi_ctrl_p->qspi_ctrl, FQSPI_FLASH_CMD_PP, write_addr, (u8 *)(data_to_write), 4); + ret = FQspiFlashPortWriteData(&os_qspi_ctrl_p->qspi_ctrl, FQSPI_FLASH_CMD_PP, write_addr, (u8 *)(data_to_write), FQSPI_CMD_PORT_CMD_RW_MAX); if (FQSPI_SUCCESS != ret) { FQSPI_ERROR("Failed to erase sectors. return value: 0x%x\r\n", ret); return ret; } - write_addr += 4; + write_addr += FQSPI_CMD_PORT_CMD_RW_MAX; } return ret; diff --git a/example/peripheral/sdif/src/sdif_emmc_read_write.c b/example/peripheral/sdif/src/sdif_emmc_read_write.c index c02363c5..20302670 100644 --- a/example/peripheral/sdif/src/sdif_emmc_read_write.c +++ b/example/peripheral/sdif/src/sdif_emmc_read_write.c @@ -212,7 +212,7 @@ int FFreeRTOSEmmcWriteRead(void) s_inst_config.endianMode = kSDMMCHOST_EndianModeLittle; s_inst_config.maxTransSize = SD_MAX_RW_BLK * SD_BLOCK_SIZE; s_inst_config.defBlockSize = SD_BLOCK_SIZE; - s_inst_config.cardClock = MMC_CLOCK_52MHZ; + s_inst_config.cardClock = FSDIF_CLK_SPEED_100_MHZ; /* 创建主要操作任务 */ xReturn = xTaskCreate((TaskFunction_t)SdifEmmcReadWriteTask, diff --git a/example/storage/fatfs/src/fatfs_examples.c b/example/storage/fatfs/src/fatfs_examples.c index 04d290a3..4f758406 100755 --- a/example/storage/fatfs/src/fatfs_examples.c +++ b/example/storage/fatfs/src/fatfs_examples.c @@ -232,75 +232,6 @@ static FRESULT FatfsBasicTest(void) return fr; } - - /* speed test will test diskio and destory file system */ -static FRESULT FatfsSpeedTest(void) -{ - FRESULT fr = FR_OK; -#ifdef CONFIG_FATFS_RAM_DISK - printf("\r\n========Speed test for RAM Disk=================\r\n"); - fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_RAM_DISK], RAM_WR_SECTOR); - if (FR_OK != fr) - { - FF_ERROR("RAM disk speed test failed, err = %d.", fr); - return fr; - } -#endif - -#ifdef CONFIG_FATFS_SDMMC_FSDIF_TF - printf("\r\n========Speed test for TF Card=================\r\n"); - fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_TF_CARD], WR_SECTOR); - if (FR_OK != fr) - { - FF_ERROR("TF speed test failed, err = %d.", fr); - return fr; - } -#endif - -#ifdef CONFIG_FATFS_SDMMC_FSDIF_EMMC - printf("\r\n========Speed test for eMMC=================\r\n"); - fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_EMMC_CARD], WR_SECTOR); - if (FR_OK != fr) - { - FF_ERROR("SDIO speed test failed, err = %d.", fr); - return fr; - } -#endif - -#ifdef CONFIG_FATFS_USB - printf("\r\n========Speed test for USB Disk=================\r\n"); - fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_USB_DISK], WR_SECTOR); - printf("Speed test for USB end\r\n"); - if (FR_OK != fr) - { - FF_ERROR("USB speed test failed, err = %d.", fr); - return fr; - } - -#endif - -#ifdef CONFIG_FATFS_FSATA - printf("\r\n========Speed test for SATA Disk=================\r\n"); - fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_SATA_DISK], WR_SECTOR); - if (FR_OK != fr) - { - FF_ERROR("SATA speed test failed, err = %d.", fr); - return fr; - } -#endif - -#ifdef CONFIG_FATFS_FSATA_PCIE - printf("\r\n========Speed test for SATA PCIE Disk=================\r\n"); - fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_SATA_PCIE_DISK], WR_SECTOR); - if (FR_OK != fr) - { - FF_ERROR("SATA PCIE speed test failed, err = %d.", fr); - return fr; - } -#endif - return fr; -} - /* cycle test will test diskio and destory file system */ static FRESULT FatfsCycleTest(void) { @@ -385,14 +316,6 @@ void FatfsRunTask(void) } #endif -#ifdef CONFIG_FATFS_SPEED_TEST - fret = FatfsSpeedTest(); - if(FR_OK != fret) - { - goto task_ret; - } -#endif - #ifdef CONFIG_FATFS_CYCLE_TEST fret = FatfsCycleTest(); if(FR_OK != fret) diff --git a/install.py b/install.py index 9fe47b95..b2fa330a 100755 --- a/install.py +++ b/install.py @@ -11,9 +11,9 @@ linux_aarch64 = 1 windows_x64 = 2 # STEP 1: Check environment -if (platform.system() == 'Linux' ) and (platform.processor() == 'x86_64'): +if (platform.system() == 'Linux' ) and (platform.machine() == 'x86_64'): install_platform = linux_x86 -elif (platform.system() == 'Linux' ) and (platform.processor() == 'aarch64'): # Arm64 computer +elif (platform.system() == 'Linux' ) and (platform.machine() == 'aarch64'): # Arm64 computer install_platform = linux_aarch64 elif (platform.system() == 'Windows') and (platform.machine() == 'AMD64'): install_platform = windows_x64 @@ -36,7 +36,7 @@ freertos_sdk_path = install_path print("Standalone SDK at {}".format(freertos_sdk_path)) # Add standalone sdk -standalone_sdk_v="0f31ca6f028af44e999e986157388f655d1f528e" +standalone_sdk_v="3174e23d3c319a5685910febb17ca87237ca7ceb" if (install_platform == windows_x64): standalone_path=freertos_sdk_path + '\\standalone' else: diff --git a/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.c b/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.c index bb1e6ba9..803089f6 100644 --- a/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.c +++ b/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.c @@ -110,7 +110,7 @@ status_t SDMMC_OSAEventCreate(void *eventHandle) * param event event flags. * retval kStatus_Fail or kStatus_Success. */ -status_t SDMMC_OSAEventWait(void *eventHandle, uint32_t eventType, uint32_t timeoutMilliseconds, uint32_t *event) +status_t SDMMC_OSAEventWait(void *eventHandle, uint32_t eventType, uint32_t timeoutMilliseconds, uint32_t *event, uint32_t flags) { assert(eventHandle != NULL); @@ -128,9 +128,19 @@ status_t SDMMC_OSAEventWait(void *eventHandle, uint32_t eventType, uint32_t time if (KOSA_StatusSuccess == status) { (void)SDMMC_OSAEventGet(eventHandle, eventType, event); - if ((*event & eventType) != 0U) + if (flags & SDMMC_OSA_EVENT_FLAG_AND) { - return kStatus_Success; + if (*event == eventType) + { + return kStatus_Success; + } + } + else + { + if ((*event & eventType) != 0U) + { + return kStatus_Success; + } } } } diff --git a/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.h b/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.h index b22bf368..b3d85d54 100644 --- a/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.h +++ b/third-party/fsl_sdmmc/osa/fsl_sdmmc_osa.h @@ -30,6 +30,9 @@ #define SDMMC_OSA_EVENT_CARD_INSERTED (1UL << 8U) #define SDMMC_OSA_EVENT_CARD_REMOVED (1UL << 9U) +#define SDMMC_OSA_EVENT_FLAG_AND (1UL << 0U) +#define SDMMC_OSA_EVENT_FLAG_OR (1UL << 1U) + /*!@brief enable semphore by default */ #ifndef SDMMC_OSA_POLLING_EVENT_BY_SEMPHORE #define SDMMC_OSA_POLLING_EVENT_BY_SEMPHORE 1 @@ -104,7 +107,7 @@ status_t SDMMC_OSAEventCreate(void *eventHandle); * @param event event flags. * @retval kStatus_Fail or kStatus_Success. */ -status_t SDMMC_OSAEventWait(void *eventHandle, uint32_t eventType, uint32_t timeoutMilliseconds, uint32_t *event); +status_t SDMMC_OSAEventWait(void *eventHandle, uint32_t eventType, uint32_t timeoutMilliseconds, uint32_t *event, uint32_t flags); /*! * @brief set event. -- Gitee