diff --git a/bsp/hc32/README.md b/bsp/hc32/README.md
index ec27b5fdfd..36bd07cdbd 100644
--- a/bsp/hc32/README.md
+++ b/bsp/hc32/README.md
@@ -17,7 +17,7 @@ HC32 系列 BSP 目前支持情况如下表所示:
| **BSP 使用教程** | **简介** |
|:-------------------- |:------------------------------------------------- |
| [外设驱动使用教程](docs/HC32系列BSP外设驱动使用教程.md) | 讲解 BSP 上更多外设驱动的使用方法 |
-| [外设驱动介绍与应用](docs/HC32系列驱动介绍.md) | 讲解 HC32 系列 BSP 驱动的支持情况,以及如何利用驱动框架开发应用程序 |
+| [外设驱动介绍](docs/HC32系列驱动介绍.md) | 讲解 HC32 系列 BSP 驱动的支持情况,以及如何利用驱动框架开发应用程序 |
| **BSP 制作与提交** | **简介** |
| [BSP 制作教程](docs/HC32系列BSP制作教程.md) | 讲解 HC32 系列 BSP 的制作方法 |
diff --git a/bsp/hc32/docs/HC32系列BSP制作教程.md b/bsp/hc32/docs/HC32系列BSP制作教程.md
index f6ea04998b..b2e3c10216 100644
--- a/bsp/hc32/docs/HC32系列BSP制作教程.md
+++ b/bsp/hc32/docs/HC32系列BSP制作教程.md
@@ -1,2 +1,251 @@
# HC32 系列 BSP 制作教程
+为了让广大开发者更好、更方便地使用 BSP 进行开发,XHSC 开发团队重新整理了现有的 HC32 系列的 BSP,推出了新的 BSP 框架。新的 BSP 框架在易用性、移植便利性、驱动完整性、代码规范性等方面都有较大提升,在新的 BSP 框架下进行开发,可以大大提高应用的开发效率。
+
+在新的 BSP 文件夹中将固件库、外设驱动等可以被多个 BSP 引用的代码文件统一存放在 Library 文件夹中,通过在特定 BSP 中引用这些文件的方式,来包含 BSP 中所需的库文件或者驱动文件。这种方式不仅大大提高了代码复用率,降低了 BSP 的维护成本,而且可以更方便地给开发者提供更丰富的驱动文件,让开发者可以更容易地找到自己需要的资源。
+
+新 BSP 框架的主要特性如下:
+
+- 提供多系列 BSP 模板,大大降低新 BSP 的添加难度;
+- 每个 BSP 都配有齐全的驱动文件,开发者可以方便地使用所有驱动;
+
+## 1. BSP 框架介绍
+
+BSP 框架结构如下图所示:
+
+
+
+每一个 HC32 系列的 BSP 由两部分组成,分别是通用库和特定开发板 BSP,下面的表格以 F4 系列 BSP 为例介绍这两个部分:
+
+| 项目 | 文件夹 | 说明 |
+| -------------- | ------------------------ | :----------------------------------------------------- |
+| 通用库 | hc32/libraries | 用于存放 DDL 库以及基于 DDL 库的多系列通用外设驱动文件 |
+| 特定开发板 BSP | hc32/ev_hc32f4a0_lqfp176 | 在 BSP 模板的基础上修改而成 |
+
+## 2. 知识准备
+
+制作一个 BSP 的过程就是构建一个新系统的过程,因此想要制作出好用的 BSP,要对 RT-Thread 系统的构建过程有一定了解,需要的知识准备如下所示:
+
+- 掌握 HC32 系列 BSP 的使用方法
+ 了解 BSP 的使用方法,可以阅读 [BSP 说明文档](../README.md) 中使用教程表格内的文档。了解外设驱动的添加方法可以参考《外设驱动添加指南》。
+- 了解 Scons 工程构建方法
+ RT-Thread 使用 Scons 作为系统的构建工具,因此了解 Scons 的常用命令对制作新 BSP 是基本要求。
+- 了解设备驱动框架
+ 在 RT-Thread 系统中,应用程序通过设备驱动框架来操作硬件,因此了解设备驱动框架,对添加 BSP 驱动是很重要的。
+- 了解 Kconfig 语法
+ RT-Thread 系统通过 menuconfig 的方式进行配置,而 menuconfig 中的选项是由 Kconfig 文件决定的,因此想要对 RT-Thread 系统进行配置,需要对 kconfig 语法有一定了解。
+
+## 3. BSP 制作方法
+
+本节以制作 XHSC 官方评估板 `ev_hc32f4a0_lqfp176` 的 BSP 为例,讲解如何为一个新的开发板添加 BSP。
+
+BSP 的制作过程分为如下五个步骤:
+
+1. 复制 BSP 通用模板
+2. BOARD 配置
+3. 修改 BSP 中的 Kconfig 文件
+4. 修改构建工程相关文件
+5. 重新生成工程
+
+在接下来的章节中将会详细介绍这五个步骤,帮助开发者快速创建所需要的 BSP。
+
+### 3.1 复制 BSP 通用模板
+
+制作新 BSP 的第一步是复制一份同系列的 BSP 作为基础,通过对 BSP 的修改来获得新 BSP。
+
+本次示例所用的 F4A0 的 BSP 文件结构如下:
+
+
+
+本次制作的 BSP 为 HC32F4A0 系列,因此复制 `ev_hc32f4a0_lqfp176` 文件夹,并将该文件夹的名称改为所要制作的 BSP 的名字,此处不变。
+
+在BSP 的制作过程中,需修改 board 文件夹内的配置文件,下表总结了 board 文件夹中需要修改的内容:
+
+| 项目 | 需要修改的内容说明 |
+| ------------------------- | ----------------------------------------- |
+| linker_scripts (文件夹) | BSP 特定的链接脚本 |
+| board.c/h | 系统时钟、GPIO 初始化函数、芯片存储器大小 |
+| board_config.c/h | 外设管脚配置及初始化 |
+| Kconfig | 芯片型号、系列、外设资源 |
+| SConscript | 芯片启动文件、目标芯片型号 |
+
+### 3.2 修改 board 配置
+
+#### 3.2.1 配置外设管脚
+
+在 **board_config.c** 文件中实现了外设管脚相关配置,下图展示了串口 USART 的管脚配置,示例函数 `rt_hw_board_uart_init` 中配置了 USART1 和 USART6 的管脚。其他外设的管脚配置参照该函数。
+
+
+
+在 **board_config.h** 中实现了管脚的宏定义,可根据实际使用的管脚进行修改。
+
+
+
+#### 3.2.2 配置系统时钟
+
+在 **board.c** 文件中存放了函数 `SystemClock_Config()` ,该函数负责初始化系统时钟。如下图所示,示例中时钟为240Mhz,可根据实际使用进行修改。
+
+
+
+#### 3.2.3 配置 FLASH 和 RAM
+
+在 **board.h** 文件中配置了 FLASH 和 RAM 的相关参数,这个文件中需要修改的是 `HC32_FLASH_SIZE` 和 `HC32_SRAM_SIZE` 这两个宏控制的参数。如下图所示:
+
+
+
+#### 3.2.4 配置堆内存
+
+通常情况下,系统 RAM 中的一部分内存空间会被用作堆内存。下面代码的作用是,在不同编译器下规定堆内存的起始地址 **HEAP_BEGIN** 和结束地址 **HEAP_END**。这里 **HEAP_BEGIN** 和 **HEAP_END** 的值需要和后面 [3.4.1 修改链接脚本](#341-修改链接脚本) 章节所修改的配置相一致。
+
+在某些系列的芯片中,芯片 RAM 可能分布在不连续的多块内.存区域上。此时堆内存的位置可以和系统内存在同一片连续的内存区域,也可以存放在一片独立的内存区域中。
+
+
+
+#### 3.2.5 配置中断
+
+在 **irq_config.h** 文件中,统一分配了外设使用的中断号。HC32F4A0 系列的中断可灵活配置,用户可根据实际使用情况,灵活调整外设中断号。如下图所示:
+
+
+
+### 3.3 修改 Kconfig 选项
+
+在本小节中修改 `board/Kconfig` 文件的内容有如下两点:
+
+- 芯片型号和系列
+- BSP 上的外设支持选项
+
+芯片型号和系列的修改如下表所示:
+
+| 宏定义 | 意义 | 格式 |
+| ----------------- | -------- | ----------------- |
+| SOC_HC32F4A0SI | 芯片型号 | SOC_HC32xxx |
+| SOC_SERIES_HC32F4 | 芯片系列 | SOC_SERIES_HC32xx |
+
+关于 BSP 上的外设支持选项,一个初次提交的 BSP 仅仅需要支持 GPIO 驱动和串口驱动即可,因此在配置选项中只需保留这两个驱动配置项,如下图所示:
+
+
+
+### 3.4 修改工程构建相关文件
+
+接下来需要修改用于构建工程相关的文件。
+
+#### 3.4.1 修改链接脚本
+
+**linker_scripts** 链接文件如下图所示:
+
+
+
+下面以 MDK 使用的链接脚本 link.sct 为例,展示如何修改链接脚本:
+
+
+
+本次制作 BSP 使用的芯片为 HC32F4A0,FLASH 为 2M,因此修改 LR_IROM1 和 ER_IROM1 的参数为 0x00200000。RAM 的大小为512k, 因此修改 RW_IRAM1 的参数为 0x00080000, 起始地址为0x1FFE0000。这样的修改方式在一般的应用下就够用了,后续如果有特殊要求,则需要按照链接脚本的语法来根据实际需求修改。
+
+其他两个链接脚本的文件分别为 iar 使用的 link.icf 和 gcc 编译器使用的 link.ld,修改的方式也是类似的,如下图所示:
+
+- link.icf 修改内容
+
+ 
+- link.ld 修改内容
+
+ 
+
+#### 3.4.2 修改构建脚本
+
+**SConscript** 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。
+
+在这一步中需要修改芯片型号以及芯片启动文件的地址,修改内容如下图所示:
+
+
+
+注意:若复制的是同系列的BSP来进行修改,这个文件可不做修改。
+
+#### 3.4.2 修改工程模板
+
+**template** 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式。MDK5/IAR 的工程模板文件,如下图所示:
+
+
+
+下面以 MDK5 模板的修改为例,介绍如何修改模板配置:
+
+
+
+修改程序下载方式:
+
+
+
+### 3.5 重新生成工程
+
+重新生成工程需要使用 Env 工具。
+
+#### 3.5.1 重新生成 rtconfig.h 文件
+
+在 Env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示:
+
+
+
+
+
+#### 3.5.2 重新生成 MDK/IAR 工程
+
+下面以重新生成 MDK 工程为例,介绍如何重新生成 BSP 工程。
+
+使用 env 工具输入命令 `scons --target=mdk5` 重新生成工程,如下图所示:
+
+
+
+重新生成工程成功:
+
+
+
+到这一步为止,新的 BSP 就可以使用了。
+
+接下来我们可以分别使用命令 `scons --target=mdk4` , `scons --target=iar` ,`scons --target=eclipse`,来更新 MDK4 , IAR 和 GCC 的工程,使得该 BSP 变成一个完整的,可以提交到 GitHub 的 BSP (MDK4工程的制作为可选)。
+
+## 4. 规范
+
+本章节介绍 RT-Thread HC32 系列 BSP 制作与提交时应当遵守的规范 。开发人员在 BSP 制作完成后,可以根据本规范提出的检查点对制作的 BSP 进行检查,确保 BSP 在提交前有较高的质量 。
+
+### 4.1 BSP 制作规范
+
+HC32 BSP 的制作规范主要分为 3 个方面:工程配置,ENV 配置和 IDE 配置。在已有的 HC32 系列 BSP 的模板中,已经根据下列规范对模板进行配置。在制作新 BSP 的过程中,拷贝模板进行修改时,需要注意的是不要修改这些默认的配置。BSP 制作完成后,需要对新制作的 BSP 进行功能测试,功能正常后再进行代码提交。
+
+下面将详细介绍 BSP 的制作规范。
+
+#### 4.1.1 工程配置
+
+- 遵从RT-Thread 编码规范,代码注释风格统一
+- main 函数功能保持一致
+ - 如果有 LED 的话,main 函数里 **只放一个** LED 1HZ 闪烁的程序
+- 在 `rt_hw_board_init` 中需要完成堆的初始化:调用 `rt_system_heap_init`
+- 默认只初始化 GPIO 驱动和 FinSH 对应的串口驱动,不使用 DMA
+- 当使能板载外设驱动时,应做到不需要修改代码就能编译下载使用
+- 提交前应检查 GCC/MDK/IAR 三种编译器直接编译或者重新生成后编译是否成功
+- 使用 `dist` 命令对 BSP 进行发布,检查使用 `dist` 命令生成的工程是否可以正常使用
+
+#### 4.1.2 ENV 配置
+
+- 系统心跳统一设置为 1000(宏:RT_TICK_PER_SECOND)
+- BSP 中需要打开调试选项中的断言(宏:RT_DEBUG)
+- 系统空闲线程栈大小统一设置为 256(宏:IDLE_THREAD_STACK_SIZE)
+- 开启组件自动初始化(宏:RT_USING_COMPONENTS_INIT)
+- 需要开启 user main 选项(宏:RT_USING_USER_MAIN)
+- FinSH 默认只使用 MSH 模式(宏:FINSH_USING_MSH_ONLY)
+
+#### 4.1.3 IDE 配置
+
+- 使能下载代码后自动运行
+- 使能 C99 支持
+- 使能 One ELF Section per Function(MDK)
+- MDK/IAR 生成的临时文件分别放到build下的 MDK/IAR 文件夹下
+- MDK/GCC/IAR 生成 bin 文件名字统一成 rtthread.bin
+
+### 4.2 BSP 提交规范
+
+- 提交前请认真修改 BSP 的 README.md 文件,README.md 文件的外设支持表单只填写 BSP 支持的外设,可参考其他 BSP 填写。查看文档[《HC32系列驱动介绍》](./HC32系列驱动介绍.md)了解驱动分类。
+- 提交 BSP 分为 2 个阶段提交:
+ - 第一阶段:基础 BSP 包括串口驱动和 GPIO 驱动,能运行 FinSH 控制台。完成 MDK4、MDK5 、IAR 和 GCC 编译器支持,如果芯片不支持某款编译器(比如MDK4)可以不用做。 BSP 的 README.md 文件需要填写第二阶段要完成的驱动。
+ - 第二阶段:完成板载外设驱动支持,所有板载外设使用 menuconfig 配置后就能直接使用。若开发板没有板载外设,则此阶段可以不用完成。不同的驱动要分开提交,方便 review 和合并。
+- 只提交 BSP 必要的文件,删除无关的中间文件,能够提交的文件请对照其他 BSP。
+- 提交前要对 BSP 进行编译测试,确保在不同编译器下编译正常。
+- 提交前要对 BSP 进行功能测试,确保 BSP 的在提交前符合工程配置章节中的要求。
diff --git a/bsp/hc32/docs/HC32系列BSP外设驱动使用教程.md b/bsp/hc32/docs/HC32系列BSP外设驱动使用教程.md
index 7a6e5bc255..aaf6aae21e 100644
--- a/bsp/hc32/docs/HC32系列BSP外设驱动使用教程.md
+++ b/bsp/hc32/docs/HC32系列BSP外设驱动使用教程.md
@@ -1 +1,11 @@
# HC32系列BSP外设驱动使用教程
+
+## 简介
+
+本文档是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。
+
+主要包括以下内容:
+
+1. 如何使用开发板上更多的板载资源
+2. 如何使用更多的片上资源
+3. 如何添加更多片上资源选项
diff --git a/bsp/hc32/docs/HC32系列BSP外设驱动添加指南.md b/bsp/hc32/docs/HC32系列BSP外设驱动添加指南.md
new file mode 100644
index 0000000000..43f9faa055
--- /dev/null
+++ b/bsp/hc32/docs/HC32系列BSP外设驱动添加指南.md
@@ -0,0 +1,2 @@
+# HC32系列驱动介绍
+
diff --git a/bsp/hc32/docs/HC32系列驱动介绍.md b/bsp/hc32/docs/HC32系列驱动介绍.md
index 43f9faa055..6cfc4b402c 100644
--- a/bsp/hc32/docs/HC32系列驱动介绍.md
+++ b/bsp/hc32/docs/HC32系列驱动介绍.md
@@ -1,2 +1,64 @@
# HC32系列驱动介绍
+在 RT-Thread 实时操作系统中,各种各样的设备驱动是通过一套 I/O 设备管理框架来管理的。设备管理框架给上层应用提供了一套标准的设备操作 API,开发者通过调用这些标准设备操作 API,可以高效地完成和底层硬件外设的交互。设备管理框架的结构如下图所示:
+
+
+
+使用 I/O 设备管理框架开发应用程序,有如下优点:
+
+- 使用同一套标准的 API 开发应用程序,使应用程序具有更好的移植性
+- 底层驱动的升级和修改不会影响到上层代码
+- 驱动和应用程序相互独立,方便多个开发者协同开发
+
+## 1. 驱动分类介绍
+
+本小节介绍 BSP 提供的不同类别驱动的概念,对一个 BSP 而言,有如下三类驱动:
+
+- **片上外设驱动**:指 MCU 芯片上的外设,例如硬件定时器、ADC等
+- **板载外设驱动**:指 MCU 之外,开发板上外设,例如 TF 卡、以太网等
+- **扩展模块驱动**:指可以通过扩展接口或者杜邦线连接的开发板的模块
+
+这三种外设的示意图如下所示:
+
+
+
+## 2. 外设驱动的使用方法
+
+当前 RT-Thread 提供的驱动库已经支持 HC32 多个系列的 BSP。点击下表中的驱动名称,即可跳转到对应驱动框架的介绍文档。开发者可以通过阅读相关资料,了解如何在应用开发中通过设备驱动框架来使用这些外设驱动。
+
+### 2.1 片上外设
+
+| 序号 | 驱动 | 简介 |
+| ---- | ------------------------------------------------------------ | ------------------------------ |
+| 1 | [GPIO](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/pin/pin) | 操作 GPIO 管脚 |
+| 2 | [UART](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v1/uart) | 通过串口收发数据 |
+| 3 | [UART V2](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/uart/uart_v2/uart) | 通过串口收发数据 |
+| 4 | [SOFT I2C](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c) | 通过软件 I2C 收发数据 |
+| 5 | [I2C](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c) | 通过硬件 I2C 收发数据 |
+| 6 | [SPI](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi) | 通过 SPI 收发数据 |
+| 7 | [QSPI](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi?id=配置-qspi-设备) | 通过 SPI(1、2、4线) 收发数据 |
+| 8 | [ADC](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc) | 测量管脚上的模拟量 |
+| 9 | [DAC](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/dac/dac) | 通过管脚输出模拟量 |
+| 10 | [CAN](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/can/can) | 通过 CAN 收发数据 |
+| 11 | [HWTIMER](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/hwtimer/hwtimer) | 通过硬件定时器计时 |
+| 12 | [PWM](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/pwm/pwm) | 在特定的管脚输出 PWM 波形 |
+| 13 | [RTC](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/rtc/rtc) | 设置和读取时间 |
+| 14 | [WDT](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/watchdog/watchdog) | 看门狗驱动 |
+| 15 | [CRYPTO](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto) | 对数据进行加解密操作 |
+| 16 | [PULSE ENCODER](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/pulse_encoder/pulse_encoder) | 脉冲编码器驱动 |
+
+### 2.2 板载外设
+
+| 序号 | 驱动 | 简介 |
+| ---- | ------- | --------------------------------------- |
+| 1 | SD | 适用于 SDIO 接口的 SD(TF) 卡 |
+| 2 | ETH | 以太网 |
+| 3 | USB | USB |
+| 4 | NAND | NAND |
+| 4 | SDRAM | SDRAM |
+
+### 2.3 扩展模块
+
+### 2.4 驱动示例代码
+
+在 RT-Thread 的 `examples\test` 目录下,有 RT-Thread 提供的基于不同外设驱动的示例代码。在 env 工具中开启 BSP 中要测试的驱动,并将 `examples\test` 中对应的驱动框架测试文件加入工程,即可快速测试 BSP 中提供的驱动。
\ No newline at end of file
diff --git a/bsp/hc32/docs/figures/Kconfig.jpg b/bsp/hc32/docs/figures/Kconfig.jpg
new file mode 100644
index 0000000000..2ceda6e34f
Binary files /dev/null and b/bsp/hc32/docs/figures/Kconfig.jpg differ
diff --git a/bsp/hc32/docs/figures/SConscript.jpg b/bsp/hc32/docs/figures/SConscript.jpg
new file mode 100644
index 0000000000..f490ec0248
Binary files /dev/null and b/bsp/hc32/docs/figures/SConscript.jpg differ
diff --git a/bsp/hc32/docs/figures/bsp_template.jpg b/bsp/hc32/docs/figures/bsp_template.jpg
new file mode 100644
index 0000000000..ed17982afa
Binary files /dev/null and b/bsp/hc32/docs/figures/bsp_template.jpg differ
diff --git a/bsp/hc32/docs/figures/clock_config.jpg b/bsp/hc32/docs/figures/clock_config.jpg
new file mode 100644
index 0000000000..c51327649c
Binary files /dev/null and b/bsp/hc32/docs/figures/clock_config.jpg differ
diff --git a/bsp/hc32/docs/figures/dma_config.jpg b/bsp/hc32/docs/figures/dma_config.jpg
new file mode 100644
index 0000000000..ba883445fb
Binary files /dev/null and b/bsp/hc32/docs/figures/dma_config.jpg differ
diff --git a/bsp/hc32/docs/figures/flash.jpg b/bsp/hc32/docs/figures/flash.jpg
new file mode 100644
index 0000000000..90fff11b2e
Binary files /dev/null and b/bsp/hc32/docs/figures/flash.jpg differ
diff --git a/bsp/hc32/docs/figures/frame.jpg b/bsp/hc32/docs/figures/frame.jpg
new file mode 100644
index 0000000000..8b8866f316
Binary files /dev/null and b/bsp/hc32/docs/figures/frame.jpg differ
diff --git a/bsp/hc32/docs/figures/heap.jpg b/bsp/hc32/docs/figures/heap.jpg
new file mode 100644
index 0000000000..79020d25a3
Binary files /dev/null and b/bsp/hc32/docs/figures/heap.jpg differ
diff --git a/bsp/hc32/docs/figures/irq_config.jpg b/bsp/hc32/docs/figures/irq_config.jpg
new file mode 100644
index 0000000000..e1d8da7593
Binary files /dev/null and b/bsp/hc32/docs/figures/irq_config.jpg differ
diff --git a/bsp/hc32/docs/figures/link_icf.jpg b/bsp/hc32/docs/figures/link_icf.jpg
new file mode 100644
index 0000000000..61f79d9a01
Binary files /dev/null and b/bsp/hc32/docs/figures/link_icf.jpg differ
diff --git a/bsp/hc32/docs/figures/link_ld.jpg b/bsp/hc32/docs/figures/link_ld.jpg
new file mode 100644
index 0000000000..92c77d5074
Binary files /dev/null and b/bsp/hc32/docs/figures/link_ld.jpg differ
diff --git a/bsp/hc32/docs/figures/link_sct.jpg b/bsp/hc32/docs/figures/link_sct.jpg
new file mode 100644
index 0000000000..2978855de4
Binary files /dev/null and b/bsp/hc32/docs/figures/link_sct.jpg differ
diff --git a/bsp/hc32/docs/figures/linker_scripts.jpg b/bsp/hc32/docs/figures/linker_scripts.jpg
new file mode 100644
index 0000000000..668d4bc793
Binary files /dev/null and b/bsp/hc32/docs/figures/linker_scripts.jpg differ
diff --git a/bsp/hc32/docs/figures/menuconfig_1.jpg b/bsp/hc32/docs/figures/menuconfig_1.jpg
new file mode 100644
index 0000000000..5053d711c9
Binary files /dev/null and b/bsp/hc32/docs/figures/menuconfig_1.jpg differ
diff --git a/bsp/hc32/docs/figures/menuconfig_2.jpg b/bsp/hc32/docs/figures/menuconfig_2.jpg
new file mode 100644
index 0000000000..bd144342dc
Binary files /dev/null and b/bsp/hc32/docs/figures/menuconfig_2.jpg differ
diff --git a/bsp/hc32/docs/figures/menuconfig_3.jpg b/bsp/hc32/docs/figures/menuconfig_3.jpg
new file mode 100644
index 0000000000..a962ce783d
Binary files /dev/null and b/bsp/hc32/docs/figures/menuconfig_3.jpg differ
diff --git a/bsp/hc32/docs/figures/menuconfig_4.jpg b/bsp/hc32/docs/figures/menuconfig_4.jpg
new file mode 100644
index 0000000000..501db7004d
Binary files /dev/null and b/bsp/hc32/docs/figures/menuconfig_4.jpg differ
diff --git a/bsp/hc32/docs/figures/peripheral.png b/bsp/hc32/docs/figures/peripheral.png
new file mode 100644
index 0000000000..a69e1ad3b4
Binary files /dev/null and b/bsp/hc32/docs/figures/peripheral.png differ
diff --git a/bsp/hc32/docs/figures/pin_config.jpg b/bsp/hc32/docs/figures/pin_config.jpg
new file mode 100644
index 0000000000..dd18f464a5
Binary files /dev/null and b/bsp/hc32/docs/figures/pin_config.jpg differ
diff --git a/bsp/hc32/docs/figures/pin_define.jpg b/bsp/hc32/docs/figures/pin_define.jpg
new file mode 100644
index 0000000000..3e33cd578e
Binary files /dev/null and b/bsp/hc32/docs/figures/pin_define.jpg differ
diff --git a/bsp/hc32/docs/figures/rt_device.png b/bsp/hc32/docs/figures/rt_device.png
new file mode 100644
index 0000000000..fba8a6e0ba
Binary files /dev/null and b/bsp/hc32/docs/figures/rt_device.png differ
diff --git a/bsp/hc32/docs/figures/template.jpg b/bsp/hc32/docs/figures/template.jpg
new file mode 100644
index 0000000000..2d33b53fd5
Binary files /dev/null and b/bsp/hc32/docs/figures/template.jpg differ
diff --git a/bsp/hc32/docs/figures/template_mdk1.jpg b/bsp/hc32/docs/figures/template_mdk1.jpg
new file mode 100644
index 0000000000..ef67e15b63
Binary files /dev/null and b/bsp/hc32/docs/figures/template_mdk1.jpg differ
diff --git a/bsp/hc32/docs/figures/template_mdk2.jpg b/bsp/hc32/docs/figures/template_mdk2.jpg
new file mode 100644
index 0000000000..e8575c9200
Binary files /dev/null and b/bsp/hc32/docs/figures/template_mdk2.jpg differ
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/.config b/bsp/hc32/ev_hc32f460_lqfp100_v2/.config
index 38c3aacfd2..f1ed75e0c2 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/.config
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/.config
@@ -9,8 +9,10 @@
CONFIG_RT_NAME_MAX=8
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
# CONFIG_RT_USING_SMART is not set
+# CONFIG_RT_USING_NANO is not set
# CONFIG_RT_USING_AMP is not set
# CONFIG_RT_USING_SMP is not set
+CONFIG_RT_CPUS_NR=1
CONFIG_RT_ALIGN_SIZE=8
# CONFIG_RT_THREAD_PRIORITY_8 is not set
CONFIG_RT_THREAD_PRIORITY_32=y
@@ -20,6 +22,7 @@ CONFIG_RT_TICK_PER_SECOND=1000
CONFIG_RT_USING_OVERFLOW_CHECK=y
CONFIG_RT_USING_HOOK=y
CONFIG_RT_HOOK_USING_FUNC_PTR=y
+# CONFIG_RT_USING_HOOKLIST is not set
CONFIG_RT_USING_IDLE_HOOK=y
CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
CONFIG_IDLE_THREAD_STACK_SIZE=256
@@ -35,7 +38,7 @@ CONFIG_IDLE_THREAD_STACK_SIZE=256
CONFIG_RT_USING_DEBUG=y
CONFIG_RT_DEBUGING_COLOR=y
CONFIG_RT_DEBUGING_CONTEXT=y
-# CONFIG_RT_DEBUGING_INIT is not set
+# CONFIG_RT_DEBUGING_AUTO_INIT is not set
#
# Inter-Thread communication
@@ -63,19 +66,15 @@ CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y
# CONFIG_RT_USING_MEMTRACE is not set
# CONFIG_RT_USING_HEAP_ISR is not set
CONFIG_RT_USING_HEAP=y
-
-#
-# Kernel Device Object
-#
CONFIG_RT_USING_DEVICE=y
# CONFIG_RT_USING_DEVICE_OPS is not set
-# CONFIG_RT_USING_DM is not set
# CONFIG_RT_USING_INTERRUPT_INFO is not set
CONFIG_RT_USING_CONSOLE=y
CONFIG_RT_CONSOLEBUF_SIZE=128
CONFIG_RT_CONSOLE_DEVICE_NAME="uart4"
-CONFIG_RT_VER_NUM=0x50002
+CONFIG_RT_VER_NUM=0x50100
# CONFIG_RT_USING_STDC_ATOMIC is not set
+CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32
# CONFIG_RT_USING_CACHE is not set
CONFIG_RT_USING_HW_ATOMIC=y
# CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set
@@ -119,6 +118,7 @@ CONFIG_FINSH_USING_OPTION_COMPLETION=y
#
# Device Drivers
#
+# CONFIG_RT_USING_DM is not set
CONFIG_RT_USING_DEVICE_IPC=y
CONFIG_RT_UNAMED_PIPE_NUMBER=64
CONFIG_RT_USING_SYSTEM_WORKQUEUE=y
@@ -127,7 +127,7 @@ CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23
CONFIG_RT_USING_SERIAL=y
CONFIG_RT_USING_SERIAL_V1=y
# CONFIG_RT_USING_SERIAL_V2 is not set
-# CONFIG_RT_SERIAL_USING_DMA is not set
+CONFIG_RT_SERIAL_USING_DMA=y
CONFIG_RT_SERIAL_RB_BUFSZ=64
# CONFIG_RT_USING_CAN is not set
# CONFIG_RT_USING_HWTIMER is not set
@@ -144,7 +144,6 @@ CONFIG_RT_USING_PIN=y
# CONFIG_RT_USING_MTD_NOR is not set
# CONFIG_RT_USING_MTD_NAND is not set
# CONFIG_RT_USING_PM is not set
-# CONFIG_RT_USING_FDT is not set
# CONFIG_RT_USING_RTC is not set
# CONFIG_RT_USING_SDIO is not set
# CONFIG_RT_USING_SPI is not set
@@ -215,6 +214,12 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_RT_USING_LWIP is not set
# CONFIG_RT_USING_AT is not set
+#
+# Memory protection
+#
+# CONFIG_RT_USING_MEM_PROTECTION is not set
+# CONFIG_RT_USING_HW_STACK_GUARD is not set
+
#
# Utilities
#
@@ -267,6 +272,21 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
#
# CONFIG_PKG_USING_WLAN_WICED is not set
# CONFIG_PKG_USING_RW007 is not set
+
+#
+# CYW43012 WiFi
+#
+# CONFIG_PKG_USING_WLAN_CYW43012 is not set
+
+#
+# BL808 WiFi
+#
+# CONFIG_PKG_USING_WLAN_BL808 is not set
+
+#
+# CYW43439 WiFi
+#
+# CONFIG_PKG_USING_WLAN_CYW43439 is not set
# CONFIG_PKG_USING_COAP is not set
# CONFIG_PKG_USING_NOPOLL is not set
# CONFIG_PKG_USING_NETUTILS is not set
@@ -288,7 +308,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_JIOT-C-SDK is not set
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
# CONFIG_PKG_USING_JOYLINK is not set
-# CONFIG_PKG_USING_EZ_IOT_OS is not set
# CONFIG_PKG_USING_IOTSHARP_SDK is not set
# CONFIG_PKG_USING_NIMBLE is not set
# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set
@@ -309,6 +328,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_NMEALIB is not set
# CONFIG_PKG_USING_PDULIB is not set
# CONFIG_PKG_USING_BTSTACK is not set
+# CONFIG_PKG_USING_BT_CYW43012 is not set
+# CONFIG_PKG_USING_CYW43XX is not set
# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set
# CONFIG_PKG_USING_WAYZ_IOTKIT is not set
# CONFIG_PKG_USING_MAVLINK is not set
@@ -328,6 +349,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ZFTP is not set
# CONFIG_PKG_USING_WOL is not set
# CONFIG_PKG_USING_ZEPHYR_POLLING is not set
+# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set
+# CONFIG_PKG_USING_LHC_MODBUS is not set
#
# security packages
@@ -374,7 +397,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# LVGL: powerful and easy-to-use embedded GUI library
#
# CONFIG_PKG_USING_LVGL is not set
-# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
@@ -451,6 +473,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set
# CONFIG_PKG_USING_VOFA_PLUS is not set
# CONFIG_PKG_USING_RT_TRACE is not set
+# CONFIG_PKG_USING_ZDEBUG is not set
#
# system packages
@@ -487,6 +510,8 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_UC_COMMON is not set
# CONFIG_PKG_USING_UC_MODBUS is not set
# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set
+# CONFIG_PKG_USING_LITEOS_SDK is not set
+# CONFIG_PKG_USING_TZ_DATABASE is not set
# CONFIG_PKG_USING_CAIRO is not set
# CONFIG_PKG_USING_PIXMAN is not set
# CONFIG_PKG_USING_PARTITION is not set
@@ -510,6 +535,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_QBOOT is not set
# CONFIG_PKG_USING_PPOOL is not set
# CONFIG_PKG_USING_OPENAMP is not set
+# CONFIG_PKG_USING_RPMSG_LITE is not set
# CONFIG_PKG_USING_LPM is not set
# CONFIG_PKG_USING_TLSF is not set
# CONFIG_PKG_USING_EVENT_RECORDER is not set
@@ -523,6 +549,11 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_AGILE_UPGRADE is not set
# CONFIG_PKG_USING_FLASH_BLOB is not set
# CONFIG_PKG_USING_MLIBC is not set
+# CONFIG_PKG_USING_TASK_MSG_BUS is not set
+# CONFIG_PKG_USING_SFDB is not set
+# CONFIG_PKG_USING_RTP is not set
+# CONFIG_PKG_USING_REB is not set
+# CONFIG_PKG_USING_R_RHEALSTONE is not set
#
# peripheral libraries and drivers
@@ -587,6 +618,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_BALANCE is not set
# CONFIG_PKG_USING_SHT2X is not set
# CONFIG_PKG_USING_SHT3X is not set
+# CONFIG_PKG_USING_SHT4X is not set
# CONFIG_PKG_USING_AD7746 is not set
# CONFIG_PKG_USING_ADT74XX is not set
# CONFIG_PKG_USING_MAX17048 is not set
@@ -687,6 +719,11 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_FINGERPRINT is not set
# CONFIG_PKG_USING_BT_ECB02C is not set
# CONFIG_PKG_USING_UAT is not set
+# CONFIG_PKG_USING_ST7789 is not set
+# CONFIG_PKG_USING_VS1003 is not set
+# CONFIG_PKG_USING_X9555 is not set
+# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set
+# CONFIG_PKG_USING_BT_MX01 is not set
# CONFIG_PKG_USING_SPI_TOOLS is not set
#
@@ -701,6 +738,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ULAPACK is not set
# CONFIG_PKG_USING_QUEST is not set
# CONFIG_PKG_USING_NAXOS is not set
+# CONFIG_PKG_USING_R_TINYMAIX is not set
#
# Signal Processing and Control Algorithm Packages
@@ -710,6 +748,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_UKAL is not set
# CONFIG_PKG_USING_DIGITALCTRL is not set
# CONFIG_PKG_USING_KISSFFT is not set
+# CONFIG_PKG_USING_CMSIS_DSP is not set
#
# miscellaneous packages
@@ -741,12 +780,14 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_DONUT is not set
# CONFIG_PKG_USING_COWSAY is not set
# CONFIG_PKG_USING_MORSE is not set
+# CONFIG_PKG_USING_TINYSQUARE is not set
# CONFIG_PKG_USING_LIBCSV is not set
# CONFIG_PKG_USING_OPTPARSE is not set
# CONFIG_PKG_USING_FASTLZ is not set
# CONFIG_PKG_USING_MINILZO is not set
# CONFIG_PKG_USING_QUICKLZ is not set
# CONFIG_PKG_USING_LZMA is not set
+# CONFIG_PKG_USING_RALARAM is not set
# CONFIG_PKG_USING_MULTIBUTTON is not set
# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
# CONFIG_PKG_USING_CANFESTIVAL is not set
@@ -784,6 +825,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
#
# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set
# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set
+# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set
# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set
# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set
@@ -791,13 +833,13 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# Sensors
#
# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set
-# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set
-# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set
-# CONFIG_PKG_USING_ADAFRUIT_MAX31855 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set
@@ -842,7 +884,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set
-# CONFIG_PKG_USING_ADAFRUIT_MSA301 is not set
+# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set
@@ -881,7 +923,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set
-# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set
@@ -904,7 +945,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set
-# CONFIG_PKG_USING_SEEED_ITG3200 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set
@@ -912,7 +953,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set
-# CONFIG_PKG_USING_SEEED_MP503 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set
@@ -925,12 +966,14 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set
# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set
+# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set
#
# Display
#
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set
# CONFIG_PKG_USING_ARDUINO_U8G2 is not set
+# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set
@@ -939,6 +982,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
#
# Timing
#
+# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set
# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set
# CONFIG_PKG_USING_ARDUINO_TICKER is not set
# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set
@@ -964,18 +1008,17 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
#
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set
-# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set
+# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set
#
# Other
#
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set
-# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set
#
# Signal IO
@@ -1000,9 +1043,15 @@ CONFIG_SOC_SERIES_HC32F4=y
#
CONFIG_SOC_HC32F460PE=y
+#
+# On-chip Drivers
+#
+CONFIG_BSP_USING_ON_CHIP_FLASH_CACHE=y
+
#
# Onboard Peripheral Drivers
#
+# CONFIG_BSP_USING_SPI_FLASH is not set
#
# On-chip Peripheral Drivers
@@ -1015,12 +1064,21 @@ CONFIG_BSP_USING_UART=y
CONFIG_BSP_USING_UART4=y
# CONFIG_BSP_UART4_RX_USING_DMA is not set
# CONFIG_BSP_UART4_TX_USING_DMA is not set
-# CONFIG_BSP_USING_CAN is not set
+# CONFIG_BSP_USING_I2C is not set
+# CONFIG_BSP_USING_ON_CHIP_FLASH is not set
+# CONFIG_BSP_USING_SPI is not set
# CONFIG_BSP_USING_ADC is not set
+# CONFIG_BSP_USING_CAN is not set
+# CONFIG_BSP_USING_WDT_TMR is not set
# CONFIG_BSP_USING_RTC is not set
-# CONFIG_BSP_USING_I2C2 is not set
-# CONFIG_BSP_USING_WDT is not set
-# CONFIG_BSP_USING_PWM_TMRA is not set
+# CONFIG_BSP_USING_SDIO is not set
+# CONFIG_BSP_USING_PM is not set
+# CONFIG_BSP_USING_HWCRYPTO is not set
+# CONFIG_BSP_USING_PWM is not set
+# CONFIG_BSP_USING_USB is not set
+# CONFIG_BSP_USING_QSPI is not set
+# CONFIG_BSP_USING_PULSE_ENCODER is not set
+# CONFIG_BSP_USING_HWTIMER is not set
#
# Board extended module Drivers
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/.cproject b/bsp/hc32/ev_hc32f460_lqfp100_v2/.cproject
new file mode 100644
index 0000000000..9693c82d31
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/.cproject
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/.project b/bsp/hc32/ev_hc32f460_lqfp100_v2/.project
new file mode 100644
index 0000000000..d8904aee72
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/.project
@@ -0,0 +1,68 @@
+
+
+ project
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
+
+ rt-thread
+ 2
+ virtual:/virtual
+
+
+ rt-thread/bsp
+ 2
+ virtual:/virtual
+
+
+ rt-thread/components
+ 2
+ $%7BPARENT-3-PROJECT_LOC%7D/components
+
+
+ rt-thread/include
+ 2
+ $%7BPARENT-3-PROJECT_LOC%7D/include
+
+
+ rt-thread/libcpu
+ 2
+ $%7BPARENT-3-PROJECT_LOC%7D/libcpu
+
+
+ rt-thread/src
+ 2
+ $%7BPARENT-3-PROJECT_LOC%7D/src
+
+
+ rt-thread/bsp/hc32
+ 2
+ virtual:/virtual
+
+
+ rt-thread/bsp/hc32/libraries
+ 2
+ $%7BPARENT-1-PROJECT_LOC%7D/libraries
+
+
+
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/README.md b/bsp/hc32/ev_hc32f460_lqfp100_v2/README.md
index 51d3789cad..c4613bba73 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/README.md
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/README.md
@@ -39,12 +39,13 @@ EV_F460_LQ100_V2 开发板常用 **板载资源** 如下:
| :------------ | :-----------: | :-----------------------------------: |
| USB 转串口 | 支持 | 使用 UART4 |
| LED | 支持 | LED |
-| **片上外设** | **支持情况** | **备注** |
+
+| **片上外设** | **支持情况** | **备注** |
| :------------ | :-----------: | :-----------------------------------: |
-| ADC | 支持 | ADC1: CH10, CH11, CH12,
ADC2: CH7 |
-| CAN | 支持 | CAN1 |
-| GPIO | 支持 | PA0, PA1... PH2 ---> PIN: 0, 1...82 |
-| I2C | 支持 | 软件 |
+| ADC | 支持 | ADC1~2 |
+| CAN | 支持 | CAN1 |
+| GPIO | 支持 | PA0, PA1... PH2 ---> PIN: 0, 1...82 |
+| I2C | 支持 | 软件 |
| UART | 支持 | UART1~4 |
@@ -107,4 +108,4 @@ msh >
维护人:
-- [小华半导体MCU](http://www.xhsc.com.cn),邮箱:
\ No newline at end of file
+- [小华半导体MCU](https://www.xhsc.com.cn),邮箱:
\ No newline at end of file
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/SConstruct b/bsp/hc32/ev_hc32f460_lqfp100_v2/SConstruct
index fabdca1a7a..466d15739f 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/SConstruct
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/SConstruct
@@ -56,5 +56,7 @@ objs.extend(SConscript(os.path.join(libraries_path_prefix, hc32_library, 'SConsc
# include drivers
objs.extend(SConscript(os.path.join(libraries_path_prefix, 'hc32_drivers', 'SConscript')))
+objs.extend(SConscript(os.path.join(os.getcwd(), 'board', 'ports', 'SConscript')))
+
# make a building
DoBuilding(TARGET, objs)
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/applications/main.c b/bsp/hc32/ev_hc32f460_lqfp100_v2/applications/main.c
index 3c4e3bd322..2501a8638e 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/applications/main.c
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/applications/main.c
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -13,7 +12,6 @@
#include
#include
-
/* defined the LED_GREEN pin: PD4 */
#define LED_GREEN_PIN GET_PIN(D, 4)
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/applications/xtal32_fcm.c b/bsp/hc32/ev_hc32f460_lqfp100_v2/applications/xtal32_fcm.c
new file mode 100644
index 0000000000..f89e5656dc
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/applications/xtal32_fcm.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-10-27 CDT first version
+ */
+
+/*******************************************************************************
+ * Include files
+ ******************************************************************************/
+
+#include
+#include
+#include
+
+#if defined(BSP_RTC_USING_XTAL32) || defined(RT_USING_PM)
+
+#define XTAL32_FCM_THREAD_STACK_SIZE (1024)
+
+/**
+ * @brief This thread is used to monitor whether XTAL32 is stable.
+ * This thread only runs once after the system starts.
+ * When stability is detected or 2s times out, the thread will end.
+ * (When a timeout occurs it will be prompted via rt_kprintf)
+ */
+void xtal32_fcm_thread_entry(void *parameter)
+{
+ stc_fcm_init_t stcFcmInit;
+ uint32_t u32TimeOut = 0UL;
+ uint32_t u32Time = 200UL; /* 200*10ms = 2s */
+
+ /* FCM config */
+ FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_FCM, ENABLE);
+ (void)FCM_StructInit(&stcFcmInit);
+ stcFcmInit.u32RefClock = FCM_REF_CLK_MRC;
+ stcFcmInit.u32RefClockDiv = FCM_REF_CLK_DIV8192; /* ~1ms cycle */
+ stcFcmInit.u32RefClockEdge = FCM_REF_CLK_RISING;
+ stcFcmInit.u32TargetClock = FCM_TARGET_CLK_XTAL32;
+ stcFcmInit.u32TargetClockDiv = FCM_TARGET_CLK_DIV1;
+ stcFcmInit.u16LowerLimit = (uint16_t)((XTAL32_VALUE / (MRC_VALUE / 8192U)) * 96UL / 100UL);
+ stcFcmInit.u16UpperLimit = (uint16_t)((XTAL32_VALUE / (MRC_VALUE / 8192U)) * 104UL / 100UL);
+ (void)FCM_Init(&stcFcmInit);
+ /* Enable FCM, to ensure xtal32 stable */
+ FCM_Cmd(ENABLE);
+
+ while (1)
+ {
+ if (SET == FCM_GetStatus(FCM_FLAG_END))
+ {
+ FCM_ClearStatus(FCM_FLAG_END);
+ if ((SET == FCM_GetStatus(FCM_FLAG_ERR)) || (SET == FCM_GetStatus(FCM_FLAG_OVF)))
+ {
+ FCM_ClearStatus(FCM_FLAG_ERR | FCM_FLAG_OVF);
+ }
+ else
+ {
+ (void)FCM_DeInit();
+ FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_FCM, DISABLE);
+ /* XTAL32 stabled */
+ break;
+ }
+ }
+ u32TimeOut++;
+ if (u32TimeOut > u32Time)
+ {
+ (void)FCM_DeInit();
+ FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_FCM, DISABLE);
+ rt_kprintf("Error: XTAL32 still unstable, timeout.\n");
+ break;
+ }
+ rt_thread_mdelay(10);
+ }
+}
+
+int xtal32_fcm_thread_create(void)
+{
+ rt_thread_t tid;
+
+ tid = rt_thread_create("xtal32_fcm", xtal32_fcm_thread_entry, RT_NULL,
+ XTAL32_FCM_THREAD_STACK_SIZE, RT_THREAD_PRIORITY_MAX - 2, 10);
+ if (tid != RT_NULL)
+ {
+ rt_thread_startup(tid);
+ }
+ else
+ {
+ rt_kprintf("create xtal32_fcm thread err!");
+ }
+ return RT_EOK;
+}
+INIT_APP_EXPORT(xtal32_fcm_thread_create);
+
+#endif
+
+
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/Kconfig b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/Kconfig
index 2e3f614783..86010fd7dc 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/Kconfig
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/Kconfig
@@ -7,7 +7,23 @@ config SOC_HC32F460PE
select RT_USING_USER_MAIN
default y
+menu "On-chip Drivers"
+ config BSP_USING_ON_CHIP_FLASH_CACHE
+ bool "Enable on-chip Flash Cache"
+ default y
+endmenu
+
menu "Onboard Peripheral Drivers"
+ config BSP_USING_SPI_FLASH
+ bool "Enable SPI FLASH (w25q64 spi3)"
+ select BSP_USING_SPI
+ select BSP_USING_SPI3
+ select BSP_USING_ON_CHIP_FLASH
+ select RT_USING_SFUD
+ select RT_USING_DFS
+ select RT_USING_FAL
+ select RT_USING_MTD_NOR
+ default n
endmenu
@@ -22,79 +38,279 @@ menu "On-chip Peripheral Drivers"
default y
select RT_USING_SERIAL
if BSP_USING_UART
- config BSP_USING_UART1
+ menuconfig BSP_USING_UART1
bool "Enable UART1"
default y
+ if BSP_USING_UART1
+ config BSP_UART1_RX_USING_DMA
+ bool "Enable UART1 RX DMA"
+ depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART1_RX_USING_DMA
- bool "Enable UART1 RX DMA"
- depends on BSP_USING_UART1
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART1_TX_USING_DMA
+ bool "Enable UART1 TX DMA"
+ depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART1_TX_USING_DMA
- bool "Enable UART1 TX DMA"
- depends on BSP_USING_UART1
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART1_RX_BUFSIZE
+ int "Set UART1 RX buffer size"
+ range 64 65535
+ depends on RT_USING_SERIAL_V2
+ default 256
- config BSP_USING_UART2
+ config BSP_UART1_TX_BUFSIZE
+ int "Set UART1 TX buffer size"
+ range 0 65535
+ depends on RT_USING_SERIAL_V2
+ default 0
+ endif
+
+ menuconfig BSP_USING_UART2
bool "Enable UART2"
default n
+ if BSP_USING_UART2
+ config BSP_UART2_RX_USING_DMA
+ bool "Enable UART2 RX DMA"
+ depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART2_RX_USING_DMA
- bool "Enable UART2 RX DMA"
- depends on BSP_USING_UART2
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART2_TX_USING_DMA
+ bool "Enable UART2 TX DMA"
+ depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART2_TX_USING_DMA
- bool "Enable UART2 TX DMA"
- depends on BSP_USING_UART2
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART2_RX_BUFSIZE
+ int "Set UART2 RX buffer size"
+ range 64 65535
+ depends on RT_USING_SERIAL_V2
+ default 256
- config BSP_USING_UART3
+ config BSP_UART2_TX_BUFSIZE
+ int "Set UART2 TX buffer size"
+ range 0 65535
+ depends on RT_USING_SERIAL_V2
+ default 256
+ endif
+
+ menuconfig BSP_USING_UART3
bool "Enable UART3"
default n
+ if BSP_USING_UART3
+ config BSP_UART3_RX_USING_DMA
+ bool "Enable UART3 RX DMA"
+ depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART3_RX_USING_DMA
- bool "Enable UART3 RX DMA"
- depends on BSP_USING_UART3
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART3_TX_USING_DMA
+ bool "Enable UART3 TX DMA"
+ depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART3_TX_USING_DMA
- bool "Enable UART3 TX DMA"
- depends on BSP_USING_UART3
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART3_RX_BUFSIZE
+ int "Set UART3 RX buffer size"
+ range 64 65535
+ depends on RT_USING_SERIAL_V2
+ default 256
- config BSP_USING_UART4
+ config BSP_UART3_TX_BUFSIZE
+ int "Set UART3 TX buffer size"
+ range 0 65535
+ depends on RT_USING_SERIAL_V2
+ default 256
+ endif
+
+ menuconfig BSP_USING_UART4
bool "Enable UART4"
default n
+ if BSP_USING_UART4
+ config BSP_UART4_RX_USING_DMA
+ bool "Enable UART4 RX DMA"
+ depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART4_RX_USING_DMA
- bool "Enable UART4 RX DMA"
- depends on BSP_USING_UART4
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART4_TX_USING_DMA
+ bool "Enable UART4 TX DMA"
+ depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
+ default n
- config BSP_UART4_TX_USING_DMA
- bool "Enable UART4 TX DMA"
- depends on BSP_USING_UART4
- select RT_SERIAL_USING_DMA
- default n
+ config BSP_UART4_RX_BUFSIZE
+ int "Set UART4 RX buffer size"
+ range 64 65535
+ depends on RT_USING_SERIAL_V2
+ default 256
+
+ config BSP_UART4_TX_BUFSIZE
+ int "Set UART4 TX buffer size"
+ range 0 65535
+ depends on RT_USING_SERIAL_V2
+ default 256
+ endif
endif
- menuconfig BSP_USING_CAN
- bool "Enable CAN"
+ menuconfig BSP_USING_I2C
+ bool "Enable I2C BUS"
default n
- select RT_USING_CAN
- if BSP_USING_CAN
- config BSP_USING_CAN1
- bool "using can1"
+ select RT_USING_I2C
+
+ if BSP_USING_I2C
+ menuconfig BSP_USING_I2C1_SW
+ bool "Enable I2C1 BUS (software simulation)"
default n
+ select RT_USING_I2C_BITOPS
+ select RT_USING_PIN
+ if BSP_USING_I2C1_SW
+ config BSP_I2C1_SCL_PIN
+ int "i2c1 scl pin number"
+ range 1 100
+ default 7
+ config BSP_I2C1_SDA_PIN
+ int "I2C1 sda pin number"
+ range 1 100
+ default 36
+ endif
+ endif
+
+ if BSP_USING_I2C
+ config BSP_I2C_USING_DMA
+ bool
+ default n
+ config BSP_USING_I2C_HW
+ bool
+ default n
+
+ menuconfig BSP_USING_I2C1
+ bool "Enable I2C1 BUS"
+ default n
+ select BSP_USING_I2C_HW
+ if BSP_USING_I2C1
+ config BSP_I2C1_USING_DMA
+ bool
+ default n
+ config BSP_I2C1_TX_USING_DMA
+ bool "Enable I2C1 TX DMA"
+ default n
+ select BSP_I2C_USING_DMA
+ select BSP_I2C1_USING_DMA
+ config BSP_I2C1_RX_USING_DMA
+ bool "Enable I2C1 RX DMA"
+ default n
+ select BSP_I2C_USING_DMA
+ select BSP_I2C1_USING_DMA
+ endif
+
+ menuconfig BSP_USING_I2C2
+ bool "Enable I2C2 BUS"
+ default n
+ select BSP_USING_I2C_HW
+ if BSP_USING_I2C2
+ config BSP_I2C2_USING_DMA
+ bool
+ default n
+ config BSP_I2C2_TX_USING_DMA
+ bool "Enable I2C2 TX DMA"
+ default n
+ select BSP_I2C_USING_DMA
+ select BSP_I2C2_USING_DMA
+ config BSP_I2C2_RX_USING_DMA
+ bool "Enable I2C2 RX DMA"
+ default n
+ select BSP_I2C_USING_DMA
+ select BSP_I2C2_USING_DMA
+ endif
+
+ menuconfig BSP_USING_I2C3
+ bool "Enable I2C3 BUS"
+ default n
+ select BSP_USING_I2C_HW
+ if BSP_USING_I2C3
+ config BSP_I2C3_USING_DMA
+ bool
+ default n
+ config BSP_I2C3_TX_USING_DMA
+ bool "Enable I2C3 TX DMA"
+ default n
+ select BSP_I2C_USING_DMA
+ select BSP_I2C3_USING_DMA
+ config BSP_I2C3_RX_USING_DMA
+ bool "Enable I2C3 RX DMA"
+ default n
+ select BSP_I2C_USING_DMA
+ select BSP_I2C3_USING_DMA
+ endif
+ endif
+
+ config BSP_USING_ON_CHIP_FLASH
+ bool "Enable on-chip FLASH"
+ default n
+
+ menuconfig BSP_USING_SPI
+ bool "Enable SPI BUS"
+ default n
+ select RT_USING_SPI
+ if BSP_USING_SPI
+ config BSP_SPI_USING_DMA
+ bool
+ default n
+
+ menuconfig BSP_USING_SPI1
+ bool "Enable SPI1 BUS"
+ default n
+ if BSP_USING_SPI1
+ config BSP_SPI1_TX_USING_DMA
+ bool "Enable SPI1 TX DMA"
+ select BSP_SPI_USING_DMA
+ default n
+ config BSP_SPI1_RX_USING_DMA
+ bool "Enable SPI1 RX DMA"
+ select BSP_SPI_USING_DMA
+ select BSP_SPI1_TX_USING_DMA
+ default n
+ endif
+
+ menuconfig BSP_USING_SPI2
+ bool "Enable SPI2 BUS"
+ default n
+ if BSP_USING_SPI2
+ config BSP_SPI2_TX_USING_DMA
+ bool "Enable SPI2 TX DMA"
+ select BSP_SPI_USING_DMA
+ default n
+ config BSP_SPI2_RX_USING_DMA
+ bool "Enable SPI2 RX DMA"
+ select BSP_SPI_USING_DMA
+ select BSP_SPI2_TX_USING_DMA
+ default n
+ endif
+
+ menuconfig BSP_USING_SPI3
+ bool "Enable SPI3 BUS"
+ default n
+ if BSP_USING_SPI3
+ config BSP_SPI3_TX_USING_DMA
+ bool "Enable SPI3 TX DMA"
+ select BSP_SPI_USING_DMA
+ default n
+ config BSP_SPI3_RX_USING_DMA
+ bool "Enable SPI3 RX DMA"
+ select BSP_SPI_USING_DMA
+ select BSP_SPI3_TX_USING_DMA
+ default n
+ endif
+
+ menuconfig BSP_USING_SPI4
+ bool "Enable SPI4 BUS"
+ default n
+ if BSP_USING_SPI4
+ config BSP_SPI4_TX_USING_DMA
+ bool "Enable SPI4 TX DMA"
+ select BSP_SPI_USING_DMA
+ default n
+ config BSP_SPI4_RX_USING_DMA
+ bool "Enable SPI4 RX DMA"
+ select BSP_SPI_USING_DMA
+ select BSP_SPI4_TX_USING_DMA
+ default n
+ endif
endif
menuconfig BSP_USING_ADC
@@ -110,6 +326,32 @@ menu "On-chip Peripheral Drivers"
default n
endif
+ menuconfig BSP_USING_CAN
+ bool "Enable CAN"
+ default n
+ select RT_USING_CAN
+ select RT_CAN_USING_HDR
+ if BSP_USING_CAN
+ config BSP_USING_CAN1
+ bool "using can1"
+ default n
+ endif
+
+ menuconfig BSP_USING_WDT_TMR
+ bool "Enable Watchdog Timer"
+ default n
+ select RT_USING_WDT
+ if BSP_USING_WDT_TMR
+ config BSP_USING_WDT
+ bool "Using WDT"
+ default n
+ if BSP_USING_WDT
+ config BSP_WDT_CONTINUE_COUNT
+ bool "Low Power Mode Keeps Counting"
+ default n
+ endif
+ endif
+
menuconfig BSP_USING_RTC
bool "Enable RTC"
select RT_USING_RTC
@@ -117,7 +359,7 @@ menu "On-chip Peripheral Drivers"
if BSP_USING_RTC
choice
prompt "Select clock source"
- default BSP_RTC_USING_LRC
+ default BSP_RTC_USING_XTAL32
config BSP_RTC_USING_XTAL32
bool "RTC USING XTAL32"
@@ -127,45 +369,267 @@ menu "On-chip Peripheral Drivers"
endchoice
endif
- menuconfig BSP_USING_I2C2
- bool "Enable I2C2 BUS (software simulation)"
+ menuconfig BSP_USING_SDIO
+ bool "Enable SDIO"
default n
- select RT_USING_I2C
- select RT_USING_I2C_BITOPS
- select RT_USING_PIN
- if BSP_USING_I2C2
- config BSP_I2C2_SCL_PIN
- int "i2c2 scl pin number"
- range 1 100
- default 48
- config BSP_I2C2_SDA_PIN
- int "I2C2 sda pin number"
- range 1 100
- default 49
+ select RT_USING_SDIO
+ if BSP_USING_SDIO
+ config BSP_USING_SDIO1
+ bool "Enable SDIO1"
+ default n
+ config BSP_USING_SDIO2
+ bool "Enable SDIO2"
+ default n
endif
- config BSP_USING_WDT
- bool "Enable Watchdog Timer"
- select RT_USING_WDT
+ menuconfig BSP_USING_PM
+ bool "Enable PM"
default n
+ select RT_USING_PM
+ if BSP_USING_PM
+ choice
+ prompt "Select WKTM Clock Src"
+ default BSP_USING_WKTM_LRC
- menuconfig BSP_USING_PWM_TMRA
- bool "Enable timerA output PWM"
- depends on (!BSP_USING_UART3)
+ config BSP_USING_WKTM_XTAL32
+ bool "Using Xtal32"
+ config BSP_USING_WKTM_LRC
+ bool "Using LRC"
+ if BSP_RTC_USING_XTAL32
+ config BSP_USING_WKTM_64HZ
+ bool "Using 64HZ(Note:must use XTAL32 and run RTC)"
+ endif
+ endchoice
+ endif
+
+ menuconfig BSP_USING_HWCRYPTO
+ bool "Using Hardware Crypto drivers"
+ default n
+ select RT_USING_HWCRYPTO
+ if BSP_USING_HWCRYPTO
+ config BSP_USING_UQID
+ bool "Enable UQID (unique id)"
+ default n
+
+ config BSP_USING_RNG
+ bool "Using Hardware RNG"
+ default n
+ select RT_HWCRYPTO_USING_RNG
+
+ config BSP_USING_CRC
+ bool "Using Hardware CRC"
+ default n
+ select RT_HWCRYPTO_USING_CRC
+
+ config BSP_USING_AES
+ bool "Using Hardware AES"
+ default n
+ select RT_HWCRYPTO_USING_AES
+ if BSP_USING_AES
+ choice
+ prompt "Select AES Mode"
+ default BSP_USING_AES_ECB
+
+ config BSP_USING_AES_ECB
+ bool "ECB mode"
+ select RT_HWCRYPTO_USING_AES_ECB
+ endchoice
+ endif
+
+ config BSP_USING_HASH
+ bool "Using Hardware Hash"
+ default n
+ select RT_HWCRYPTO_USING_SHA2
+ if BSP_USING_HASH
+ choice
+ prompt "Select Hash Mode"
+ default BSP_USING_SHA2_256
+
+ config BSP_USING_SHA2_256
+ bool "SHA2_256 Mode"
+ select RT_HWCRYPTO_USING_SHA2_256
+ endchoice
+ endif
+
+ endif
+
+ menuconfig BSP_USING_PWM
+ bool "Enable output PWM"
default n
select RT_USING_PWM
- if BSP_USING_PWM_TMRA
- menuconfig BSP_USING_PWM_TMRA_4
- bool "Enable timerA-4 output PWM"
- default n
- if BSP_USING_PWM_TMRA_4
- config BSP_USING_PWM_TMRA_4_CH7
- bool "Enable timerA-4 channel7"
- default n
- config BSP_USING_PWM_TMRA_4_CH8
- bool "Enable timerA-4 channel8"
- default n
+ if BSP_USING_PWM
+ menuconfig BSP_USING_PWM_TMRA
+ bool "Enable timerA output PWM"
+ default n
+ if BSP_USING_PWM_TMRA
+ menuconfig BSP_USING_PWM_TMRA_4
+ bool "Enable timerA-4 output PWM"
+ default n
+ if BSP_USING_PWM_TMRA_4
+ config BSP_USING_PWM_TMRA_4_CH1
+ bool "Enable timerA-4 channel1"
+ default n
+ config BSP_USING_PWM_TMRA_4_CH2
+ bool "Enable timerA-4 channel2"
+ default n
+ endif
+ menuconfig BSP_USING_PWM_TMRA_5
+ bool "Enable timerA-5 output PWM"
+ default n
+ if BSP_USING_PWM_TMRA_5
+ config BSP_USING_PWM_TMRA_5_CH1
+ bool "Enable timerA-5 channel1"
+ default n
+ config BSP_USING_PWM_TMRA_5_CH2
+ bool "Enable timerA-5 channel2"
+ default n
+ endif
+ endif
+ menuconfig BSP_USING_PWM_TMR4
+ bool "Enable timer4 output PWM"
+ default n
+ if BSP_USING_PWM_TMR4
+ menuconfig BSP_USING_PWM_TMR4_1
+ bool "Enable timer4-1 output PWM"
+ default n
+ if BSP_USING_PWM_TMR4_1
+ config BSP_USING_PWM_TMR4_1_OUH
+ bool "Enable TMR4_1_OUH channel1"
+ default n
+ config BSP_USING_PWM_TMR4_1_OUL
+ bool "Enable TMR4_1_OUL channel2"
+ default n
+ config BSP_USING_PWM_TMR4_1_OVH
+ bool "Enable TMR4_1_OVH channel3"
+ default n
+ config BSP_USING_PWM_TMR4_1_OVL
+ bool "Enable TMR4_1_OVL channel4"
+ default n
+ config BSP_USING_PWM_TMR4_1_OWH
+ bool "Enable TMR4_1_OWH channel5"
+ default n
+ config BSP_USING_PWM_TMR4_1_OWL
+ bool "Enable TMR4_1_OWL channel6"
+ default n
+ endif
+ endif
+ menuconfig BSP_USING_PWM_TMR6
+ bool "Enable timer6 output PWM"
+ default n
+ if BSP_USING_PWM_TMR6
+ menuconfig BSP_USING_PWM_TMR6_1
+ bool "Enable timer6-1 output PWM"
+ default n
+ if BSP_USING_PWM_TMR6_1
+ config BSP_USING_PWM_TMR6_1_A
+ bool "Enable TMR6_1_A channel1"
+ default n
+ config BSP_USING_PWM_TMR6_1_B
+ bool "Enable TMR6_1_B channel2"
+ default n
+ endif
+ endif
+ endif
+
+ menuconfig BSP_USING_USB
+ bool "Enable USB"
+ default n
+ select RT_USING_USB_DEVICE if BSP_USING_USBD
+ select RT_USING_USB_HOST if BSP_USING_USBH
+ if BSP_USING_USB
+ config BSP_USING_USBFS
+ bool
+ default y
+
+ choice
+ prompt "Select USB Mode"
+ default BSP_USING_USBD
+
+ config BSP_USING_USBD
+ bool "USB Device Mode"
+
+ config BSP_USING_USBH
+ bool "USB Host Mode"
+ endchoice
+
+ if BSP_USING_USBD
+ config BSP_USING_USBD_VBUS_SENSING
+ bool "Enable VBUS Sensing"
+ default y
endif
+
+ if BSP_USING_USBH
+ menuconfig RT_USBH_MSTORAGE
+ bool "Enable Udisk Drivers"
+ default n
+ if RT_USBH_MSTORAGE
+ config UDISK_MOUNTPOINT
+ string "Udisk mount dir"
+ default "/"
+ endif
+ endif
+ endif
+
+ menuconfig BSP_USING_QSPI
+ bool "Enable QSPI BUS"
+ select RT_USING_QSPI
+ select RT_USING_SPI
+ default n
+ if BSP_USING_QSPI
+ config BSP_QSPI_USING_DMA
+ bool "Enable QSPI DMA support"
+ default n
+ config BSP_QSPI_USING_SOFT_CS
+ bool "Enable QSPI Soft CS Pin"
+ default n
+ endif
+
+ menuconfig BSP_USING_PULSE_ENCODER
+ bool "Enable Pulse Encoder"
+ default n
+ select RT_USING_PULSE_ENCODER
+ if BSP_USING_PULSE_ENCODER
+ menuconfig BSP_USING_TMRA_PULSE_ENCODER
+ bool "Use TIMERA As The Pulse Encoder"
+ default n
+ if BSP_USING_TMRA_PULSE_ENCODER
+ config BSP_USING_PULSE_ENCODER_TMRA_1
+ bool "Use TIMERA_1 As The Pulse Encoder"
+ default n
+ endif
+ menuconfig BSP_USING_TMR6_PULSE_ENCODER
+ bool "Use TIMER6 As The Pulse Encoder"
+ default n
+ if BSP_USING_TMR6_PULSE_ENCODER
+ config BSP_USING_PULSE_ENCODER_TMR6_1
+ bool "Use TIMER6_1 As The Pulse Encoder"
+ default n
+ endif
+ endif
+
+ menuconfig BSP_USING_HWTIMER
+ bool "Enable Hw Timer"
+ default n
+ select RT_USING_HWTIMER
+ if BSP_USING_HWTIMER
+ config BSP_USING_TMRA_1
+ bool "Use Timer_a1 As The Hw Timer"
+ default n
+ config BSP_USING_TMRA_2
+ bool "Use Timer_a2 As The Hw Timer"
+ default n
+ config BSP_USING_TMRA_3
+ bool "Use Timer_a3 As The Hw Timer"
+ default n
+ config BSP_USING_TMRA_4
+ bool "Use Timer_a4 As The Hw Timer"
+ default n
+ config BSP_USING_TMRA_5
+ bool "Use Timer_a5 As The Hw Timer"
+ default n
+ config BSP_USING_TMRA_6
+ bool "Use Timer_a6 As The Hw Timer"
+ default n
endif
endmenu
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/SConscript b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/SConscript
index 3941228424..00a3eb22fc 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/SConscript
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/SConscript
@@ -12,9 +12,13 @@ board.c
board_config.c
''')
+if GetDepend(['BSP_USING_SPI_FLASH']):
+ src += Glob('ports/drv_spi_flash.c')
+
path = [cwd]
path += [cwd + '/ports']
path += [cwd + '/config']
+path += [cwd + '/config/usb_config']
startup_path_prefix = SDK_LIB
@@ -25,7 +29,7 @@ elif rtconfig.PLATFORM in ['armcc', 'armclang']:
elif rtconfig.PLATFORM in ['iccarm']:
src += [startup_path_prefix + '/hc32f460_ddl/drivers/cmsis/Device/HDSC/hc32f4xx/Source/IAR/startup_hc32f460.s']
-CPPDEFINES = ['HC32F460']
+CPPDEFINES = ['HC32F460', '__DEBUG']
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
Return('group')
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.c b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.c
index d064052943..dd63371fa6 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.c
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.c
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -10,37 +9,42 @@
*/
#include "board.h"
-
-#ifdef RT_USING_PIN
-#include
-#endif
-
-#ifdef RT_USING_SERIAL
-#ifdef RT_USING_SERIAL_V2
-#include
-#else
-#include
-#endif /* RT_USING_SERIAL */
-#endif /* RT_USING_SERIAL_V2 */
+#include "board_config.h"
/* unlock/lock peripheral */
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
+#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
/**
- * @brief This function is executed in case of error occurrence.
- * @param None
- * @retval None
- */
-void Error_Handler(void)
+ * @brief Switch clock stable time
+ * @note Approx. 30us
+ */
+#define CLK_SYSCLK_SW_STB (HCLK_VALUE / 50000UL)
+/**
+ * @brief Clk delay function
+ * @param [in] u32Delay count
+ * @retval when switch clock source, should be delay some time to wait stable.
+ */
+static void CLK_Delay(uint32_t u32Delay)
{
- /* USER CODE BEGIN Error_Handler */
- /* User can add his own implementation to report the HAL error return state */
- while (1)
+ __IO uint32_t u32Timeout = 0UL;
+
+ while (u32Timeout < u32Delay)
{
+ u32Timeout++;
}
- /* USER CODE END Error_Handler */
+}
+#endif
+
+/** System Base Configuration
+*/
+void SystemBase_Config(void)
+{
+#if defined(BSP_USING_ON_CHIP_FLASH_CACHE)
+ EFM_CacheCmd(ENABLE);
+#endif
}
/** System Clock Configuration
@@ -49,36 +53,40 @@ void SystemClock_Config(void)
{
stc_clock_xtal_init_t stcXtalInit;
stc_clock_pll_init_t stcMpllInit;
+#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
+ stc_clock_pllx_init_t stcUpllInit;
+#endif
+#if defined(BSP_RTC_USING_XTAL32) || defined(RT_USING_PM)
+ stc_clock_xtal32_init_t stcXtal32Init;
+#endif
- (void)CLK_XtalStructInit(&stcXtalInit);
- (void)CLK_PLLStructInit(&stcMpllInit);
-
- /* Set bus clk div. */
+ /* PCLK0, HCLK Max 200MHz */
+ /* PCLK1, PCLK4 Max 100MHz */
+ /* PCLK2, PCLK3 Max 50MHz */
+ /* EX BUS Max 100MHz */
CLK_SetClockDiv(CLK_BUS_CLK_ALL, (CLK_HCLK_DIV1 | CLK_EXCLK_DIV2 | CLK_PCLK0_DIV1 | CLK_PCLK1_DIV2 | \
CLK_PCLK2_DIV4 | CLK_PCLK3_DIV4 | CLK_PCLK4_DIV2));
+ GPIO_AnalogCmd(XTAL_PORT, XTAL_IN_PIN | XTAL_OUT_PIN, ENABLE);
+ (void)CLK_XtalStructInit(&stcXtalInit);
/* Config Xtal and enable Xtal */
- stcXtalInit.u8Mode = CLK_XTAL_MD_OSC;
- stcXtalInit.u8Drv = CLK_XTAL_DRV_ULOW;
+ stcXtalInit.u8Mode = CLK_XTAL_MD_OSC;
+ stcXtalInit.u8Drv = CLK_XTAL_DRV_ULOW;
stcXtalInit.u8State = CLK_XTAL_ON;
stcXtalInit.u8StableTime = CLK_XTAL_STB_2MS;
(void)CLK_XtalInit(&stcXtalInit);
+ (void)CLK_PLLStructInit(&stcMpllInit);
/* MPLL config (XTAL / pllmDiv * plln / PllpDiv = 200M). */
+ stcMpllInit.u8PLLState = CLK_PLL_ON;
stcMpllInit.PLLCFGR = 0UL;
stcMpllInit.PLLCFGR_f.PLLM = 1UL - 1UL;
stcMpllInit.PLLCFGR_f.PLLN = 50UL - 1UL;
stcMpllInit.PLLCFGR_f.PLLP = 2UL - 1UL;
stcMpllInit.PLLCFGR_f.PLLQ = 2UL - 1UL;
stcMpllInit.PLLCFGR_f.PLLR = 2UL - 1UL;
- stcMpllInit.u8PLLState = CLK_PLL_ON;
stcMpllInit.PLLCFGR_f.PLLSRC = CLK_PLL_SRC_XTAL;
(void)CLK_PLLInit(&stcMpllInit);
- /* Wait MPLL ready. */
- while (SET != CLK_GetStableStatus(CLK_STB_FLAG_PLL))
- {
- ;
- }
/* sram init include read/write wait cycle setting */
SRAM_SetWaitCycle(SRAM_SRAMH, SRAM_WAIT_CYCLE0, SRAM_WAIT_CYCLE0);
@@ -92,104 +100,52 @@ void SystemClock_Config(void)
(void)PWC_HighSpeedToHighPerformance();
/* Switch system clock source to MPLL. */
CLK_SetSysClockSrc(CLK_SYSCLK_SRC_PLL);
+
+#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
+ /* PLLX for USB */
+ (void)CLK_PLLxStructInit(&stcUpllInit);
+ /* VCO = (8/2)*120 = 480MHz*/
+ stcUpllInit.u8PLLState = CLK_PLL_ON;
+ stcUpllInit.PLLCFGR = 0UL;
+ stcUpllInit.PLLCFGR_f.PLLM = 2UL - 1UL;
+ stcUpllInit.PLLCFGR_f.PLLN = 120UL - 1UL;
+ stcUpllInit.PLLCFGR_f.PLLP = 10UL - 1UL;
+ stcUpllInit.PLLCFGR_f.PLLQ = 6UL - 1UL;
+ stcUpllInit.PLLCFGR_f.PLLR = 6UL - 1UL;
+ (void)CLK_PLLxInit(&stcUpllInit);
+#endif
+
+#if defined(BSP_RTC_USING_XTAL32) || defined(RT_USING_PM)
+ /* Xtal32 config */
+ GPIO_AnalogCmd(XTAL32_PORT, XTAL32_IN_PIN | XTAL32_OUT_PIN, ENABLE);
+ (void)CLK_Xtal32StructInit(&stcXtal32Init);
+ stcXtal32Init.u8State = CLK_XTAL32_ON;
+ stcXtal32Init.u8Drv = CLK_XTAL32_DRV_HIGH;
+ stcXtal32Init.u8Filter = CLK_XTAL32_FILTER_RUN_MD;
+ (void)CLK_Xtal32Init(&stcXtal32Init);
+#endif
}
/** Peripheral Clock Configuration
*/
-static void PeripheralClock_Config(void)
+void PeripheralClock_Config(void)
{
-#if defined(HC32F460)
#if defined(RT_USING_ADC)
CLK_SetPeriClockSrc(CLK_PERIPHCLK_PCLK);
#endif
+
+#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
+ CLK_SetUSBClockSrc(CLK_USBCLK_PLLXP);
+ /* Wait stable here, since the current DDL API does not include this */
+ CLK_Delay(CLK_SYSCLK_SW_STB);
#endif
}
-/*******************************************************************************
- * Function Name : SysTick_Configuration
- * Description : Configures the SysTick for OS tick.
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
-void SysTick_Configuration(void)
+/** Peripheral Registers Unlock
+*/
+void PeripheralRegister_Unlock(void)
{
- stc_clock_freq_t stcClkFreq;
- rt_uint32_t cnts;
-
- CLK_GetClockFreq(&stcClkFreq);
-
- cnts = (rt_uint32_t)stcClkFreq.u32HclkFreq / RT_TICK_PER_SECOND;
-
- SysTick_Config(cnts);
-}
-
-/**
- * This is the timer interrupt service routine.
- *
- */
-void SysTick_Handler(void)
-{
- /* enter interrupt */
- rt_interrupt_enter();
-
- rt_tick_increase();
-
- /* leave interrupt */
- rt_interrupt_leave();
-}
-
-/**
- * This function will initial HC32 board.
- */
-void rt_hw_board_init()
-{
- /* Peripheral registers write unprotected */
LL_PERIPH_WE(EXAMPLE_PERIPH_WE);
-
- SystemClock_Config();
- PeripheralClock_Config();
- /* Configure the SysTick */
- SysTick_Configuration();
-
- /* Heap initialization */
-#if defined(RT_USING_HEAP)
- rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
-#endif
-
- /* Pin driver initialization is open by default */
-#ifdef RT_USING_PIN
- rt_hw_pin_init();
-#endif
-
- /* USART driver initialization is open by default */
-#ifdef RT_USING_SERIAL
- rt_hw_usart_init();
-#endif
-
-#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
- rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
-#endif
-
- /* Board underlying hardware initialization */
-#ifdef RT_USING_COMPONENTS_INIT
- rt_components_board_init();
-#endif
-}
-
-void rt_hw_us_delay(rt_uint32_t us)
-{
- uint32_t start, now, delta, reload, us_tick;
- start = SysTick->VAL;
- reload = SysTick->LOAD;
- us_tick = SystemCoreClock / 1000000UL;
-
- do
- {
- now = SysTick->VAL;
- delta = start > now ? start - now : reload + start - now;
- }
- while (delta < us_tick * us);
}
/*@}*/
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.h
index 73cc6b0f2b..12512a003f 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.h
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -20,12 +19,18 @@
extern "C" {
#endif
+
+#define HC32_FLASH_SIZE_GRANULARITY (8 * 1024)
+#define HC32_FLASH_SIZE (512 * 1024)
+#define HC32_FLASH_START_ADDRESS (0)
+#define HC32_FLASH_END_ADDRESS (HC32_FLASH_START_ADDRESS + HC32_FLASH_SIZE)
+
#define HC32_SRAM_SIZE (188)
#define HC32_SRAM_END (0x1FFF8000 + HC32_SRAM_SIZE * 1024)
#ifdef __ARMCC_VERSION
-extern int Image$$RW_IRAM1$$ZI$$Limit;
-#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit)
+extern int Image$$RW_IRAM2$$ZI$$Limit;
+#define HEAP_BEGIN (&Image$$RW_IRAM2$$ZI$$Limit)
#elif __ICCARM__
#pragma section="HEAP"
#define HEAP_BEGIN (__segment_end("HEAP"))
@@ -36,6 +41,11 @@ extern int __bss_end;
#define HEAP_END HC32_SRAM_END
+void PeripheralRegister_Unlock(void);
+void PeripheralClock_Config(void);
+void SystemBase_Config(void);
+void SystemClock_Config(void);
+
#ifdef __cplusplus
}
#endif
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.c b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.c
index 86d5e9ab25..9762947184 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.c
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.c
@@ -1,14 +1,11 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-04-28 CDT first version
- * 2022-06-16 lianghongquan use macro definition config adc pin.
- * 2022-06-28 lianghongquan add function rt_hw_board_pwm_tmra_init().
*/
#include
@@ -25,32 +22,18 @@ rt_err_t rt_hw_board_uart_init(CM_USART_TypeDef *USARTx)
switch ((rt_uint32_t)USARTx)
{
-#if defined(BSP_USING_UART1)
- case (rt_uint32_t)CM_USART1:
- /* Configure USART RX/TX pin. */
- GPIO_SetFunc(USART1_RX_PORT, USART1_RX_PIN, GPIO_FUNC_33);
- GPIO_SetFunc(USART1_TX_PORT, USART1_TX_PIN, GPIO_FUNC_32);
- break;
-#endif
#if defined(BSP_USING_UART2)
case (rt_uint32_t)CM_USART2:
/* Configure USART RX/TX pin. */
- GPIO_SetFunc(USART2_RX_PORT, USART2_RX_PIN, GPIO_FUNC_37);
- GPIO_SetFunc(USART2_TX_PORT, USART2_TX_PIN, GPIO_FUNC_36);
- break;
-#endif
-#if defined(BSP_USING_UART3)
- case (rt_uint32_t)CM_USART3:
- /* Configure USART RX/TX pin. */
- GPIO_SetFunc(USART3_RX_PORT, USART3_RX_PIN, GPIO_FUNC_33);
- GPIO_SetFunc(USART3_TX_PORT, USART3_TX_PIN, GPIO_FUNC_32);
+ GPIO_SetFunc(USART2_RX_PORT, USART2_RX_PIN, USART2_RX_FUNC);
+ GPIO_SetFunc(USART2_TX_PORT, USART2_TX_PIN, USART2_TX_FUNC);
break;
#endif
#if defined(BSP_USING_UART4)
case (rt_uint32_t)CM_USART4:
/* Configure USART RX/TX pin. */
- GPIO_SetFunc(USART4_RX_PORT, USART4_RX_PIN, GPIO_FUNC_37);
- GPIO_SetFunc(USART4_TX_PORT, USART4_TX_PIN, GPIO_FUNC_36);
+ GPIO_SetFunc(USART4_RX_PORT, USART4_RX_PIN, USART4_RX_FUNC);
+ GPIO_SetFunc(USART4_TX_PORT, USART4_TX_PIN, USART4_TX_FUNC);
break;
#endif
default:
@@ -62,33 +45,26 @@ rt_err_t rt_hw_board_uart_init(CM_USART_TypeDef *USARTx)
}
#endif
-#if defined(BSP_USING_CAN)
-void CanPhyEnable(void)
-{
-#if defined(BSP_USING_CAN1)
-#ifdef CAN1_STB_FUNC_ENABLE
- GPIO_ResetPins(CAN_STB_PORT, CAN_STB_PIN);
- GPIO_OutputCmd(CAN_STB_PORT, CAN_STB_PIN, ENABLE);
-#endif
-#endif
-}
-rt_err_t rt_hw_board_can_init(CM_CAN_TypeDef *CANx)
+#if defined(RT_USING_I2C)
+rt_err_t rt_hw_board_i2c_init(CM_I2C_TypeDef *I2Cx)
{
rt_err_t result = RT_EOK;
+ stc_gpio_init_t stcGpioInit;
+ (void)GPIO_StructInit(&stcGpioInit);
- switch ((rt_uint32_t)CANx)
+ switch ((rt_uint32_t)I2Cx)
{
-#if defined(BSP_USING_CAN1)
-case (rt_uint32_t)CM_CAN:
- GPIO_SetFunc(CAN1_TX_PORT, CAN1_TX_PIN, CAN1_TX_PIN_FUNC);
- GPIO_SetFunc(CAN1_RX_PORT, CAN1_RX_PIN, CAN1_RX_PIN_FUNC);
- break;
+#if defined(BSP_USING_I2C3)
+ case (rt_uint32_t)CM_I2C3:
+ /* Configure I2C3 SDA/SCL pin. */
+ GPIO_SetFunc(I2C3_SDA_PORT, I2C3_SDA_PIN, I2C3_SDA_FUNC);
+ GPIO_SetFunc(I2C3_SCL_PORT, I2C3_SCL_PIN, I2C3_SCL_FUNC);
+ break;
#endif
-default:
- result = -RT_ERROR;
- break;
+ default:
+ result = -RT_ERROR;
+ break;
}
-
return result;
}
#endif
@@ -105,14 +81,114 @@ rt_err_t rt_hw_board_adc_init(CM_ADC_TypeDef *ADCx)
{
#if defined(BSP_USING_ADC1)
case (rt_uint32_t)CM_ADC1:
- (void)GPIO_Init(ADC1_CH10_PORT, ADC1_CH10_PIN, &stcGpioInit);
- (void)GPIO_Init(ADC1_CH12_PORT, ADC1_CH12_PIN, &stcGpioInit);
- (void)GPIO_Init(ADC1_CH13_PORT, ADC1_CH13_PIN, &stcGpioInit);
+ (void)GPIO_Init(ADC1_CH_PORT, ADC1_CH_PIN, &stcGpioInit);
break;
#endif
#if defined(BSP_USING_ADC2)
case (rt_uint32_t)CM_ADC2:
- (void)GPIO_Init(ADC2_CH7_PORT, ADC2_CH7_PIN, &stcGpioInit);
+ (void)GPIO_Init(ADC2_CH_PORT, ADC2_CH_PIN, &stcGpioInit);
+ break;
+#endif
+ default:
+ result = -RT_ERROR;
+ break;
+ }
+
+ return result;
+}
+#endif
+
+#if defined(RT_USING_CAN)
+void CanPhyEnable(void)
+{
+ GPIO_ResetPins(CAN1_STB_PORT, CAN1_STB_PIN);
+ GPIO_OutputCmd(CAN1_STB_PORT, CAN1_STB_PIN, ENABLE);
+}
+rt_err_t rt_hw_board_can_init(CM_CAN_TypeDef *CANx)
+{
+ rt_err_t result = RT_EOK;
+
+ switch ((rt_uint32_t)CANx)
+ {
+#if defined(BSP_USING_CAN1)
+ case (rt_uint32_t)CM_CAN1:
+ GPIO_SetFunc(CAN1_TX_PORT, CAN1_TX_PIN, CAN1_TX_PIN_FUNC);
+ GPIO_SetFunc(CAN1_RX_PORT, CAN1_RX_PIN, CAN1_RX_PIN_FUNC);
+ break;
+#endif
+ default:
+ result = -RT_ERROR;
+ break;
+ }
+
+ return result;
+}
+#endif
+
+
+#if defined (RT_USING_SPI)
+rt_err_t rt_hw_spi_board_init(CM_SPI_TypeDef *CM_SPIx)
+{
+ rt_err_t result = RT_EOK;
+#if defined(BSP_USING_SPI3)
+ stc_gpio_init_t stcGpioInit;
+#endif
+
+ switch ((rt_uint32_t)CM_SPIx)
+ {
+#if defined(BSP_USING_SPI3)
+ case (rt_uint32_t)CM_SPI3:
+ GPIO_StructInit(&stcGpioInit);
+ stcGpioInit.u16PinState = PIN_STAT_SET;
+ stcGpioInit.u16PinDir = PIN_DIR_OUT;
+ GPIO_Init(SPI3_WP_PORT, SPI3_WP_PIN, &stcGpioInit);
+ GPIO_Init(SPI3_HOLD_PORT, SPI3_HOLD_PIN, &stcGpioInit);
+
+ (void)GPIO_StructInit(&stcGpioInit);
+ stcGpioInit.u16PinDrv = PIN_HIGH_DRV;
+ (void)GPIO_Init(SPI3_SCK_PORT, SPI3_SCK_PIN, &stcGpioInit);
+ (void)GPIO_Init(SPI3_MOSI_PORT, SPI3_MOSI_PIN, &stcGpioInit);
+ (void)GPIO_Init(SPI3_MISO_PORT, SPI3_MISO_PIN, &stcGpioInit);
+ GPIO_SetFunc(SPI3_SCK_PORT, SPI3_SCK_PIN, SPI3_SCK_FUNC);
+ GPIO_SetFunc(SPI3_MOSI_PORT, SPI3_MOSI_PIN, SPI3_MOSI_FUNC);
+ GPIO_SetFunc(SPI3_MISO_PORT, SPI3_MISO_PIN, SPI3_MISO_FUNC);
+ break;
+#endif
+ default:
+ result = -RT_ERROR;
+ break;
+ }
+
+ return result;
+}
+#endif
+
+#if defined (RT_USING_SDIO)
+rt_err_t rt_hw_board_sdio_init(CM_SDIOC_TypeDef *SDIOCx)
+{
+ rt_err_t result = RT_EOK;
+ stc_gpio_init_t stcGpioInit;
+
+ switch ((rt_uint32_t)SDIOCx)
+ {
+#if defined(BSP_USING_SDIO1)
+ case (rt_uint32_t)CM_SDIOC1:
+ /************************* Set pin drive capacity *************************/
+ (void)GPIO_StructInit(&stcGpioInit);
+ stcGpioInit.u16PinDrv = PIN_HIGH_DRV;
+ (void)GPIO_Init(SDIOC1_CK_PORT, SDIOC1_CK_PIN, &stcGpioInit);
+ (void)GPIO_Init(SDIOC1_CMD_PORT, SDIOC1_CMD_PIN, &stcGpioInit);
+ (void)GPIO_Init(SDIOC1_D0_PORT, SDIOC1_D0_PIN, &stcGpioInit);
+ (void)GPIO_Init(SDIOC1_D1_PORT, SDIOC1_D1_PIN, &stcGpioInit);
+ (void)GPIO_Init(SDIOC1_D2_PORT, SDIOC1_D2_PIN, &stcGpioInit);
+ (void)GPIO_Init(SDIOC1_D3_PORT, SDIOC1_D3_PIN, &stcGpioInit);
+
+ GPIO_SetFunc(SDIOC1_CK_PORT, SDIOC1_CK_PIN, SDIOC1_CK_FUNC);
+ GPIO_SetFunc(SDIOC1_CMD_PORT, SDIOC1_CMD_PIN, SDIOC1_CMD_FUNC);
+ GPIO_SetFunc(SDIOC1_D0_PORT, SDIOC1_D0_PIN, SDIOC1_D0_FUNC);
+ GPIO_SetFunc(SDIOC1_D1_PORT, SDIOC1_D1_PIN, SDIOC1_D1_FUNC);
+ GPIO_SetFunc(SDIOC1_D2_PORT, SDIOC1_D2_PIN, SDIOC1_D2_FUNC);
+ GPIO_SetFunc(SDIOC1_D3_PORT, SDIOC1_D3_PIN, SDIOC1_D3_FUNC);
break;
#endif
default:
@@ -125,177 +201,42 @@ rt_err_t rt_hw_board_adc_init(CM_ADC_TypeDef *ADCx)
#endif
#if defined(RT_USING_PWM)
+#if defined(BSP_USING_PWM_TMRA)
rt_err_t rt_hw_board_pwm_tmra_init(CM_TMRA_TypeDef *TMRAx)
{
rt_err_t result = RT_EOK;
switch ((rt_uint32_t)TMRAx)
{
-#if defined(BSP_USING_PWM_TMRA_1)
- case (rt_uint32_t)CM_TMRA_1:
- #ifdef BSP_USING_PWM_TMRA_1_CH1
- GPIO_SetFunc(PWM_TMRA_1_CH1_PORT, PWM_TMRA_1_CH1_PIN, PWM_TMRA_1_CH1_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_1_CH2
- GPIO_SetFunc(PWM_TMRA_1_CH2_PORT, PWM_TMRA_1_CH2_PIN, PWM_TMRA_1_CH2_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_1_CH3
- GPIO_SetFunc(PWM_TMRA_1_CH3_PORT, PWM_TMRA_1_CH3_PIN, PWM_TMRA_1_CH3_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_1_CH4
- GPIO_SetFunc(PWM_TMRA_1_CH4_PORT, PWM_TMRA_1_CH4_PIN, PWM_TMRA_1_CH4_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_1_CH5
- GPIO_SetFunc(PWM_TMRA_1_CH5_PORT, PWM_TMRA_1_CH5_PIN, PWM_TMRA_1_CH5_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_1_CH6
- GPIO_SetFunc(PWM_TMRA_1_CH6_PORT, PWM_TMRA_1_CH6_PIN, PWM_TMRA_1_CH6_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_1_CH7
- GPIO_SetFunc(PWM_TMRA_1_CH7_PORT, PWM_TMRA_1_CH7_PIN, PWM_TMRA_1_CH7_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_1_CH8
- GPIO_SetFunc(PWM_TMRA_1_CH8_PORT, PWM_TMRA_1_CH8_PIN, PWM_TMRA_1_CH8_PIN_FUNC);
- #endif
- break;
-#endif
-#if defined(BSP_USING_PWM_TMRA_2)
- case (rt_uint32_t)CM_TMRA_2:
- #ifdef BSP_USING_PWM_TMRA_2_CH1
- GPIO_SetFunc(PWM_TMRA_2_CH1_PORT, PWM_TMRA_2_CH1_PIN, PWM_TMRA_2_CH1_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_2_CH2
- GPIO_SetFunc(PWM_TMRA_2_CH2_PORT, PWM_TMRA_2_CH2_PIN, PWM_TMRA_2_CH2_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_2_CH3
- GPIO_SetFunc(PWM_TMRA_2_CH3_PORT, PWM_TMRA_2_CH3_PIN, PWM_TMRA_2_CH3_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_2_CH4
- GPIO_SetFunc(PWM_TMRA_2_CH4_PORT, PWM_TMRA_2_CH4_PIN, PWM_TMRA_2_CH4_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_2_CH5
- GPIO_SetFunc(PWM_TMRA_2_CH5_PORT, PWM_TMRA_2_CH5_PIN, PWM_TMRA_2_CH5_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_2_CH6
- GPIO_SetFunc(PWM_TMRA_2_CH6_PORT, PWM_TMRA_2_CH6_PIN, PWM_TMRA_2_CH6_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_2_CH7
- GPIO_SetFunc(PWM_TMRA_2_CH7_PORT, PWM_TMRA_2_CH7_PIN, PWM_TMRA_2_CH7_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_2_CH8
- GPIO_SetFunc(PWM_TMRA_2_CH8_PORT, PWM_TMRA_2_CH8_PIN, PWM_TMRA_2_CH8_PIN_FUNC);
- #endif
- break;
-#endif
-#if defined(BSP_USING_PWM_TMRA_3)
- case (rt_uint32_t)CM_TMRA_3:
- #ifdef BSP_USING_PWM_TMRA_3_CH1
- GPIO_SetFunc(PWM_TMRA_3_CH1_PORT, PWM_TMRA_3_CH1_PIN, PWM_TMRA_3_CH1_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_3_CH2
- GPIO_SetFunc(PWM_TMRA_3_CH2_PORT, PWM_TMRA_3_CH2_PIN, PWM_TMRA_3_CH2_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_3_CH3
- GPIO_SetFunc(PWM_TMRA_3_CH3_PORT, PWM_TMRA_3_CH3_PIN, PWM_TMRA_3_CH3_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_3_CH4
- GPIO_SetFunc(PWM_TMRA_3_CH4_PORT, PWM_TMRA_3_CH4_PIN, PWM_TMRA_3_CH4_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_3_CH5
- GPIO_SetFunc(PWM_TMRA_3_CH5_PORT, PWM_TMRA_3_CH5_PIN, PWM_TMRA_3_CH5_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_3_CH6
- GPIO_SetFunc(PWM_TMRA_3_CH6_PORT, PWM_TMRA_3_CH6_PIN, PWM_TMRA_3_CH6_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_3_CH7
- GPIO_SetFunc(PWM_TMRA_3_CH7_PORT, PWM_TMRA_3_CH7_PIN, PWM_TMRA_3_CH7_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_3_CH8
- GPIO_SetFunc(PWM_TMRA_3_CH8_PORT, PWM_TMRA_3_CH8_PIN, PWM_TMRA_3_CH8_PIN_FUNC);
- #endif
- break;
-#endif
#if defined(BSP_USING_PWM_TMRA_4)
case (rt_uint32_t)CM_TMRA_4:
- #ifdef BSP_USING_PWM_TMRA_4_CH1
+#ifdef BSP_USING_PWM_TMRA_4_CH1
GPIO_SetFunc(PWM_TMRA_4_CH1_PORT, PWM_TMRA_4_CH1_PIN, PWM_TMRA_4_CH1_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_4_CH2
+#endif
+#ifdef BSP_USING_PWM_TMRA_4_CH2
GPIO_SetFunc(PWM_TMRA_4_CH2_PORT, PWM_TMRA_4_CH2_PIN, PWM_TMRA_4_CH2_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_4_CH3
+#endif
+#ifdef BSP_USING_PWM_TMRA_4_CH3
GPIO_SetFunc(PWM_TMRA_4_CH3_PORT, PWM_TMRA_4_CH3_PIN, PWM_TMRA_4_CH3_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_4_CH4
+#endif
+#ifdef BSP_USING_PWM_TMRA_4_CH4
GPIO_SetFunc(PWM_TMRA_4_CH4_PORT, PWM_TMRA_4_CH4_PIN, PWM_TMRA_4_CH4_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_4_CH5
- GPIO_SetFunc(PWM_TMRA_4_CH5_PORT, PWM_TMRA_4_CH5_PIN, PWM_TMRA_4_CH5_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_4_CH6
- GPIO_SetFunc(PWM_TMRA_4_CH6_PORT, PWM_TMRA_4_CH6_PIN, PWM_TMRA_4_CH6_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_4_CH7
- GPIO_SetFunc(PWM_TMRA_4_CH7_PORT, PWM_TMRA_4_CH7_PIN, PWM_TMRA_4_CH7_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_4_CH8
- GPIO_SetFunc(PWM_TMRA_4_CH8_PORT, PWM_TMRA_4_CH8_PIN, PWM_TMRA_4_CH8_PIN_FUNC);
- #endif
+#endif
break;
#endif
#if defined(BSP_USING_PWM_TMRA_5)
case (rt_uint32_t)CM_TMRA_5:
- #ifdef BSP_USING_PWM_TMRA_5_CH1
+#ifdef BSP_USING_PWM_TMRA_5_CH1
GPIO_SetFunc(PWM_TMRA_5_CH1_PORT, PWM_TMRA_5_CH1_PIN, PWM_TMRA_5_CH1_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_5_CH2
- GPIO_SetFunc(PWM_TMRA_5_CH2_PORT, PWM_TMRA_5_CH2_PIN, PWM_TMRA_5_CH2_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_5_CH3
- GPIO_SetFunc(PWM_TMRA_5_CH3_PORT, PWM_TMRA_5_CH3_PIN, PWM_TMRA_5_CH3_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_5_CH4
- GPIO_SetFunc(PWM_TMRA_5_CH4_PORT, PWM_TMRA_5_CH4_PIN, PWM_TMRA_5_CH4_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_5_CH5
- GPIO_SetFunc(PWM_TMRA_5_CH5_PORT, PWM_TMRA_5_CH5_PIN, PWM_TMRA_5_CH5_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_5_CH6
- GPIO_SetFunc(PWM_TMRA_5_CH6_PORT, PWM_TMRA_5_CH6_PIN, PWM_TMRA_5_CH6_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_5_CH7
- GPIO_SetFunc(PWM_TMRA_5_CH7_PORT, PWM_TMRA_5_CH7_PIN, PWM_TMRA_5_CH7_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_5_CH8
- GPIO_SetFunc(PWM_TMRA_5_CH8_PORT, PWM_TMRA_5_CH8_PIN, PWM_TMRA_5_CH8_PIN_FUNC);
- #endif
- break;
#endif
-#if defined(BSP_USING_PWM_TMRA_6)
- case (rt_uint32_t)CM_TMRA_6:
- #ifdef BSP_USING_PWM_TMRA_6_CH1
- GPIO_SetFunc(PWM_TMRA_6_CH1_PORT, PWM_TMRA_6_CH1_PIN, PWM_TMRA_6_CH1_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_6_CH2
- GPIO_SetFunc(PWM_TMRA_6_CH2_PORT, PWM_TMRA_6_CH2_PIN, PWM_TMRA_6_CH2_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_6_CH3
- GPIO_SetFunc(PWM_TMRA_6_CH3_PORT, PWM_TMRA_6_CH3_PIN, PWM_TMRA_6_CH3_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_6_CH4
- GPIO_SetFunc(PWM_TMRA_6_CH4_PORT, PWM_TMRA_6_CH4_PIN, PWM_TMRA_6_CH4_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_6_CH5
- GPIO_SetFunc(PWM_TMRA_6_CH5_PORT, PWM_TMRA_6_CH5_PIN, PWM_TMRA_6_CH5_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_6_CH6
- GPIO_SetFunc(PWM_TMRA_6_CH6_PORT, PWM_TMRA_6_CH6_PIN, PWM_TMRA_6_CH6_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_6_CH7
- GPIO_SetFunc(PWM_TMRA_6_CH7_PORT, PWM_TMRA_6_CH7_PIN, PWM_TMRA_6_CH7_PIN_FUNC);
- #endif
- #ifdef BSP_USING_PWM_TMRA_6_CH8
- GPIO_SetFunc(PWM_TMRA_6_CH8_PORT, PWM_TMRA_6_CH8_PIN, PWM_TMRA_6_CH8_PIN_FUNC);
- #endif
+#ifdef BSP_USING_PWM_TMRA_5_CH2
+ GPIO_SetFunc(PWM_TMRA_5_CH2_PORT, PWM_TMRA_5_CH2_PIN, PWM_TMRA_5_CH2_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMRA_5_CH3
+ GPIO_SetFunc(PWM_TMRA_5_CH3_PORT, PWM_TMRA_5_CH3_PIN, PWM_TMRA_5_CH3_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMRA_5_CH4
+ GPIO_SetFunc(PWM_TMRA_5_CH4_PORT, PWM_TMRA_5_CH4_PIN, PWM_TMRA_5_CH4_PIN_FUNC);
+#endif
break;
#endif
default:
@@ -306,3 +247,154 @@ rt_err_t rt_hw_board_pwm_tmra_init(CM_TMRA_TypeDef *TMRAx)
return result;
}
#endif
+
+#if defined(BSP_USING_PWM_TMR4)
+rt_err_t rt_hw_board_pwm_tmr4_init(CM_TMR4_TypeDef *TMR4x)
+{
+ rt_err_t result = RT_EOK;
+ switch ((rt_uint32_t)TMR4x)
+ {
+#if defined(BSP_USING_PWM_TMR4_1)
+ case (rt_uint32_t)CM_TMR4_1:
+#ifdef BSP_USING_PWM_TMR4_1_OUH
+ GPIO_SetFunc(PWM_TMR4_1_OUH_PORT, PWM_TMR4_1_OUH_PIN, PWM_TMR4_1_OUH_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMR4_1_OUL
+ GPIO_SetFunc(PWM_TMR4_1_OUL_PORT, PWM_TMR4_1_OUL_PIN, PWM_TMR4_1_OUL_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMR4_1_OVH
+ GPIO_SetFunc(PWM_TMR4_1_OVH_PORT, PWM_TMR4_1_OVH_PIN, PWM_TMR4_1_OVH_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMR4_1_OVL
+ GPIO_SetFunc(PWM_TMR4_1_OVL_PORT, PWM_TMR4_1_OVL_PIN, PWM_TMR4_1_OVL_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMR4_1_OWH
+ GPIO_SetFunc(PWM_TMR4_1_OWH_PORT, PWM_TMR4_1_OWH_PIN, PWM_TMR4_1_OWH_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMR4_1_OWL
+ GPIO_SetFunc(PWM_TMR4_1_OWL_PORT, PWM_TMR4_1_OWL_PIN, PWM_TMR4_1_OWL_PIN_FUNC);
+#endif
+ break;
+#endif
+ default:
+ result = -RT_ERROR;
+ break;
+ }
+ return result;
+}
+#endif
+
+#if defined(BSP_USING_PWM_TMR6)
+rt_err_t rt_hw_board_pwm_tmr6_init(CM_TMR6_TypeDef *TMR6x)
+{
+ rt_err_t result = RT_EOK;
+ switch ((rt_uint32_t)TMR6x)
+ {
+#if defined(BSP_USING_PWM_TMR6_1)
+ case (rt_uint32_t)CM_TMR6_1:
+#ifdef BSP_USING_PWM_TMR6_1_A
+ GPIO_SetFunc(PWM_TMR6_1_A_PORT, PWM_TMR6_1_A_PIN, PWM_TMR6_1_A_PIN_FUNC);
+#endif
+#ifdef BSP_USING_PWM_TMR6_1_B
+ GPIO_SetFunc(PWM_TMR6_1_B_PORT, PWM_TMR6_1_B_PIN, PWM_TMR6_1_B_PIN_FUNC);
+#endif
+ break;
+#endif
+ default:
+ result = -RT_ERROR;
+ break;
+ }
+
+ return result;
+}
+#endif
+#endif
+
+#ifdef RT_USING_PM
+void rt_hw_board_pm_sysclk_cfg(uint8_t run_mode)
+{
+ switch (run_mode)
+ {
+ case PM_RUN_MODE_HIGH_SPEED:
+ case PM_RUN_MODE_NORMAL_SPEED:
+ SystemClock_Config();
+ break;
+
+ case PM_RUN_MODE_LOW_SPEED:
+ CLK_SetSysClockSrc(CLK_SYSCLK_SRC_XTAL);
+
+ default:
+ break;
+ }
+}
+#endif
+
+#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
+rt_err_t rt_hw_usb_board_init(void)
+{
+ stc_gpio_init_t stcGpioCfg;
+ (void)GPIO_StructInit(&stcGpioCfg);
+#if defined(BSP_USING_USBFS)
+ stcGpioCfg.u16PinAttr = PIN_ATTR_ANALOG;
+ (void)GPIO_Init(USBF_DM_PORT, USBF_DM_PIN, &stcGpioCfg);
+ (void)GPIO_Init(USBF_DP_PORT, USBF_DP_PIN, &stcGpioCfg);
+#if defined(BSP_USING_USBD)
+ GPIO_SetFunc(USBF_VBUS_PORT, USBF_VBUS_PIN, USBF_VBUS_FUNC); /* VBUS */
+#endif
+#if defined(BSP_USING_USBH)
+ GPIO_SetFunc(USBF_DRVVBUS_PORT, USBF_DRVVBUS_PIN, USBF_DRVVBUS_FUNC); /* DRV VBUS */
+#endif
+#endif
+ return RT_EOK;
+}
+#endif
+
+#if defined(BSP_USING_QSPI)
+rt_err_t rt_hw_qspi_board_init(void)
+{
+ stc_gpio_init_t stcGpioInit;
+
+ (void)GPIO_StructInit(&stcGpioInit);
+ stcGpioInit.u16PinDrv = PIN_HIGH_DRV;
+#ifndef BSP_QSPI_USING_SOFT_CS
+ (void)GPIO_Init(QSPI_FLASH_CS_PORT, QSPI_FLASH_CS_PIN, &stcGpioInit);
+ GPIO_SetFunc(QSPI_FLASH_CS_PORT, QSPI_FLASH_CS_PIN, QSPI_FLASH_CS_FUNC);
+#endif
+ (void)GPIO_Init(QSPI_FLASH_SCK_PORT, QSPI_FLASH_SCK_PIN, &stcGpioInit);
+ (void)GPIO_Init(QSPI_FLASH_IO0_PORT, QSPI_FLASH_IO0_PIN, &stcGpioInit);
+ (void)GPIO_Init(QSPI_FLASH_IO1_PORT, QSPI_FLASH_IO1_PIN, &stcGpioInit);
+ (void)GPIO_Init(QSPI_FLASH_IO2_PORT, QSPI_FLASH_IO2_PIN, &stcGpioInit);
+ (void)GPIO_Init(QSPI_FLASH_IO3_PORT, QSPI_FLASH_IO3_PIN, &stcGpioInit);
+ GPIO_SetFunc(QSPI_FLASH_SCK_PORT, QSPI_FLASH_SCK_PIN, QSPI_FLASH_SCK_FUNC);
+ GPIO_SetFunc(QSPI_FLASH_IO0_PORT, QSPI_FLASH_IO0_PIN, QSPI_FLASH_IO0_FUNC);
+ GPIO_SetFunc(QSPI_FLASH_IO1_PORT, QSPI_FLASH_IO1_PIN, QSPI_FLASH_IO1_FUNC);
+ GPIO_SetFunc(QSPI_FLASH_IO2_PORT, QSPI_FLASH_IO2_PIN, QSPI_FLASH_IO2_FUNC);
+ GPIO_SetFunc(QSPI_FLASH_IO3_PORT, QSPI_FLASH_IO3_PIN, QSPI_FLASH_IO3_FUNC);
+
+ return RT_EOK;
+}
+#endif
+
+#if defined(BSP_USING_TMRA_PULSE_ENCODER)
+rt_err_t rt_hw_board_pulse_encoder_tmra_init(void)
+{
+#if defined(BSP_USING_PULSE_ENCODER_TMRA_1)
+ GPIO_SetFunc(PULSE_ENCODER_TMRA_1_A_PORT, PULSE_ENCODER_TMRA_1_A_PIN, PULSE_ENCODER_TMRA_1_A_PIN_FUNC);
+ GPIO_SetFunc(PULSE_ENCODER_TMRA_1_B_PORT, PULSE_ENCODER_TMRA_1_B_PIN, PULSE_ENCODER_TMRA_1_B_PIN_FUNC);
+#endif
+
+ return RT_EOK;
+}
+#endif
+
+#if defined(BSP_USING_TMR6_PULSE_ENCODER)
+rt_err_t rt_hw_board_pulse_encoder_tmr6_init(void)
+{
+#if defined(BSP_USING_PULSE_ENCODER_TMR6_1)
+ GPIO_SetFunc(PULSE_ENCODER_TMR6_1_A_PORT, PULSE_ENCODER_TMR6_1_A_PIN, PULSE_ENCODER_TMR6_1_A_PIN_FUNC);
+ GPIO_SetFunc(PULSE_ENCODER_TMR6_1_B_PORT, PULSE_ENCODER_TMR6_1_B_PIN, PULSE_ENCODER_TMR6_1_B_PIN_FUNC);
+#endif
+
+ return RT_EOK;
+}
+#endif
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.h
index 3fbc1c33c3..6aef552f54 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/board_config.h
@@ -1,14 +1,11 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-04-28 CDT first version
- * 2022-06-16 lianghongquan use macro definition config adc pin.
- * 2022-06-28 lianghongquan add PWM_TMRA pin define.
*/
@@ -20,81 +17,296 @@
#include "drv_config.h"
+/************************* XTAL port **********************/
+#define XTAL_PORT (GPIO_PORT_H)
+#define XTAL_IN_PIN (GPIO_PIN_01)
+#define XTAL_OUT_PIN (GPIO_PIN_00)
+
/************************ USART port **********************/
-#if defined(BSP_USING_UART1)
- #define USART1_RX_PORT (GPIO_PORT_C)
- #define USART1_RX_PIN (GPIO_PIN_04)
-
- #define USART1_TX_PORT (GPIO_PORT_A)
- #define USART1_TX_PIN (GPIO_PIN_07)
-#endif
-
#if defined(BSP_USING_UART2)
#define USART2_RX_PORT (GPIO_PORT_A)
#define USART2_RX_PIN (GPIO_PIN_03)
+ #define USART2_RX_FUNC (GPIO_FUNC_37)
#define USART2_TX_PORT (GPIO_PORT_A)
#define USART2_TX_PIN (GPIO_PIN_02)
-#endif
-
-#if defined(BSP_USING_UART3)
- #define USART3_RX_PORT (GPIO_PORT_C)
- #define USART3_RX_PIN (GPIO_PIN_13)
-
- #define USART3_TX_PORT (GPIO_PORT_H)
- #define USART3_TX_PIN (GPIO_PIN_02)
+ #define USART2_TX_FUNC (GPIO_FUNC_36)
#endif
#if defined(BSP_USING_UART4)
#define USART4_RX_PORT (GPIO_PORT_B)
#define USART4_RX_PIN (GPIO_PIN_09)
+ #define USART4_RX_FUNC (GPIO_FUNC_37)
#define USART4_TX_PORT (GPIO_PORT_E)
#define USART4_TX_PIN (GPIO_PIN_06)
+ #define USART4_TX_FUNC (GPIO_FUNC_36)
#endif
-/*********** CAN configure *********/
-#if defined(BSP_USING_CAN1)
- #define CAN1_TX_PORT (GPIO_PORT_B)
- #define CAN1_TX_PIN (GPIO_PIN_07)
- #define CAN1_TX_PIN_FUNC (GPIO_FUNC_50)
+/************************ I2C port **********************/
+#if defined(BSP_USING_I2C3)
+ #define I2C3_SDA_PORT (GPIO_PORT_B)
+ #define I2C3_SDA_PIN (GPIO_PIN_05)
+ #define I2C3_SDA_FUNC (GPIO_FUNC_48)
- #define CAN1_RX_PORT (GPIO_PORT_B)
- #define CAN1_RX_PIN (GPIO_PIN_06)
- #define CAN1_RX_PIN_FUNC (GPIO_FUNC_51)
-
- #define CAN1_STB_FUNC_ENABLE
- #define CAN_STB_PORT (GPIO_PORT_D)
- #define CAN_STB_PIN (GPIO_PIN_15)
+ #define I2C3_SCL_PORT (GPIO_PORT_E)
+ #define I2C3_SCL_PIN (GPIO_PIN_15)
+ #define I2C3_SCL_FUNC (GPIO_FUNC_49)
#endif
/*********** ADC configure *********/
#if defined(BSP_USING_ADC1)
- #define ADC1_CH10_PORT (GPIO_PORT_C)
- #define ADC1_CH10_PIN (GPIO_PIN_00)
-
- #define ADC1_CH12_PORT (GPIO_PORT_C)
- #define ADC1_CH12_PIN (GPIO_PIN_02)
-
- #define ADC1_CH13_PORT (GPIO_PORT_C)
- #define ADC1_CH13_PIN (GPIO_PIN_03)
+ #define ADC1_CH_PORT (GPIO_PORT_C)
+ #define ADC1_CH_PIN (GPIO_PIN_00)
#endif
#if defined(BSP_USING_ADC2)
- //ADC2 has 7 channels CH0-CH7. ADC12_IN4-ADC12_IN11 means ADC2 CH0-CH7
- #define ADC2_CH7_PORT (GPIO_PORT_C)
- #define ADC2_CH7_PIN (GPIO_PIN_01)
+ #define ADC2_CH_PORT (GPIO_PORT_C)
+ #define ADC2_CH_PIN (GPIO_PIN_01)
#endif
-/*********** PWM_TMRA configure *********/
-#if defined(BSP_USING_PWM_TMRA_4)
- #define PWM_TMRA_4_CH7_PORT (GPIO_PORT_H)
- #define PWM_TMRA_4_CH7_PIN (GPIO_PIN_02)
- #define PWM_TMRA_4_CH7_PIN_FUNC (GPIO_FUNC_4)
+/*********** CAN configure *********/
+#if defined(BSP_USING_CAN1)
+ #define CAN1_TX_PORT (GPIO_PORT_B)
+ #define CAN1_TX_PIN (GPIO_PIN_07)
+ #define CAN1_TX_PIN_FUNC (GPIO_FUNC_50)
- #define PWM_TMRA_4_CH8_PORT (GPIO_PORT_C)
- #define PWM_TMRA_4_CH8_PIN (GPIO_PIN_13)
- #define PWM_TMRA_4_CH8_PIN_FUNC (GPIO_FUNC_4)
+ #define CAN1_RX_PORT (GPIO_PORT_B)
+ #define CAN1_RX_PIN (GPIO_PIN_06)
+ #define CAN1_RX_PIN_FUNC (GPIO_FUNC_51)
+
+ #define CAN1_STB_PORT (GPIO_PORT_D)
+ #define CAN1_STB_PIN (GPIO_PIN_15)
#endif
+/************************* SPI port ***********************/
+#if defined(BSP_USING_SPI3)
+ #define SPI3_CS_PORT (GPIO_PORT_C)
+ #define SPI3_CS_PIN (GPIO_PIN_07)
+
+ #define SPI3_SCK_PORT (GPIO_PORT_C)
+ #define SPI3_SCK_PIN (GPIO_PIN_06)
+ #define SPI3_SCK_FUNC (GPIO_FUNC_43)
+
+ #define SPI3_MOSI_PORT (GPIO_PORT_D)
+ #define SPI3_MOSI_PIN (GPIO_PIN_08)
+ #define SPI3_MOSI_FUNC (GPIO_FUNC_40)
+
+ #define SPI3_MISO_PORT (GPIO_PORT_D)
+ #define SPI3_MISO_PIN (GPIO_PIN_09)
+ #define SPI3_MISO_FUNC (GPIO_FUNC_41)
+
+ #define SPI3_WP_PORT (GPIO_PORT_D)
+ #define SPI3_WP_PIN (GPIO_PIN_10)
+
+ #define SPI3_HOLD_PORT (GPIO_PORT_D)
+ #define SPI3_HOLD_PIN (GPIO_PIN_11)
#endif
+
+/************************ SDIOC port **********************/
+#if defined(BSP_USING_SDIO1)
+ #define SDIOC1_CK_PORT (GPIO_PORT_C)
+ #define SDIOC1_CK_PIN (GPIO_PIN_12)
+ #define SDIOC1_CK_FUNC (GPIO_FUNC_9)
+
+ #define SDIOC1_CMD_PORT (GPIO_PORT_D)
+ #define SDIOC1_CMD_PIN (GPIO_PIN_02)
+ #define SDIOC1_CMD_FUNC (GPIO_FUNC_9)
+
+ #define SDIOC1_D0_PORT (GPIO_PORT_C)
+ #define SDIOC1_D0_PIN (GPIO_PIN_08)
+ #define SDIOC1_D0_FUNC (GPIO_FUNC_9)
+
+ #define SDIOC1_D1_PORT (GPIO_PORT_C)
+ #define SDIOC1_D1_PIN (GPIO_PIN_09)
+ #define SDIOC1_D1_FUNC (GPIO_FUNC_9)
+
+ #define SDIOC1_D2_PORT (GPIO_PORT_C)
+ #define SDIOC1_D2_PIN (GPIO_PIN_10)
+ #define SDIOC1_D2_FUNC (GPIO_FUNC_9)
+
+ #define SDIOC1_D3_PORT (GPIO_PORT_C)
+ #define SDIOC1_D3_PIN (GPIO_PIN_11)
+ #define SDIOC1_D3_FUNC (GPIO_FUNC_9)
+#endif
+
+/************************ RTC/PM *****************************/
+#if defined(BSP_USING_RTC) || defined(RT_USING_PM)
+ #if defined(BSP_RTC_USING_XTAL32) || defined(RT_USING_PM)
+ #define XTAL32_PORT (GPIO_PORT_C)
+ #define XTAL32_IN_PIN (GPIO_PIN_15)
+ #define XTAL32_OUT_PIN (GPIO_PIN_14)
+ #endif
+#endif
+
+#if defined(RT_USING_PWM)
+ /*********** PWM_TMRA configure *********/
+ #if defined(BSP_USING_PWM_TMRA_4)
+ #if defined(BSP_USING_PWM_TMRA_4_CH1)
+ #define PWM_TMRA_4_CH1_PORT (GPIO_PORT_D)
+ #define PWM_TMRA_4_CH1_PIN (GPIO_PIN_12)
+ #define PWM_TMRA_4_CH1_PIN_FUNC (GPIO_FUNC_4)
+ #endif
+ #if defined(BSP_USING_PWM_TMRA_4_CH2)
+ #define PWM_TMRA_4_CH2_PORT (GPIO_PORT_D)
+ #define PWM_TMRA_4_CH2_PIN (GPIO_PIN_13)
+ #define PWM_TMRA_4_CH2_PIN_FUNC (GPIO_FUNC_4)
+ #endif
+ #if defined(BSP_USING_PWM_TMRA_4_CH3)
+ #define PWM_TMRA_4_CH3_PORT (GPIO_PORT_D)
+ #define PWM_TMRA_4_CH3_PIN (GPIO_PIN_14)
+ #define PWM_TMRA_4_CH3_PIN_FUNC (GPIO_FUNC_4)
+ #endif
+ #if defined(BSP_USING_PWM_TMRA_4_CH4)
+ #define PWM_TMRA_4_CH4_PORT (GPIO_PORT_D)
+ #define PWM_TMRA_4_CH4_PIN (GPIO_PIN_15)
+ #define PWM_TMRA_4_CH4_PIN_FUNC (GPIO_FUNC_4)
+ #endif
+ #endif
+
+ #if defined(BSP_USING_PWM_TMRA_5)
+ #if defined(BSP_USING_PWM_TMRA_5_CH1)
+ #define PWM_TMRA_5_CH1_PORT (GPIO_PORT_C)
+ #define PWM_TMRA_5_CH1_PIN (GPIO_PIN_10)
+ #define PWM_TMRA_5_CH1_PIN_FUNC (GPIO_FUNC_5)
+ #endif
+ #if defined(BSP_USING_PWM_TMRA_5_CH2)
+ #define PWM_TMRA_5_CH2_PORT (GPIO_PORT_C)
+ #define PWM_TMRA_5_CH2_PIN (GPIO_PIN_11)
+ #define PWM_TMRA_5_CH2_PIN_FUNC (GPIO_FUNC_5)
+ #endif
+ #if defined(BSP_USING_PWM_TMRA_5_CH3)
+ #define PWM_TMRA_5_CH3_PORT (GPIO_PORT_C)
+ #define PWM_TMRA_5_CH3_PIN (GPIO_PIN_12)
+ #define PWM_TMRA_5_CH3_PIN_FUNC (GPIO_FUNC_5)
+ #endif
+ #if defined(BSP_USING_PWM_TMRA_5_CH4)
+ #define PWM_TMRA_5_CH4_PORT (GPIO_PORT_D)
+ #define PWM_TMRA_5_CH4_PIN (GPIO_PIN_00)
+ #define PWM_TMRA_5_CH4_PIN_FUNC (GPIO_FUNC_5)
+ #endif
+ #endif
+
+ /*********** PWM_TMR4 configure *********/
+ #if defined(BSP_USING_PWM_TMR4_1)
+ #if defined(BSP_USING_PWM_TMR4_1_OUH)
+ #define PWM_TMR4_1_OUH_PORT (GPIO_PORT_E)
+ #define PWM_TMR4_1_OUH_PIN (GPIO_PIN_09)
+ #define PWM_TMR4_1_OUH_PIN_FUNC (GPIO_FUNC_2)
+ #endif
+ #if defined(BSP_USING_PWM_TMR4_1_OUL)
+ #define PWM_TMR4_1_OUL_PORT (GPIO_PORT_E)
+ #define PWM_TMR4_1_OUL_PIN (GPIO_PIN_08)
+ #define PWM_TMR4_1_OUL_PIN_FUNC (GPIO_FUNC_2)
+ #endif
+ #if defined(BSP_USING_PWM_TMR4_1_OVH)
+ #define PWM_TMR4_1_OVH_PORT (GPIO_PORT_E)
+ #define PWM_TMR4_1_OVH_PIN (GPIO_PIN_11)
+ #define PWM_TMR4_1_OVH_PIN_FUNC (GPIO_FUNC_2)
+ #endif
+ #if defined(BSP_USING_PWM_TMR4_1_OVL)
+ #define PWM_TMR4_1_OVL_PORT (GPIO_PORT_E)
+ #define PWM_TMR4_1_OVL_PIN (GPIO_PIN_10)
+ #define PWM_TMR4_1_OVL_PIN_FUNC (GPIO_FUNC_2)
+ #endif
+ #if defined(BSP_USING_PWM_TMR4_1_OWH)
+ #define PWM_TMR4_1_OWH_PORT (GPIO_PORT_E)
+ #define PWM_TMR4_1_OWH_PIN (GPIO_PIN_13)
+ #define PWM_TMR4_1_OWH_PIN_FUNC (GPIO_FUNC_2)
+ #endif
+ #if defined(BSP_USING_PWM_TMR4_1_OWL)
+ #define PWM_TMR4_1_OWL_PORT (GPIO_PORT_E)
+ #define PWM_TMR4_1_OWL_PIN (GPIO_PIN_12)
+ #define PWM_TMR4_1_OWL_PIN_FUNC (GPIO_FUNC_2)
+ #endif
+ #endif
+
+ /*********** PWM_TMR6 configure *********/
+ #if defined(BSP_USING_PWM_TMR6_1)
+ #if defined(BSP_USING_PWM_TMR6_1_A)
+ #define PWM_TMR6_1_A_PORT (GPIO_PORT_A)
+ #define PWM_TMR6_1_A_PIN (GPIO_PIN_08)
+ #define PWM_TMR6_1_A_PIN_FUNC (GPIO_FUNC_3)
+ #endif
+ #if defined(BSP_USING_PWM_TMR6_1_B)
+ #define PWM_TMR6_1_B_PORT (GPIO_PORT_A)
+ #define PWM_TMR6_1_B_PIN (GPIO_PIN_07)
+ #define PWM_TMR6_1_B_PIN_FUNC (GPIO_FUNC_3)
+ #endif
+ #endif
+#endif
+
+#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
+ #if defined(BSP_USING_USBFS)
+ /* USBFS Core*/
+ #define USBF_DP_PORT (GPIO_PORT_A)
+ #define USBF_DP_PIN (GPIO_PIN_12)
+ #define USBF_DP_FUNC (GPIO_FUNC_10)
+ #define USBF_DM_PORT (GPIO_PORT_A)
+ #define USBF_DM_PIN (GPIO_PIN_11)
+ #define USBF_DM_FUNC (GPIO_FUNC_10)
+ #define USBF_VBUS_PORT (GPIO_PORT_A)
+ #define USBF_VBUS_PIN (GPIO_PIN_09)
+ #define USBF_VBUS_FUNC (GPIO_FUNC_10)
+ #define USBF_DRVVBUS_PORT (GPIO_PORT_B)
+ #define USBF_DRVVBUS_PIN (GPIO_PIN_08)
+ #define USBF_DRVVBUS_FUNC (GPIO_FUNC_10)
+ #endif
+#endif
+
+#if defined(BSP_USING_QSPI)
+ #ifndef BSP_QSPI_USING_SOFT_CS
+ /* QSSN */
+ #define QSPI_FLASH_CS_PORT (GPIO_PORT_C)
+ #define QSPI_FLASH_CS_PIN (GPIO_PIN_07)
+ #define QSPI_FLASH_CS_FUNC (GPIO_FUNC_7)
+ #endif
+ /* QSCK */
+ #define QSPI_FLASH_SCK_PORT (GPIO_PORT_C)
+ #define QSPI_FLASH_SCK_PIN (GPIO_PIN_06)
+ #define QSPI_FLASH_SCK_FUNC (GPIO_FUNC_7)
+ /* QSIO0 */
+ #define QSPI_FLASH_IO0_PORT (GPIO_PORT_D)
+ #define QSPI_FLASH_IO0_PIN (GPIO_PIN_08)
+ #define QSPI_FLASH_IO0_FUNC (GPIO_FUNC_7)
+ /* QSIO1 */
+ #define QSPI_FLASH_IO1_PORT (GPIO_PORT_D)
+ #define QSPI_FLASH_IO1_PIN (GPIO_PIN_09)
+ #define QSPI_FLASH_IO1_FUNC (GPIO_FUNC_7)
+ /* QSIO2 */
+ #define QSPI_FLASH_IO2_PORT (GPIO_PORT_D)
+ #define QSPI_FLASH_IO2_PIN (GPIO_PIN_10)
+ #define QSPI_FLASH_IO2_FUNC (GPIO_FUNC_7)
+ /* QSIO3 */
+ #define QSPI_FLASH_IO3_PORT (GPIO_PORT_D)
+ #define QSPI_FLASH_IO3_PIN (GPIO_PIN_11)
+ #define QSPI_FLASH_IO3_FUNC (GPIO_FUNC_7)
+#endif
+
+/*********** TMRA_PULSE_ENCODER configure *********/
+#if defined(RT_USING_PULSE_ENCODER)
+ #if defined(BSP_USING_TMRA_PULSE_ENCODER)
+ #if defined(BSP_USING_PULSE_ENCODER_TMRA_1)
+ #define PULSE_ENCODER_TMRA_1_A_PORT (GPIO_PORT_A)
+ #define PULSE_ENCODER_TMRA_1_A_PIN (GPIO_PIN_08)
+ #define PULSE_ENCODER_TMRA_1_A_PIN_FUNC (GPIO_FUNC_4)
+ #define PULSE_ENCODER_TMRA_1_B_PORT (GPIO_PORT_A)
+ #define PULSE_ENCODER_TMRA_1_B_PIN (GPIO_PIN_09)
+ #define PULSE_ENCODER_TMRA_1_B_PIN_FUNC (GPIO_FUNC_4)
+ #endif /* BSP_USING_PULSE_ENCODER_TMRA_1 */
+ #endif /* BSP_USING_TMRA_PULSE_ENCODER */
+
+ #if defined(BSP_USING_TMR6_PULSE_ENCODER)
+ #if defined(BSP_USING_PULSE_ENCODER_TMR6_1)
+ #define PULSE_ENCODER_TMR6_1_A_PORT (GPIO_PORT_E)
+ #define PULSE_ENCODER_TMR6_1_A_PIN (GPIO_PIN_09)
+ #define PULSE_ENCODER_TMR6_1_A_PIN_FUNC (GPIO_FUNC_3)
+ #define PULSE_ENCODER_TMR6_1_B_PORT (GPIO_PORT_E)
+ #define PULSE_ENCODER_TMR6_1_B_PIN (GPIO_PIN_08)
+ #define PULSE_ENCODER_TMR6_1_B_PIN_FUNC (GPIO_FUNC_3)
+ #endif /* BSP_USING_PULSE_ENCODER_TMR6_1 */
+ #endif /* BSP_USING_TMR6_PULSE_ENCODER */
+#endif /* RT_USING_PULSE_ENCODER */
+
+#endif
+
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/adc_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/adc_config.h
index 25c87f4828..a726441a8f 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/adc_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/adc_config.h
@@ -1,13 +1,11 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
- * Copyright (c) 2022, xiaoxiaolisunny
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
- * Date Author Notes
- * 2022-06-07 xiaoxiaolisunny first version
+ * Date Author Notes
+ * 2022-04-28 CDT first version
*/
#ifndef __ADC_CONFIG_H__
@@ -25,6 +23,7 @@ extern "C" {
#define ADC1_INIT_PARAMS \
{ \
.name = "adc1", \
+ .vref = 3300, \
.resolution = ADC_RESOLUTION_12BIT, \
.data_align = ADC_DATAALIGN_RIGHT, \
.eoc_poll_time_max = 100, \
@@ -47,6 +46,7 @@ extern "C" {
#define ADC2_INIT_PARAMS \
{ \
.name = "adc2", \
+ .vref = 3300, \
.resolution = ADC_RESOLUTION_12BIT, \
.data_align = ADC_DATAALIGN_RIGHT, \
.eoc_poll_time_max = 100, \
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/can_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/can_config.h
index a5bfbbad73..a136da514e 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/can_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/can_config.h
@@ -1,13 +1,11 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
- * Copyright (c) 2022, xiaoxiaolisunny
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
- * Date Author Notes
- * 2022-06-07 xiaoxiaolisunny first version
+ * Date Author Notes
+ * 2022-04-28 CDT first version
*/
#ifndef __CAN_CONFIG_H__
@@ -21,10 +19,16 @@ extern "C" {
#endif
#ifdef BSP_USING_CAN1
+#define CAN1_CLOCK_SEL (CAN_CLOCK_SRC_40M)
+#ifdef RT_CAN_USING_CANFD
+#define CAN1_CANFD_MODE (CAN_FD_MD_ISO)
+#endif
+#define CAN1_NAME ("can1")
#ifndef CAN1_INIT_PARAMS
#define CAN1_INIT_PARAMS \
{ \
- .name = "can1", \
+ .name = CAN1_NAME, \
+ .single_trans_mode = RT_FALSE \
}
#endif /* CAN1_INIT_PARAMS */
#endif /* BSP_USING_CAN1 */
@@ -34,80 +38,80 @@ extern "C" {
Baudrate = CANClock/(u32Prescaler*(u32TimeSeg1 + u32TimeSeg2))
TQ = u32Prescaler / CANClock.
- Bit time = (u32TimeSeg1 + u32TimeSeg2) x TQ.
+ Bit time = (u32TimeSeg2 + u32TimeSeg2) x TQ.
- The following bit time configures are based on CAN Clock 8M
+ The following bit time configures are based on CAN Clock 40M
*/
#define CAN_BIT_TIME_CONFIG_1M_BAUD \
{ \
- .u32Prescaler = 1, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 2, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_800K_BAUD \
{ \
- .u32Prescaler = 1, \
- .u32TimeSeg1 = 6, \
- .u32TimeSeg2 = 4, \
- .u32SJW = 3 \
+ .u32Prescaler = 2, \
+ .u32TimeSeg1 = 20, \
+ .u32TimeSeg2 = 5, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_500K_BAUD \
{ \
- .u32Prescaler = 2, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 4, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_250K_BAUD \
{ \
- .u32Prescaler = 4, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 8, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_125K_BAUD \
{ \
- .u32Prescaler = 8, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 16, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_100K_BAUD \
{ \
- .u32Prescaler = 10, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 20, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_50K_BAUD \
{ \
- .u32Prescaler = 20, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 40, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_20K_BAUD \
{ \
- .u32Prescaler = 50, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 100, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#define CAN_BIT_TIME_CONFIG_10K_BAUD \
{ \
- .u32Prescaler = 100, \
- .u32TimeSeg1 = 5, \
- .u32TimeSeg2 = 3, \
- .u32SJW = 3 \
+ .u32Prescaler = 200, \
+ .u32TimeSeg1 = 16, \
+ .u32TimeSeg2 = 4, \
+ .u32SJW = 4 \
}
#ifdef __cplusplus
@@ -115,5 +119,3 @@ extern "C" {
#endif
#endif /* __CAN_CONFIG_H__ */
-
-
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/dma_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/dma_config.h
index 0f6962b681..b2b187cb74 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/dma_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/dma_config.h
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -25,19 +24,37 @@ extern "C" {
#define SPI1_RX_DMA_CHANNEL DMA_CH0
#define SPI1_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
#define SPI1_RX_DMA_TRIG_SELECT AOS_DMA1_0
+#define SPI1_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH0
#define SPI1_RX_DMA_IRQn BSP_DMA1_CH0_IRQ_NUM
#define SPI1_RX_DMA_INT_PRIO BSP_DMA1_CH0_IRQ_PRIO
#define SPI1_RX_DMA_INT_SRC INT_SRC_DMA1_TC0
-#endif
-
-#if defined(BSP_SPI3_RX_USING_DMA) && !defined(SPI3_RX_DMA_INSTANCE)
-#define SPI3_RX_DMA_INSTANCE CM_DMA1
-#define SPI3_RX_DMA_CHANNEL DMA_CH0
-#define SPI3_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
-#define SPI3_RX_DMA_TRIG_SELECT AOS_DMA1_0
-#define SPI3_RX_DMA_IRQn BSP_DMA1_CH0_IRQ_NUM
-#define SPI3_RX_DMA_INT_PRIO BSP_DMA1_CH0_IRQ_PRIO
-#define SPI3_RX_DMA_INT_SRC INT_SRC_DMA1_TC0
+#elif defined(BSP_USING_SDIO1) && !defined(SDIO1_RX_DMA_INSTANCE)
+#define SDIO1_RX_DMA_INSTANCE CM_DMA1
+#define SDIO1_RX_DMA_CHANNEL DMA_CH0
+#define SDIO1_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define SDIO1_RX_DMA_TRIG_SELECT AOS_DMA1_0
+#define SDIO1_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH0
+#define SDIO1_RX_DMA_IRQn BSP_DMA1_CH0_IRQ_NUM
+#define SDIO1_RX_DMA_INT_PRIO BSP_DMA1_CH0_IRQ_PRIO
+#define SDIO1_RX_DMA_INT_SRC INT_SRC_DMA1_TC0
+#elif defined(BSP_I2C1_TX_USING_DMA) && !defined(I2C1_TX_DMA_INSTANCE)
+#define I2C1_TX_DMA_INSTANCE CM_DMA1
+#define I2C1_TX_DMA_CHANNEL DMA_CH0
+#define I2C1_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define I2C1_TX_DMA_TRIG_SELECT AOS_DMA1_0
+#define I2C1_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH0
+#define I2C1_TX_DMA_IRQn BSP_DMA1_CH0_IRQ_NUM
+#define I2C1_TX_DMA_INT_PRIO BSP_DMA1_CH0_IRQ_PRIO
+#define I2C1_TX_DMA_INT_SRC INT_SRC_DMA1_TC0
+#elif defined(BSP_UART1_RX_USING_DMA) && !defined(UART1_RX_DMA_INSTANCE)
+#define UART1_RX_DMA_INSTANCE CM_DMA1
+#define UART1_RX_DMA_CHANNEL DMA_CH0
+#define UART1_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define UART1_RX_DMA_TRIG_SELECT AOS_DMA1_0
+#define UART1_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH0
+#define UART1_RX_DMA_IRQn BSP_DMA1_CH0_IRQ_NUM
+#define UART1_RX_DMA_INT_PRIO BSP_DMA1_CH0_IRQ_PRIO
+#define UART1_RX_DMA_INT_SRC INT_SRC_DMA1_TC0
#endif
/* DMA1 ch1 */
@@ -46,19 +63,37 @@ extern "C" {
#define SPI1_TX_DMA_CHANNEL DMA_CH1
#define SPI1_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
#define SPI1_TX_DMA_TRIG_SELECT AOS_DMA1_1
+#define SPI1_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH1
#define SPI1_TX_DMA_IRQn BSP_DMA1_CH1_IRQ_NUM
#define SPI1_TX_DMA_INT_PRIO BSP_DMA1_CH1_IRQ_PRIO
#define SPI1_TX_DMA_INT_SRC INT_SRC_DMA1_TC1
-#endif
-
-#if defined(BSP_SPI3_TX_USING_DMA) && !defined(SPI3_TX_DMA_INSTANCE)
-#define SPI3_TX_DMA_INSTANCE CM_DMA1
-#define SPI3_TX_DMA_CHANNEL DMA_CH1
-#define SPI3_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
-#define SPI3_TX_DMA_TRIG_SELECT AOS_DMA1_1
-#define SPI3_TX_DMA_IRQn BSP_DMA1_CH1_IRQ_NUM
-#define SPI3_TX_DMA_INT_PRIO BSP_DMA1_CH1_IRQ_PRIO
-#define SPI3_TX_DMA_INT_SRC INT_SRC_DMA1_TC1
+#elif defined(BSP_USING_SDIO1) && !defined(SDIO1_TX_DMA_INSTANCE)
+#define SDIO1_TX_DMA_INSTANCE CM_DMA1
+#define SDIO1_TX_DMA_CHANNEL DMA_CH1
+#define SDIO1_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define SDIO1_TX_DMA_TRIG_SELECT AOS_DMA1_1
+#define SDIO1_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH1
+#define SDIO1_TX_DMA_IRQn BSP_DMA1_CH1_IRQ_NUM
+#define SDIO1_TX_DMA_INT_PRIO BSP_DMA1_CH1_IRQ_PRIO
+#define SDIO1_TX_DMA_INT_SRC INT_SRC_DMA1_TC1
+#elif defined(BSP_I2C1_RX_USING_DMA) && !defined(I2C1_RX_DMA_INSTANCE)
+#define I2C1_RX_DMA_INSTANCE CM_DMA1
+#define I2C1_RX_DMA_CHANNEL DMA_CH1
+#define I2C1_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define I2C1_RX_DMA_TRIG_SELECT AOS_DMA1_1
+#define I2C1_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH1
+#define I2C1_RX_DMA_IRQn BSP_DMA1_CH1_IRQ_NUM
+#define I2C1_RX_DMA_INT_PRIO BSP_DMA1_CH1_IRQ_PRIO
+#define I2C1_RX_DMA_INT_SRC INT_SRC_DMA1_TC1
+#elif defined(BSP_UART2_RX_USING_DMA) && !defined(UART2_RX_DMA_INSTANCE)
+#define UART2_RX_DMA_INSTANCE CM_DMA1
+#define UART2_RX_DMA_CHANNEL DMA_CH1
+#define UART2_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define UART2_RX_DMA_TRIG_SELECT AOS_DMA1_1
+#define UART2_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH1
+#define UART2_RX_DMA_IRQn BSP_DMA1_CH1_IRQ_NUM
+#define UART2_RX_DMA_INT_PRIO BSP_DMA1_CH1_IRQ_PRIO
+#define UART2_RX_DMA_INT_SRC INT_SRC_DMA1_TC1
#endif
/* DMA1 ch2 */
@@ -67,19 +102,37 @@ extern "C" {
#define SPI2_RX_DMA_CHANNEL DMA_CH2
#define SPI2_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
#define SPI2_RX_DMA_TRIG_SELECT AOS_DMA1_2
+#define SPI2_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH2
#define SPI2_RX_DMA_IRQn BSP_DMA1_CH2_IRQ_NUM
#define SPI2_RX_DMA_INT_PRIO BSP_DMA1_CH2_IRQ_PRIO
#define SPI2_RX_DMA_INT_SRC INT_SRC_DMA1_TC2
-#endif
-
-#if defined(BSP_SPI4_RX_USING_DMA) && !defined(SPI4_RX_DMA_INSTANCE)
-#define SPI4_RX_DMA_INSTANCE CM_DMA1
-#define SPI4_RX_DMA_CHANNEL DMA_CH2
-#define SPI4_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
-#define SPI4_RX_DMA_TRIG_SELECT AOS_DMA1_2
-#define SPI4_RX_DMA_IRQn BSP_DMA1_CH2_IRQ_NUM
-#define SPI4_RX_DMA_INT_PRIO BSP_DMA1_CH2_IRQ_PRIO
-#define SPI4_RX_DMA_INT_SRC INT_SRC_DMA1_TC2
+#elif defined(BSP_USING_SDIO2) && !defined(SDIO2_RX_DMA_INSTANCE)
+#define SDIO2_RX_DMA_INSTANCE CM_DMA1
+#define SDIO2_RX_DMA_CHANNEL DMA_CH2
+#define SDIO2_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define SDIO2_RX_DMA_TRIG_SELECT AOS_DMA1_2
+#define SDIO2_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH2
+#define SDIO2_RX_DMA_IRQn BSP_DMA1_CH2_IRQ_NUM
+#define SDIO2_RX_DMA_INT_PRIO BSP_DMA1_CH2_IRQ_PRIO
+#define SDIO2_RX_DMA_INT_SRC INT_SRC_DMA1_TC2
+#elif defined(BSP_I2C2_TX_USING_DMA) && !defined(I2C2_TX_DMA_INSTANCE)
+#define I2C2_TX_DMA_INSTANCE CM_DMA1
+#define I2C2_TX_DMA_CHANNEL DMA_CH2
+#define I2C2_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define I2C2_TX_DMA_TRIG_SELECT AOS_DMA1_2
+#define I2C2_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH2
+#define I2C2_TX_DMA_IRQn BSP_DMA1_CH2_IRQ_NUM
+#define I2C2_TX_DMA_INT_PRIO BSP_DMA1_CH2_IRQ_PRIO
+#define I2C2_TX_DMA_INT_SRC INT_SRC_DMA1_TC2
+#elif defined(BSP_UART3_RX_USING_DMA) && !defined(UART3_RX_DMA_INSTANCE)
+#define UART3_RX_DMA_INSTANCE CM_DMA1
+#define UART3_RX_DMA_CHANNEL DMA_CH2
+#define UART3_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define UART3_RX_DMA_TRIG_SELECT AOS_DMA1_2
+#define UART3_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH2
+#define UART3_RX_DMA_IRQn BSP_DMA1_CH2_IRQ_NUM
+#define UART3_RX_DMA_INT_PRIO BSP_DMA1_CH2_IRQ_PRIO
+#define UART3_RX_DMA_INT_SRC INT_SRC_DMA1_TC2
#endif
/* DMA1 ch3 */
@@ -88,100 +141,145 @@ extern "C" {
#define SPI2_TX_DMA_CHANNEL DMA_CH3
#define SPI2_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
#define SPI2_TX_DMA_TRIG_SELECT AOS_DMA1_3
+#define SPI2_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH3
#define SPI2_TX_DMA_IRQn BSP_DMA1_CH3_IRQ_NUM
#define SPI2_TX_DMA_INT_PRIO BSP_DMA1_CH3_IRQ_PRIO
#define SPI2_TX_DMA_INT_SRC INT_SRC_DMA1_TC3
-#endif
-
-#if defined(BSP_SPI4_TX_USING_DMA) && !defined(SPI4_TX_DMA_INSTANCE)
-#define SPI4_TX_DMA_INSTANCE CM_DMA1
-#define SPI4_TX_DMA_CHANNEL DMA_CH3
-#define SPI4_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
-#define SPI4_TX_DMA_TRIG_SELECT AOS_DMA1_3
-#define SPI4_TX_DMA_IRQn BSP_DMA1_CH3_IRQ_NUM
-#define SPI4_TX_DMA_INT_PRIO BSP_DMA1_CH3_IRQ_PRIO
-#define SPI4_TX_DMA_INT_SRC INT_SRC_DMA1_TC3
+#elif defined(BSP_USING_SDIO2) && !defined(SDIO2_TX_DMA_INSTANCE)
+#define SDIO2_TX_DMA_INSTANCE CM_DMA1
+#define SDIO2_TX_DMA_CHANNEL DMA_CH3
+#define SDIO2_TX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define SDIO2_TX_DMA_TRIG_SELECT AOS_DMA1_3
+#define SDIO2_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH3
+#define SDIO2_TX_DMA_IRQn BSP_DMA1_CH3_IRQ_NUM
+#define SDIO2_TX_DMA_INT_PRIO BSP_DMA1_CH3_IRQ_PRIO
+#define SDIO2_TX_DMA_INT_SRC INT_SRC_DMA1_TC3
+#elif defined(BSP_I2C2_RX_USING_DMA) && !defined(I2C2_RX_DMA_INSTANCE)
+#define I2C2_RX_DMA_INSTANCE CM_DMA1
+#define I2C2_RX_DMA_CHANNEL DMA_CH3
+#define I2C2_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define I2C2_RX_DMA_TRIG_SELECT AOS_DMA1_3
+#define I2C2_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH3
+#define I2C2_RX_DMA_IRQn BSP_DMA1_CH3_IRQ_NUM
+#define I2C2_RX_DMA_INT_PRIO BSP_DMA1_CH3_IRQ_PRIO
+#define I2C2_RX_DMA_INT_SRC INT_SRC_DMA1_TC3
+#elif defined(BSP_UART4_RX_USING_DMA) && !defined(UART4_RX_DMA_INSTANCE)
+#define UART4_RX_DMA_INSTANCE CM_DMA1
+#define UART4_RX_DMA_CHANNEL DMA_CH3
+#define UART4_RX_DMA_CLOCK (PWC_FCG0_DMA1 | PWC_FCG0_AOS)
+#define UART4_RX_DMA_TRIG_SELECT AOS_DMA1_3
+#define UART4_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH3
+#define UART4_RX_DMA_IRQn BSP_DMA1_CH3_IRQ_NUM
+#define UART4_RX_DMA_INT_PRIO BSP_DMA1_CH3_IRQ_PRIO
+#define UART4_RX_DMA_INT_SRC INT_SRC_DMA1_TC3
#endif
/* DMA2 ch0 */
-#if defined(BSP_UART1_RX_USING_DMA) && !defined(UART1_RX_DMA_INSTANCE)
-#define UART1_RX_DMA_INSTANCE CM_DMA2
-#define UART1_RX_DMA_CHANNEL DMA_CH0
-#define UART1_RX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
-#define UART1_RX_DMA_TRIG_SELECT AOS_DMA2_0
-#define UART1_RX_DMA_IRQn BSP_DMA2_CH0_IRQ_NUM
-#define UART1_RX_DMA_INT_PRIO BSP_DMA2_CH0_IRQ_PRIO
-#define UART1_RX_DMA_INT_SRC INT_SRC_DMA2_TC0
-#endif
-
-#if defined(BSP_UART3_RX_USING_DMA) && !defined(UART3_RX_DMA_INSTANCE)
-#define UART3_RX_DMA_INSTANCE CM_DMA2
-#define UART3_RX_DMA_CHANNEL DMA_CH0
-#define UART3_RX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
-#define UART3_RX_DMA_TRIG_SELECT AOS_DMA2_0
-#define UART3_RX_DMA_IRQn BSP_DMA2_CH0_IRQ_NUM
-#define UART3_RX_DMA_INT_PRIO BSP_DMA2_CH0_IRQ_PRIO
-#define UART3_RX_DMA_INT_SRC INT_SRC_DMA2_TC0
+#if defined(BSP_SPI3_RX_USING_DMA) && !defined(SPI3_RX_DMA_INSTANCE)
+#define SPI3_RX_DMA_INSTANCE CM_DMA2
+#define SPI3_RX_DMA_CHANNEL DMA_CH0
+#define SPI3_RX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define SPI3_RX_DMA_TRIG_SELECT AOS_DMA2_0
+#define SPI3_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH0
+#define SPI3_RX_DMA_IRQn BSP_DMA2_CH0_IRQ_NUM
+#define SPI3_RX_DMA_INT_PRIO BSP_DMA2_CH0_IRQ_PRIO
+#define SPI3_RX_DMA_INT_SRC INT_SRC_DMA2_TC0
+#elif defined(BSP_I2C3_TX_USING_DMA) && !defined(I2C3_TX_DMA_INSTANCE)
+#define I2C3_TX_DMA_INSTANCE CM_DMA2
+#define I2C3_TX_DMA_CHANNEL DMA_CH0
+#define I2C3_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define I2C3_TX_DMA_TRIG_SELECT AOS_DMA2_0
+#define I2C3_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH0
+#define I2C3_TX_DMA_IRQn BSP_DMA2_CH0_IRQ_NUM
+#define I2C3_TX_DMA_INT_PRIO BSP_DMA2_CH0_IRQ_PRIO
+#define I2C3_TX_DMA_INT_SRC INT_SRC_DMA2_TC0
+#elif defined(BSP_UART1_TX_USING_DMA) && !defined(UART1_TX_DMA_INSTANCE)
+#define UART1_TX_DMA_INSTANCE CM_DMA2
+#define UART1_TX_DMA_CHANNEL DMA_CH0
+#define UART1_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define UART1_TX_DMA_TRIG_SELECT AOS_DMA2_0
+#define UART1_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH0
+#define UART1_TX_DMA_IRQn BSP_DMA2_CH0_IRQ_NUM
+#define UART1_TX_DMA_INT_PRIO BSP_DMA2_CH0_IRQ_PRIO
+#define UART1_TX_DMA_INT_SRC INT_SRC_DMA2_TC0
#endif
/* DMA2 ch1 */
-#if defined(BSP_UART1_TX_USING_DMA) && !defined(UART1_TX_DMA_INSTANCE)
-#define UART1_TX_DMA_INSTANCE CM_DMA2
-#define UART1_TX_DMA_CHANNEL DMA_CH1
-#define UART1_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
-#define UART1_TX_DMA_TRIG_SELECT AOS_DMA2_1
-#define UART1_TX_DMA_IRQn BSP_DMA2_CH1_IRQ_NUM
-#define UART1_TX_DMA_INT_PRIO BSP_DMA2_CH1_IRQ_PRIO
-#define UART1_TX_DMA_INT_SRC INT_SRC_DMA2_TC1
-#endif
-
-#if defined(BSP_UART3_TX_USING_DMA) && !defined(UART3_TX_DMA_INSTANCE)
-#define UART3_TX_DMA_INSTANCE CM_DMA2
-#define UART3_TX_DMA_CHANNEL DMA_CH1
-#define UART3_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
-#define UART3_TX_DMA_TRIG_SELECT AOS_DMA2_1
-#define UART3_TX_DMA_IRQn BSP_DMA2_CH1_IRQ_NUM
-#define UART3_TX_DMA_INT_PRIO BSP_DMA2_CH1_IRQ_PRIO
-#define UART3_TX_DMA_INT_SRC INT_SRC_DMA2_TC1
+#if defined(BSP_SPI3_TX_USING_DMA) && !defined(SPI3_TX_DMA_INSTANCE)
+#define SPI3_TX_DMA_INSTANCE CM_DMA2
+#define SPI3_TX_DMA_CHANNEL DMA_CH1
+#define SPI3_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define SPI3_TX_DMA_TRIG_SELECT AOS_DMA2_1
+#define SPI3_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH1
+#define SPI3_TX_DMA_IRQn BSP_DMA2_CH1_IRQ_NUM
+#define SPI3_TX_DMA_INT_PRIO BSP_DMA2_CH1_IRQ_PRIO
+#define SPI3_TX_DMA_INT_SRC INT_SRC_DMA2_TC1
+#elif defined(BSP_I2C3_RX_USING_DMA) && !defined(I2C3_RX_DMA_INSTANCE)
+#define I2C3_RX_DMA_INSTANCE CM_DMA2
+#define I2C3_RX_DMA_CHANNEL DMA_CH1
+#define I2C3_RX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define I2C3_RX_DMA_TRIG_SELECT AOS_DMA2_1
+#define I2C3_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH1
+#define I2C3_RX_DMA_IRQn BSP_DMA2_CH1_IRQ_NUM
+#define I2C3_RX_DMA_INT_PRIO BSP_DMA2_CH1_IRQ_PRIO
+#define I2C3_RX_DMA_INT_SRC INT_SRC_DMA2_TC1
+#elif defined(BSP_UART2_TX_USING_DMA) && !defined(UART2_TX_DMA_INSTANCE)
+#define UART2_TX_DMA_INSTANCE CM_DMA2
+#define UART2_TX_DMA_CHANNEL DMA_CH1
+#define UART2_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define UART2_TX_DMA_TRIG_SELECT AOS_DMA2_1
+#define UART2_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH1
+#define UART2_TX_DMA_IRQn BSP_DMA2_CH1_IRQ_NUM
+#define UART2_TX_DMA_INT_PRIO BSP_DMA2_CH1_IRQ_PRIO
+#define UART2_TX_DMA_INT_SRC INT_SRC_DMA2_TC1
#endif
/* DMA2 ch2 */
-#if defined(BSP_UART2_RX_USING_DMA) && !defined(UART2_RX_DMA_INSTANCE)
-#define UART2_RX_DMA_INSTANCE CM_DMA2
-#define UART2_RX_DMA_CHANNEL DMA_CH2
-#define UART2_RX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
-#define UART2_RX_DMA_TRIG_SELECT AOS_DMA2_2
-#define UART2_RX_DMA_IRQn BSP_DMA2_CH2_IRQ_NUM
-#define UART2_RX_DMA_INT_PRIO BSP_DMA2_CH2_IRQ_PRIO
-#define UART2_RX_DMA_INT_SRC INT_SRC_DMA2_TC2
-#endif
-
-#if defined(BSP_UART4_RX_USING_DMA) && !defined(UART4_RX_DMA_INSTANCE)
-#define UART4_RX_DMA_INSTANCE CM_DMA2
-#define UART4_RX_DMA_CHANNEL DMA_CH2
-#define UART4_RX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
-#define UART4_RX_DMA_TRIG_SELECT AOS_DMA2_2
-#define UART4_RX_DMA_IRQn BSP_DMA2_CH2_IRQ_NUM
-#define UART4_RX_DMA_INT_PRIO BSP_DMA2_CH2_IRQ_PRIO
-#define UART4_RX_DMA_INT_SRC INT_SRC_DMA2_TC2
+#if defined(BSP_SPI4_RX_USING_DMA) && !defined(SPI4_RX_DMA_INSTANCE)
+#define SPI4_RX_DMA_INSTANCE CM_DMA2
+#define SPI4_RX_DMA_CHANNEL DMA_CH2
+#define SPI4_RX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define SPI4_RX_DMA_TRIG_SELECT AOS_DMA2_2
+#define SPI4_RX_DMA_TRANS_FLAG DMA_FLAG_TC_CH2
+#define SPI4_RX_DMA_IRQn BSP_DMA2_CH2_IRQ_NUM
+#define SPI4_RX_DMA_INT_PRIO BSP_DMA2_CH2_IRQ_PRIO
+#define SPI4_RX_DMA_INT_SRC INT_SRC_DMA2_TC2
+#elif defined(BSP_UART3_TX_USING_DMA) && !defined(UART3_TX_DMA_INSTANCE)
+#define UART3_TX_DMA_INSTANCE CM_DMA2
+#define UART3_TX_DMA_CHANNEL DMA_CH2
+#define UART3_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define UART3_TX_DMA_TRIG_SELECT AOS_DMA2_2
+#define UART3_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH2
+#define UART3_TX_DMA_IRQn BSP_DMA2_CH2_IRQ_NUM
+#define UART3_TX_DMA_INT_PRIO BSP_DMA2_CH2_IRQ_PRIO
+#define UART3_TX_DMA_INT_SRC INT_SRC_DMA2_TC2
+#elif defined(BSP_USING_QSPI) && !defined(QSPI_DMA_INSTANCE)
+#define QSPI_DMA_INSTANCE CM_DMA2
+#define QSPI_DMA_CHANNEL DMA_CH2
+#define QSPI_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define QSPI_DMA_TRIG_SELECT AOS_DMA2_2
+#define QSPI_DMA_TRANS_FLAG DMA_FLAG_TC_CH2
+#define QSPI_DMA_IRQn BSP_DMA2_CH2_IRQ_NUM
+#define QSPI_DMA_INT_PRIO BSP_DMA2_CH2_IRQ_PRIO
+#define QSPI_DMA_INT_SRC INT_SRC_DMA2_TC2
#endif
/* DMA2 ch3 */
-#if defined(BSP_UART2_TX_USING_DMA) && !defined(UART2_TX_DMA_INSTANCE)
-#define UART2_TX_DMA_INSTANCE CM_DMA2
-#define UART2_TX_DMA_CHANNEL DMA_CH3
-#define UART2_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
-#define UART2_TX_DMA_TRIG_SELECT AOS_DMA2_3
-#define UART2_TX_DMA_IRQn BSP_DMA2_CH3_IRQ_NUM
-#define UART2_TX_DMA_INT_PRIO BSP_DMA2_CH3_IRQ_PRIO
-#define UART2_TX_DMA_INT_SRC INT_SRC_DMA2_TC3
-#endif
-
-#if defined(BSP_UART4_TX_USING_DMA) && !defined(UART4_TX_DMA_INSTANCE)
+#if defined(BSP_SPI4_TX_USING_DMA) && !defined(SPI4_TX_DMA_INSTANCE)
+#define SPI4_TX_DMA_INSTANCE CM_DMA2
+#define SPI4_TX_DMA_CHANNEL DMA_CH3
+#define SPI4_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
+#define SPI4_TX_DMA_TRIG_SELECT AOS_DMA2_3
+#define SPI4_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH3
+#define SPI4_TX_DMA_IRQn BSP_DMA2_CH3_IRQ_NUM
+#define SPI4_TX_DMA_INT_PRIO BSP_DMA2_CH3_IRQ_PRIO
+#define SPI4_TX_DMA_INT_SRC INT_SRC_DMA2_TC3
+#elif defined(BSP_UART4_TX_USING_DMA) && !defined(UART4_TX_DMA_INSTANCE)
#define UART4_TX_DMA_INSTANCE CM_DMA2
#define UART4_TX_DMA_CHANNEL DMA_CH3
#define UART4_TX_DMA_CLOCK (PWC_FCG0_DMA2 | PWC_FCG0_AOS)
#define UART4_TX_DMA_TRIG_SELECT AOS_DMA2_3
+#define UART4_TX_DMA_TRANS_FLAG DMA_FLAG_TC_CH3
#define UART4_TX_DMA_IRQn BSP_DMA2_CH3_IRQ_NUM
#define UART4_TX_DMA_INT_PRIO BSP_DMA2_CH3_IRQ_PRIO
#define UART4_TX_DMA_INT_SRC INT_SRC_DMA2_TC3
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/gpio_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/gpio_config.h
index fe5492d575..ee17e1230d 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/gpio_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/gpio_config.h
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/i2c_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/i2c_config.h
new file mode 100644
index 0000000000..6c81c2773f
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/i2c_config.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2022-04-28 CDT first version
+ */
+
+#ifndef __I2C_CONFIG_H__
+#define __I2C_CONFIG_H__
+
+#include
+#include "irq_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(BSP_USING_I2C1)
+#ifndef I2C1_CONFIG
+#define I2C1_CONFIG \
+ { \
+ .name = "i2c1", \
+ .Instance = CM_I2C1, \
+ .clock = FCG1_PERIPH_I2C1, \
+ .baudrate = 100000UL, \
+ .timeout = 10000UL, \
+ }
+#endif /* I2C1_CONFIG */
+#endif
+
+#if defined(BSP_I2C1_USING_DMA)
+#ifndef I2C1_TX_DMA_CONFIG
+#define I2C1_TX_DMA_CONFIG \
+ { \
+ .Instance = I2C1_TX_DMA_INSTANCE, \
+ .channel = I2C1_TX_DMA_CHANNEL, \
+ .clock = I2C1_TX_DMA_CLOCK, \
+ .trigger_select = I2C1_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_I2C1_TEI, \
+ .flag = I2C1_TX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = I2C1_TX_DMA_IRQn, \
+ .irq_prio = I2C1_TX_DMA_INT_PRIO, \
+ .int_src = I2C1_TX_DMA_INT_SRC, \
+ }, \
+ }
+#endif /* I2C1_TX_DMA_CONFIG */
+
+#ifndef I2C1_RX_DMA_CONFIG
+#define I2C1_RX_DMA_CONFIG \
+ { \
+ .Instance = I2C1_RX_DMA_INSTANCE, \
+ .channel = I2C1_RX_DMA_CHANNEL, \
+ .clock = I2C1_RX_DMA_CLOCK, \
+ .trigger_select = I2C1_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_I2C1_RXI, \
+ .flag = I2C1_RX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = I2C1_RX_DMA_IRQn, \
+ .irq_prio = I2C1_RX_DMA_INT_PRIO, \
+ .int_src = I2C1_RX_DMA_INT_SRC, \
+ }, \
+ }
+#endif /* I2C1_RX_DMA_CONFIG */
+#endif /* BSP_I2C1_USING_DMA */
+
+#if defined(BSP_USING_I2C2)
+#ifndef I2C2_CONFIG
+#define I2C2_CONFIG \
+ { \
+ .name = "i2c2", \
+ .Instance = CM_I2C2, \
+ .clock = FCG1_PERIPH_I2C2, \
+ .baudrate = 100000UL, \
+ .timeout = 10000UL, \
+ }
+#endif /* I2C2_CONFIG */
+
+#if defined(BSP_I2C2_USING_DMA)
+#ifndef I2C2_TX_DMA_CONFIG
+#define I2C2_TX_DMA_CONFIG \
+ { \
+ .Instance = I2C2_TX_DMA_INSTANCE, \
+ .channel = I2C2_TX_DMA_CHANNEL, \
+ .clock = I2C2_TX_DMA_CLOCK, \
+ .trigger_select = I2C2_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_I2C2_TEI, \
+ .flag = I2C2_TX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = I2C2_TX_DMA_IRQn, \
+ .irq_prio = I2C2_TX_DMA_INT_PRIO, \
+ .int_src = I2C2_TX_DMA_INT_SRC, \
+ }, \
+ }
+#endif /* I2C2_TX_DMA_CONFIG */
+
+#ifndef I2C2_RX_DMA_CONFIG
+#define I2C2_RX_DMA_CONFIG \
+ { \
+ .Instance = I2C2_RX_DMA_INSTANCE, \
+ .channel = I2C2_RX_DMA_CHANNEL, \
+ .clock = I2C2_RX_DMA_CLOCK, \
+ .trigger_select = I2C2_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_I2C2_RXI, \
+ .flag = I2C2_RX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = I2C2_RX_DMA_IRQn, \
+ .irq_prio = I2C2_RX_DMA_INT_PRIO, \
+ .int_src = I2C2_RX_DMA_INT_SRC, \
+ }, \
+ }
+#endif /* I2C2_RX_DMA_CONFIG */
+#endif /* BSP_I2C2_USING_DMA */
+#endif
+
+#if defined(BSP_USING_I2C3)
+#ifndef I2C3_CONFIG
+#define I2C3_CONFIG \
+ { \
+ .name = "i2c3", \
+ .Instance = CM_I2C3, \
+ .clock = FCG1_PERIPH_I2C3, \
+ .baudrate = 100000UL, \
+ .timeout = 10000UL, \
+ }
+#endif /* I2C3_CONFIG */
+
+#if defined(BSP_I2C3_USING_DMA)
+#ifndef I2C3_TX_DMA_CONFIG
+#define I2C3_TX_DMA_CONFIG \
+ { \
+ .Instance = I2C3_TX_DMA_INSTANCE, \
+ .channel = I2C3_TX_DMA_CHANNEL, \
+ .clock = I2C3_TX_DMA_CLOCK, \
+ .trigger_select = I2C3_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_I2C3_TEI, \
+ .flag = I2C3_TX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = I2C3_TX_DMA_IRQn, \
+ .irq_prio = I2C3_TX_DMA_INT_PRIO, \
+ .int_src = I2C3_TX_DMA_INT_SRC, \
+ }, \
+ }
+#endif /* I2C3_TX_DMA_CONFIG */
+
+#ifndef I2C3_RX_DMA_CONFIG
+#define I2C3_RX_DMA_CONFIG \
+ { \
+ .Instance = I2C3_RX_DMA_INSTANCE, \
+ .channel = I2C3_RX_DMA_CHANNEL, \
+ .clock = I2C3_RX_DMA_CLOCK, \
+ .trigger_select = I2C3_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_I2C3_RXI, \
+ .flag = I2C3_RX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = I2C3_RX_DMA_IRQn, \
+ .irq_prio = I2C3_RX_DMA_INT_PRIO, \
+ .int_src = I2C3_RX_DMA_INT_SRC, \
+ }, \
+ }
+#endif /* I2C3_RX_DMA_CONFIG */
+#endif /* BSP_I2C3_USING_DMA */
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/irq_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/irq_config.h
index 0f1e675017..9cd06af4a3 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/irq_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/irq_config.h
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -71,33 +70,36 @@ extern "C" {
#define BSP_DMA2_CH1_IRQ_NUM INT043_IRQn
#define BSP_DMA2_CH1_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
/* DMA2 ch2 */
-#define BSP_DMA2_CH2_IRQ_NUM INT008_IRQn
+#define BSP_DMA2_CH2_IRQ_NUM INT020_IRQn
#define BSP_DMA2_CH2_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
/* DMA2 ch3 */
-#define BSP_DMA2_CH3_IRQ_NUM INT009_IRQn
+#define BSP_DMA2_CH3_IRQ_NUM INT021_IRQn
#define BSP_DMA2_CH3_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
-
#if defined(BSP_USING_UART1)
-#define BSP_UART1_RXERR_IRQ_NUM INT010_IRQn
+#define BSP_UART1_RXERR_IRQ_NUM INT012_IRQn
#define BSP_UART1_RXERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
-#define BSP_UART1_RX_IRQ_NUM INT083_IRQn
+#define BSP_UART1_RX_IRQ_NUM INT082_IRQn
#define BSP_UART1_RX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
-#define BSP_UART1_TX_IRQ_NUM INT082_IRQn
+#define BSP_UART1_TX_IRQ_NUM INT081_IRQn
#define BSP_UART1_TX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#if defined(BSP_UART1_RX_USING_DMA)
-#define BSP_UART1_RXTO_IRQ_NUM INT006_IRQn
+#define BSP_UART1_RXTO_IRQ_NUM INT013_IRQn
#define BSP_UART1_RXTO_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
-#if defined(BSP_UART1_TX_USING_DMA)
+
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART1_TX_USING_DMA)
+#define BSP_UART1_TX_CPLT_IRQ_NUM INT080_IRQn
+#define BSP_UART1_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#elif defined(RT_USING_SERIAL_V2)
#define BSP_UART1_TX_CPLT_IRQ_NUM INT080_IRQn
#define BSP_UART1_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
#endif /* BSP_USING_UART1 */
#if defined(BSP_USING_UART2)
-#define BSP_UART2_RXERR_IRQ_NUM INT011_IRQn
+#define BSP_UART2_RXERR_IRQ_NUM INT014_IRQn
#define BSP_UART2_RXERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#define BSP_UART2_RX_IRQ_NUM INT085_IRQn
#define BSP_UART2_RX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
@@ -105,35 +107,43 @@ extern "C" {
#define BSP_UART2_TX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#if defined(BSP_UART2_RX_USING_DMA)
-#define BSP_UART2_RXTO_IRQ_NUM INT007_IRQn
+#define BSP_UART2_RXTO_IRQ_NUM INT015_IRQn
#define BSP_UART2_RXTO_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
-#if defined(BSP_UART2_TX_USING_DMA)
-#define BSP_UART2_TX_CPLT_IRQ_NUM INT081_IRQn
+
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART2_TX_USING_DMA)
+#define BSP_UART2_TX_CPLT_IRQ_NUM INT083_IRQn
+#define BSP_UART2_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#elif defined(RT_USING_SERIAL_V2)
+#define BSP_UART2_TX_CPLT_IRQ_NUM INT083_IRQn
#define BSP_UART2_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
#endif /* BSP_USING_UART2 */
#if defined(BSP_USING_UART3)
-#define BSP_UART3_RXERR_IRQ_NUM INT012_IRQn
+#define BSP_UART3_RXERR_IRQ_NUM INT016_IRQn
#define BSP_UART3_RXERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
-#define BSP_UART3_RX_IRQ_NUM INT089_IRQn
+#define BSP_UART3_RX_IRQ_NUM INT088_IRQn
#define BSP_UART3_RX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
-#define BSP_UART3_TX_IRQ_NUM INT088_IRQn
+#define BSP_UART3_TX_IRQ_NUM INT087_IRQn
#define BSP_UART3_TX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#if defined(BSP_UART3_RX_USING_DMA)
-#define BSP_UART3_RXTO_IRQ_NUM INT014_IRQn
+#define BSP_UART3_RXTO_IRQ_NUM INT017_IRQn
#define BSP_UART3_RXTO_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
-#if defined(BSP_UART3_TX_USING_DMA)
+
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART3_TX_USING_DMA)
+#define BSP_UART3_TX_CPLT_IRQ_NUM INT086_IRQn
+#define BSP_UART3_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#elif defined(RT_USING_SERIAL_V2)
#define BSP_UART3_TX_CPLT_IRQ_NUM INT086_IRQn
#define BSP_UART3_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
#endif /* BSP_USING_UART3 */
#if defined(BSP_USING_UART4)
-#define BSP_UART4_RXERR_IRQ_NUM INT013_IRQn
+#define BSP_UART4_RXERR_IRQ_NUM INT018_IRQn
#define BSP_UART4_RXERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#define BSP_UART4_RX_IRQ_NUM INT091_IRQn
#define BSP_UART4_RX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
@@ -141,19 +151,99 @@ extern "C" {
#define BSP_UART4_TX_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#if defined(BSP_UART4_RX_USING_DMA)
-#define BSP_UART4_RXTO_IRQ_NUM INT015_IRQn
+#define BSP_UART4_RXTO_IRQ_NUM INT019_IRQn
#define BSP_UART4_RXTO_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
-#if defined(BSP_UART4_TX_USING_DMA)
-#define BSP_UART4_TX_CPLT_IRQ_NUM INT087_IRQn
+
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART4_TX_USING_DMA)
+#define BSP_UART4_TX_CPLT_IRQ_NUM INT089_IRQn
+#define BSP_UART4_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#elif defined(RT_USING_SERIAL_V2)
+#define BSP_UART4_TX_CPLT_IRQ_NUM INT089_IRQn
#define BSP_UART4_TX_CPLT_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
#endif
#endif /* BSP_USING_UART4 */
+#if defined(BSP_USING_SPI1)
+#define BSP_SPI1_ERR_IRQ_NUM INT008_IRQn
+#define BSP_SPI1_ERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif
+
+#if defined(BSP_USING_SPI2)
+#define BSP_SPI2_ERR_IRQ_NUM INT009_IRQn
+#define BSP_SPI2_ERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif
+
+#if defined(BSP_USING_SPI3)
+#define BSP_SPI3_ERR_IRQ_NUM INT010_IRQn
+#define BSP_SPI3_ERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif
+
+#if defined(BSP_USING_SPI4)
+#define BSP_SPI4_ERR_IRQ_NUM INT011_IRQn
+#define BSP_SPI4_ERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif
+
#if defined(BSP_USING_CAN1)
-#define BSP_CAN1_IRQ_NUM INT004_IRQn
+#define BSP_CAN1_IRQ_NUM INT126_IRQn
#define BSP_CAN1_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
-#endif/* BSP_USING_CAN1 */
+#endif /* BSP_USING_CAN1 */
+
+#if defined(BSP_USING_SDIO1)
+#define BSP_SDIO1_IRQ_NUM INT122_IRQn
+#define BSP_SDIO1_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif /* BSP_USING_SDIO1 */
+
+#if defined(BSP_USING_SDIO2)
+#define BSP_SDIO2_IRQ_NUM INT124_IRQn
+#define BSP_SDIO2_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif /* BSP_USING_SDIO2 */
+
+#if defined(RT_USING_ALARM)
+#define BSP_RTC_ALARM_IRQ_NUM INT044_IRQn
+#define BSP_RTC_ALARM_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* RT_USING_ALARM */
+
+#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
+#define BSP_USB_GLB_IRQ_NUM INT003_IRQn
+#define BSP_USB_GLB_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* BSP_USING_USBD */
+
+#if defined (BSP_USING_QSPI)
+#define BSP_QSPI_ERR_IRQ_NUM INT004_IRQn
+#define BSP_QSPI_ERR_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif /* BSP_USING_QSPI */
+
+#if defined(BSP_USING_PULSE_ENCODER_TMRA_1)
+#define BSP_PULSE_ENCODER_TMRA_1_OVF_IRQ_NUM INT080_IRQn
+#define BSP_PULSE_ENCODER_TMRA_1_OVF_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#define BSP_PULSE_ENCODER_TMRA_1_UDF_IRQ_NUM INT081_IRQn
+#define BSP_PULSE_ENCODER_TMRA_1_UDF_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* BSP_USING_PULSE_ENCODER_TMRA_1 */
+
+#if defined(BSP_USING_PULSE_ENCODER_TMR6_1)
+#define BSP_PULSE_ENCODER_TMR6_1_OVF_IRQ_NUM INT050_IRQn
+#define BSP_PULSE_ENCODER_TMR6_1_OVF_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#define BSP_PULSE_ENCODER_TMR6_1_UDF_IRQ_NUM INT051_IRQn
+#define BSP_PULSE_ENCODER_TMR6_1_UDF_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* BSP_USING_PULSE_ENCODER_TMR6_1 */
+
+#if defined(BSP_USING_TMR0_1A)
+#define BSP_USING_TMR0_1A_IRQ_NUM INT046_IRQn
+#define BSP_USING_TMR0_1A_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* BSP_USING_TMR0_1A */
+#if defined(BSP_USING_TMR0_1B)
+#define BSP_USING_TMR0_1B_IRQ_NUM INT047_IRQn
+#define BSP_USING_TMR0_1B_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* BSP_USING_TMR0_1B */
+#if defined(BSP_USING_TMR0_2A)
+#define BSP_USING_TMR0_2A_IRQ_NUM INT048_IRQn
+#define BSP_USING_TMR0_2A_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* BSP_USING_TMR0_2A */
+#if defined(BSP_USING_TMR0_2B)
+#define BSP_USING_TMR0_2B_IRQ_NUM INT049_IRQn
+#define BSP_USING_TMR0_2B_IRQ_PRIO DDL_IRQ_PRIO_DEFAULT
+#endif/* BSP_USING_TMR0_2B */
#ifdef __cplusplus
}
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pm_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pm_config.h
new file mode 100644
index 0000000000..3779fdbec5
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pm_config.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-05-12 CDT first version
+ */
+
+#ifndef __PM_CONFIG_H__
+#define __PM_CONFIG_H__
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef BSP_USING_PM
+extern void rt_hw_board_pm_sysclk_cfg(uint8_t run_mode);
+
+#ifndef PM_TICKLESS_TIMER_ENABLE_MASK
+#define PM_TICKLESS_TIMER_ENABLE_MASK \
+( (1UL << PM_SLEEP_MODE_IDLE) | \
+ (1UL << PM_SLEEP_MODE_DEEP))
+#endif
+
+/**
+ * @brief run mode config @ref pm_run_mode_config structure
+ */
+#ifndef PM_RUN_MODE_CFG
+#define PM_RUN_MODE_CFG \
+ { \
+ .sys_clk_cfg = rt_hw_board_pm_sysclk_cfg \
+ }
+#endif /* PM_RUN_MODE_CFG */
+
+/**
+ * @brief sleep idle config @ref pm_sleep_mode_idle_config structure
+ */
+#ifndef PM_SLEEP_IDLE_CFG
+#define PM_SLEEP_IDLE_CFG \
+{ \
+ .pwc_sleep_type = PWC_SLEEP_WFE_INT, \
+}
+#endif /*PM_SLEEP_IDLE_CFG*/
+
+/**
+ * @brief sleep deep config @ref pm_sleep_mode_deep_config structure
+ */
+#ifndef PM_SLEEP_DEEP_CFG
+#define PM_SLEEP_DEEP_CFG \
+{ \
+ { \
+ .u16Clock = PWC_STOP_CLK_KEEP, \
+ .u8StopDrv = PWC_STOP_DRV_HIGH, \
+ .u16ExBusHold = PWC_STOP_EXBUS_HIZ, \
+ .u16FlashWait = PWC_STOP_FLASH_WAIT_ON, \
+ }, \
+ .pwc_stop_type = PWC_STOP_WFE_INT, \
+}
+#endif /*PM_SLEEP_DEEP_CFG*/
+
+/**
+ * @brief sleep standby config @ref pm_sleep_mode_standby_config structure
+ */
+#ifndef PM_SLEEP_STANDBY_CFG
+#define PM_SLEEP_STANDBY_CFG \
+{ \
+ { \
+ .u8Mode = PWC_PD_MD1, \
+ .u8IOState = PWC_PD_IO_KEEP1, \
+ .u8VcapCtrl = PWC_PD_VCAP_0P047UF, \
+ }, \
+}
+#endif /*PM_SLEEP_STANDBY_CFG*/
+
+/**
+ * @brief sleep shutdown config @ref pm_sleep_mode_shutdown_config structure
+ */
+#ifndef PM_SLEEP_SHUTDOWN_CFG
+#define PM_SLEEP_SHUTDOWN_CFG \
+{ \
+ { \
+ .u8Mode = PWC_PD_MD3, \
+ .u8IOState = PWC_PD_IO_KEEP1, \
+ .u8VcapCtrl = PWC_PD_VCAP_0P047UF, \
+ }, \
+}
+#endif /*PM_SLEEP_SHUTDOWN_CFG*/
+
+#endif /* BSP_USING_PM */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PM_CONFIG_H__ */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pulse_encoder_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pulse_encoder_config.h
new file mode 100644
index 0000000000..a95116ea0c
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pulse_encoder_config.h
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-06-09 CDT first version
+ */
+
+#ifndef __PULSE_ENCODER_CONFIG_H__
+#define __PULSE_ENCODER_CONFIG_H__
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(RT_USING_PULSE_ENCODER)
+
+#ifdef BSP_USING_PULSE_ENCODER_TMRA_1
+#ifndef PULSE_ENCODER_TMRA_1_CONFIG
+#define PULSE_ENCODER_TMRA_1_CONFIG \
+ { \
+ .tmr_handler = CM_TMRA_1, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMRA_1, \
+ .hw_count = \
+ { \
+ .u16CountUpCond = TMRA_CNT_UP_COND_CLKA_HIGH_CLKB_RISING, \
+ .u16CountDownCond = TMRA_CNT_DOWN_COND_CLKB_HIGH_CLKA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMRA_1_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMRA_1_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMRA_1_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMRA_1_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMRA_1_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMRA_1_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_a1" \
+ }
+#endif /* PULSE_ENCODER_TMRA_1_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMRA_1 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMRA_2
+#ifndef PULSE_ENCODER_TMRA_2_CONFIG
+#define PULSE_ENCODER_TMRA_2_CONFIG \
+ { \
+ .tmr_handler = CM_TMRA_2, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMRA_2, \
+ .hw_count = \
+ { \
+ .u16CountUpCond = TMRA_CNT_UP_COND_CLKA_HIGH_CLKB_RISING, \
+ .u16CountDownCond = TMRA_CNT_DOWN_COND_CLKB_HIGH_CLKA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMRA_2_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMRA_2_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMRA_2_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMRA_2_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMRA_2_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMRA_2_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_a2" \
+ }
+#endif /* PULSE_ENCODER_TMRA_2_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMRA_2 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMRA_3
+#ifndef PULSE_ENCODER_TMRA_3_CONFIG
+#define PULSE_ENCODER_TMRA_3_CONFIG \
+ { \
+ .tmr_handler = CM_TMRA_3, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMRA_3, \
+ .hw_count = \
+ { \
+ .u16CountUpCond = TMRA_CNT_UP_COND_CLKA_HIGH_CLKB_RISING, \
+ .u16CountDownCond = TMRA_CNT_DOWN_COND_CLKB_HIGH_CLKA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMRA_3_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMRA_3_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMRA_3_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMRA_3_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMRA_3_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMRA_3_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_a3" \
+ }
+#endif /* PULSE_ENCODER_TMRA_3_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMRA_3 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMRA_4
+#ifndef PULSE_ENCODER_TMRA_4_CONFIG
+#define PULSE_ENCODER_TMRA_4_CONFIG \
+ { \
+ .tmr_handler = CM_TMRA_4, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMRA_4, \
+ .hw_count = \
+ { \
+ .u16CountUpCond = TMRA_CNT_UP_COND_CLKA_HIGH_CLKB_RISING, \
+ .u16CountDownCond = TMRA_CNT_DOWN_COND_CLKB_HIGH_CLKA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMRA_4_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMRA_4_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMRA_4_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMRA_4_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMRA_4_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMRA_4_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_a4" \
+ }
+#endif /* PULSE_ENCODER_TMRA_4_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMRA_4 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMRA_5
+#ifndef PULSE_ENCODER_TMRA_5_CONFIG
+#define PULSE_ENCODER_TMRA_5_CONFIG \
+ { \
+ .tmr_handler = CM_TMRA_5, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMRA_5, \
+ .hw_count = \
+ { \
+ .u16CountUpCond = TMRA_CNT_UP_COND_CLKA_HIGH_CLKB_RISING, \
+ .u16CountDownCond = TMRA_CNT_DOWN_COND_CLKB_HIGH_CLKA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMRA_5_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMRA_5_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMRA_5_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMRA_5_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMRA_5_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMRA_5_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_a5" \
+ }
+#endif /* PULSE_ENCODER_TMRA_5_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMRA_5 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMRA_6
+#ifndef PULSE_ENCODER_TMRA_6_CONFIG
+#define PULSE_ENCODER_TMRA_6_CONFIG \
+ { \
+ .tmr_handler = CM_TMRA_6, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMRA_6, \
+ .hw_count = \
+ { \
+ .u16CountUpCond = TMRA_CNT_UP_COND_CLKA_HIGH_CLKB_RISING, \
+ .u16CountDownCond = TMRA_CNT_DOWN_COND_CLKB_HIGH_CLKA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMRA_6_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMRA_6_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMRA_6_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMRA_6_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMRA_6_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMRA_6_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_a6" \
+ }
+#endif /* PULSE_ENCODER_TMRA_6_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMRA_6 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMR6_1
+#ifndef PULSE_ENCODER_TMR6_1_CONFIG
+#define PULSE_ENCODER_TMR6_1_CONFIG \
+ { \
+ .tmr_handler = CM_TMR6_1, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMR6_1, \
+ .hw_count = \
+ { \
+ .u32CountUpCond = TMR6_CNT_UP_COND_PWMA_HIGH_PWMB_RISING, \
+ .u32CountDownCond = TMR6_CNT_DOWN_COND_PWMB_HIGH_PWMA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMR6_1_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMR6_1_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMR6_1_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMR6_1_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMR6_1_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMR6_1_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_61" \
+ }
+#endif /* PULSE_ENCODER_TMR6_1_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMR6_1 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMR6_2
+#ifndef PULSE_ENCODER_TMR6_2_CONFIG
+#define PULSE_ENCODER_TMR6_2_CONFIG \
+ { \
+ .tmr_handler = CM_TMR6_2, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMR6_2, \
+ .hw_count = \
+ { \
+ .u32CountUpCond = TMR6_CNT_UP_COND_PWMA_HIGH_PWMB_RISING, \
+ .u32CountDownCond = TMR6_CNT_DOWN_COND_PWMB_HIGH_PWMA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMR6_2_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMR6_2_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMR6_2_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMR6_2_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMR6_2_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMR6_2_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_62" \
+ }
+#endif /* PULSE_ENCODER_TMR6_2_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMR6_2 */
+
+#ifdef BSP_USING_PULSE_ENCODER_TMR6_3
+#ifndef PULSE_ENCODER_TMR6_3_CONFIG
+#define PULSE_ENCODER_TMR6_3_CONFIG \
+ { \
+ .tmr_handler = CM_TMR6_3, \
+ .u32Fcg2Periph = FCG2_PERIPH_TMR6_3, \
+ .hw_count = \
+ { \
+ .u32CountUpCond = TMR6_CNT_UP_COND_PWMA_HIGH_PWMB_RISING, \
+ .u32CountDownCond = TMR6_CNT_DOWN_COND_PWMB_HIGH_PWMA_RISING, \
+ }, \
+ .isr = \
+ { \
+ .enIntSrc_OVF = INT_SRC_TMR6_3_OVF, \
+ .enIRQn_OVF = BSP_PULSE_ENCODER_TMR6_3_OVF_IRQ_NUM, \
+ .u8Int_Prio_OVF = BSP_PULSE_ENCODER_TMR6_3_OVF_IRQ_PRIO, \
+ .enIntSrc_UDF = INT_SRC_TMR6_3_UDF, \
+ .enIRQn_UDF = BSP_PULSE_ENCODER_TMR6_3_UDF_IRQ_NUM, \
+ .u8Int_Prio_UDF = BSP_PULSE_ENCODER_TMR6_3_UDF_IRQ_PRIO, \
+ }, \
+ .u32PeriodValue = 1000UL, \
+ .name = "pulse_63" \
+ }
+#endif /* PULSE_ENCODER_TMR6_3_CONFIG */
+#endif /* BSP_USING_PULSE_ENCODER_TMR6_3 */
+
+#endif /* RT_USING_PULSE_ENCODER */
+
+#endif /* __PULSE_ENCODER_CONFIG_H__ */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pwm_tmr_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pwm_tmr_config.h
new file mode 100644
index 0000000000..f1850caa37
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/pwm_tmr_config.h
@@ -0,0 +1,433 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-02-22 CDT first version
+ */
+
+#ifndef __PWM_TMR_CONFIG_H__
+#define __PWM_TMR_CONFIG_H__
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef BSP_USING_PWM_TMRA
+
+#ifdef BSP_USING_PWM_TMRA_1
+#ifndef PWM_TMRA_1_CONFIG
+#define PWM_TMRA_1_CONFIG \
+ { \
+ .name = "pwm_a1", \
+ .instance = CM_TMRA_1, \
+ .channel = 0, \
+ .stcTmraInit = \
+ { \
+ .u8CountSrc = TMRA_CNT_SRC_SW, \
+ .u32PeriodValue = 0xFFFF, \
+ .sw_count = \
+ { \
+ .u8ClockDiv = TMRA_CLK_DIV1, \
+ .u8CountMode = TMRA_MD_SAWTOOTH, \
+ .u8CountDir = TMRA_DIR_DOWN, \
+ }, \
+ }, \
+ .stcPwmInit = \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u16StartPolarity = TMRA_PWM_LOW, \
+ .u16StopPolarity = TMRA_PWM_LOW, \
+ .u16CompareMatchPolarity = TMRA_PWM_HIGH, \
+ .u16PeriodMatchPolarity = TMRA_PWM_LOW, \
+ }, \
+ }
+#endif /* PWM_TMRA_1_CONFIG */
+#endif /* BSP_USING_PWM_TMRA_1 */
+
+#ifdef BSP_USING_PWM_TMRA_2
+#ifndef PWM_TMRA_2_CONFIG
+#define PWM_TMRA_2_CONFIG \
+ { \
+ .name = "pwm_a2", \
+ .instance = CM_TMRA_2, \
+ .channel = 0, \
+ .stcTmraInit = \
+ { \
+ .u8CountSrc = TMRA_CNT_SRC_SW, \
+ .u32PeriodValue = 0xFFFF, \
+ .sw_count = \
+ { \
+ .u8ClockDiv = TMRA_CLK_DIV1, \
+ .u8CountMode = TMRA_MD_SAWTOOTH, \
+ .u8CountDir = TMRA_DIR_DOWN, \
+ }, \
+ }, \
+ .stcPwmInit = \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u16StartPolarity = TMRA_PWM_LOW, \
+ .u16StopPolarity = TMRA_PWM_LOW, \
+ .u16CompareMatchPolarity = TMRA_PWM_HIGH, \
+ .u16PeriodMatchPolarity = TMRA_PWM_LOW, \
+ }, \
+ }
+#endif /* PWM_TMRA_2_CONFIG */
+#endif /* BSP_USING_PWM_TMRA_2 */
+
+#ifdef BSP_USING_PWM_TMRA_3
+#ifndef PWM_TMRA_3_CONFIG
+#define PWM_TMRA_3_CONFIG \
+ { \
+ .name = "pwm_a3", \
+ .instance = CM_TMRA_3, \
+ .channel = 0, \
+ .stcTmraInit = \
+ { \
+ .u8CountSrc = TMRA_CNT_SRC_SW, \
+ .u32PeriodValue = 0xFFFF, \
+ .sw_count = \
+ { \
+ .u8ClockDiv = TMRA_CLK_DIV1, \
+ .u8CountMode = TMRA_MD_SAWTOOTH, \
+ .u8CountDir = TMRA_DIR_DOWN, \
+ }, \
+ }, \
+ .stcPwmInit = \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u16StartPolarity = TMRA_PWM_LOW, \
+ .u16StopPolarity = TMRA_PWM_LOW, \
+ .u16CompareMatchPolarity = TMRA_PWM_HIGH, \
+ .u16PeriodMatchPolarity = TMRA_PWM_LOW, \
+ }, \
+ }
+#endif /* PWM_TMRA_3_CONFIG */
+#endif /* BSP_USING_PWM_TMRA_3 */
+
+#ifdef BSP_USING_PWM_TMRA_4
+#ifndef PWM_TMRA_4_CONFIG
+#define PWM_TMRA_4_CONFIG \
+ { \
+ .name = "pwm_a4", \
+ .instance = CM_TMRA_4, \
+ .channel = 0, \
+ .stcTmraInit = \
+ { \
+ .u8CountSrc = TMRA_CNT_SRC_SW, \
+ .u32PeriodValue = 0xFFFF, \
+ .sw_count = \
+ { \
+ .u8ClockDiv = TMRA_CLK_DIV1, \
+ .u8CountMode = TMRA_MD_SAWTOOTH, \
+ .u8CountDir = TMRA_DIR_DOWN, \
+ }, \
+ }, \
+ .stcPwmInit = \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u16StartPolarity = TMRA_PWM_LOW, \
+ .u16StopPolarity = TMRA_PWM_LOW, \
+ .u16CompareMatchPolarity = TMRA_PWM_HIGH, \
+ .u16PeriodMatchPolarity = TMRA_PWM_LOW, \
+ }, \
+ }
+#endif /* PWM_TMRA_4_CONFIG */
+#endif /* BSP_USING_PWM_TMRA_4 */
+
+#ifdef BSP_USING_PWM_TMRA_5
+#ifndef PWM_TMRA_5_CONFIG
+#define PWM_TMRA_5_CONFIG \
+ { \
+ .name = "pwm_a5", \
+ .instance = CM_TMRA_5, \
+ .channel = 0, \
+ .stcTmraInit = \
+ { \
+ .u8CountSrc = TMRA_CNT_SRC_SW, \
+ .u32PeriodValue = 0xFFFF, \
+ .sw_count = \
+ { \
+ .u8ClockDiv = TMRA_CLK_DIV1, \
+ .u8CountMode = TMRA_MD_SAWTOOTH, \
+ .u8CountDir = TMRA_DIR_DOWN, \
+ }, \
+ }, \
+ .stcPwmInit = \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u16StartPolarity = TMRA_PWM_LOW, \
+ .u16StopPolarity = TMRA_PWM_LOW, \
+ .u16CompareMatchPolarity = TMRA_PWM_HIGH, \
+ .u16PeriodMatchPolarity = TMRA_PWM_LOW, \
+ }, \
+ }
+#endif /* PWM_TMRA_5_CONFIG */
+#endif /* BSP_USING_PWM_TMRA_5 */
+
+#ifdef BSP_USING_PWM_TMRA_6
+#ifndef PWM_TMRA_6_CONFIG
+#define PWM_TMRA_6_CONFIG \
+ { \
+ .name = "pwm_a6", \
+ .instance = CM_TMRA_6, \
+ .channel = 0, \
+ .stcTmraInit = \
+ { \
+ .u8CountSrc = TMRA_CNT_SRC_SW, \
+ .u32PeriodValue = 0xFFFF, \
+ .sw_count = \
+ { \
+ .u8ClockDiv = TMRA_CLK_DIV1, \
+ .u8CountMode = TMRA_MD_SAWTOOTH, \
+ .u8CountDir = TMRA_DIR_DOWN, \
+ }, \
+ }, \
+ .stcPwmInit = \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u16StartPolarity = TMRA_PWM_LOW, \
+ .u16StopPolarity = TMRA_PWM_LOW, \
+ .u16CompareMatchPolarity = TMRA_PWM_HIGH, \
+ .u16PeriodMatchPolarity = TMRA_PWM_LOW, \
+ }, \
+ }
+#endif /* PWM_TMRA_6_CONFIG */
+#endif /* BSP_USING_PWM_TMRA_6 */
+
+#endif /* BSP_USING_PWM_TMRA */
+
+#ifdef BSP_USING_PWM_TMR4
+
+#ifdef BSP_USING_PWM_TMR4_1
+#ifndef PWM_TMR4_1_CONFIG
+#define PWM_TMR4_1_CONFIG \
+ { \
+ .name = "pwm_t41", \
+ .instance = CM_TMR4_1, \
+ .channel = 0, \
+ .stcTmr4Init = \
+ { \
+ .u16ClockDiv = TMR4_CLK_DIV1, \
+ .u16PeriodValue = 0xFFFFU, \
+ .u16CountMode = TMR4_MD_SAWTOOTH, \
+ .u16ClockSrc = TMR4_CLK_SRC_INTERNCLK,\
+ }, \
+ .stcTmr4OcInit = \
+ { \
+ .u16CompareValue = 0x0000, \
+ .u16OcInvalidPolarity = TMR4_OC_INVD_LOW, \
+ .u16CompareModeBufCond = TMR4_OC_BUF_COND_IMMED,\
+ .u16CompareValueBufCond = TMR4_OC_BUF_COND_PEAK, \
+ .u16BufLinkTransObject = 0U, \
+ }, \
+ .stcTmr4PwmInit = \
+ { \
+ .u16Mode = TMR4_PWM_MD_THROUGH, \
+ .u16ClockDiv = TMR4_PWM_CLK_DIV1, \
+ .u16Polarity = TMR4_PWM_OXH_HOLD_OXL_HOLD,\
+ }, \
+ }
+#endif /* PWM_TMR4_1_CONFIG */
+#endif /* BSP_USING_PWM_TMR4_1 */
+
+#ifdef BSP_USING_PWM_TMR4_2
+#ifndef PWM_TMR4_2_CONFIG
+#define PWM_TMR4_2_CONFIG \
+ { \
+ .name = "pwm_t42", \
+ .instance = CM_TMR4_2, \
+ .channel = 0, \
+ .stcTmr4Init = \
+ { \
+ .u16ClockDiv = TMR4_CLK_DIV1, \
+ .u16PeriodValue = 0xFFFFU, \
+ .u16CountMode = TMR4_MD_SAWTOOTH, \
+ .u16ClockSrc = TMR4_CLK_SRC_INTERNCLK,\
+ }, \
+ .stcTmr4OcInit = \
+ { \
+ .u16CompareValue = 0x0000, \
+ .u16OcInvalidPolarity = TMR4_OC_INVD_LOW, \
+ .u16CompareModeBufCond = TMR4_OC_BUF_COND_IMMED,\
+ .u16CompareValueBufCond = TMR4_OC_BUF_COND_PEAK, \
+ .u16BufLinkTransObject = 0U, \
+ }, \
+ .stcTmr4PwmInit = \
+ { \
+ .u16Mode = TMR4_PWM_MD_THROUGH, \
+ .u16ClockDiv = TMR4_PWM_CLK_DIV1, \
+ .u16Polarity = TMR4_PWM_OXH_HOLD_OXL_HOLD,\
+ }, \
+ }
+#endif /* PWM_TMR4_2_CONFIG */
+#endif /* BSP_USING_PWM_TMR4_2 */
+
+#ifdef BSP_USING_PWM_TMR4_3
+#ifndef PWM_TMR4_3_CONFIG
+#define PWM_TMR4_3_CONFIG \
+ { \
+ .name = "pwm_t43", \
+ .instance = CM_TMR4_3, \
+ .channel = 0, \
+ .stcTmr4Init = \
+ { \
+ .u16ClockDiv = TMR4_CLK_DIV1, \
+ .u16PeriodValue = 0xFFFFU, \
+ .u16CountMode = TMR4_MD_SAWTOOTH, \
+ .u16ClockSrc = TMR4_CLK_SRC_INTERNCLK,\
+ }, \
+ .stcTmr4OcInit = \
+ { \
+ .u16CompareValue = 0x0000, \
+ .u16OcInvalidPolarity = TMR4_OC_INVD_LOW, \
+ .u16CompareModeBufCond = TMR4_OC_BUF_COND_IMMED,\
+ .u16CompareValueBufCond = TMR4_OC_BUF_COND_PEAK, \
+ .u16BufLinkTransObject = 0U, \
+ }, \
+ .stcTmr4PwmInit = \
+ { \
+ .u16Mode = TMR4_PWM_MD_THROUGH, \
+ .u16ClockDiv = TMR4_PWM_CLK_DIV1, \
+ .u16Polarity = TMR4_PWM_OXH_HOLD_OXL_HOLD,\
+ }, \
+ }
+#endif /* PWM_TMR4_3_CONFIG */
+#endif /* BSP_USING_PWM_TMR4_3 */
+
+#endif /* BSP_USING_PWM_TMR4 */
+
+#ifdef BSP_USING_PWM_TMR6
+
+#ifdef BSP_USING_PWM_TMR6_1
+#ifndef PWM_TMR6_1_CONFIG
+#define PWM_TMR6_1_CONFIG \
+ { \
+ .name = "pwm_t61", \
+ .instance = CM_TMR6_1, \
+ .channel = 0, \
+ .stcTmr6Init = \
+ { \
+ .u8CountSrc = TMR6_CNT_SRC_SW, \
+ .sw_count = \
+ { \
+ .u32ClockDiv = TMR6_CLK_DIV1, \
+ .u32CountMode = TMR6_MD_SAWTOOTH, \
+ .u32CountDir = TMR6_CNT_UP, \
+ }, \
+ .u32PeriodValue = 0xFFFF, \
+ }, \
+ .stcPwmInit = \
+ { \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u32StartPolarity = TMR6_PWM_HIGH, \
+ .u32StopPolarity = TMR6_PWM_HIGH, \
+ .u32CompareMatchPolarity = TMR6_PWM_LOW, \
+ .u32PeriodMatchPolarity = TMR6_PWM_HIGH, \
+ .u32StartStopHold = TMR6_PWM_START_STOP_HOLD, \
+ }, \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u32StartPolarity = TMR6_PWM_HIGH, \
+ .u32StopPolarity = TMR6_PWM_HIGH, \
+ .u32CompareMatchPolarity = TMR6_PWM_LOW, \
+ .u32PeriodMatchPolarity = TMR6_PWM_HIGH, \
+ .u32StartStopHold = TMR6_PWM_START_STOP_HOLD, \
+ } \
+ }, \
+ }
+#endif /* PWM_TMR6_1_CONFIG */
+#endif /* BSP_USING_PWM_TMR6_1 */
+#ifdef BSP_USING_PWM_TMR6_2
+#ifndef PWM_TMR6_2_CONFIG
+#define PWM_TMR6_2_CONFIG \
+ { \
+ .name = "pwm_t61", \
+ .instance = CM_TMR6_2, \
+ .channel = 0, \
+ .stcTmr6Init = \
+ { \
+ .u8CountSrc = TMR6_CNT_SRC_SW, \
+ .sw_count = \
+ { \
+ .u32ClockDiv = TMR6_CLK_DIV1, \
+ .u32CountMode = TMR6_MD_SAWTOOTH, \
+ .u32CountDir = TMR6_CNT_DOWN, \
+ }, \
+ .u32PeriodValue = 0xFFFF, \
+ }, \
+ .stcPwmInit = \
+ { \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u32StartPolarity = TMR6_PWM_LOW, \
+ .u32StopPolarity = TMR6_PWM_LOW, \
+ .u32CompareMatchPolarity = TMR6_PWM_HIGH, \
+ .u32PeriodMatchPolarity = TMR6_PWM_LOW, \
+ .u32StartStopHold = TMR6_PWM_START_STOP_HOLD, \
+ }, \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u32StartPolarity = TMR6_PWM_LOW, \
+ .u32StopPolarity = TMR6_PWM_LOW, \
+ .u32CompareMatchPolarity = TMR6_PWM_HIGH, \
+ .u32PeriodMatchPolarity = TMR6_PWM_LOW, \
+ .u32StartStopHold = TMR6_PWM_START_STOP_HOLD, \
+ } \
+ }, \
+ }
+#endif /* PWM_TMR6_2_CONFIG */
+#endif /* BSP_USING_PWM_TMR6_2 */
+#ifdef BSP_USING_PWM_TMR6_3
+#ifndef PWM_TMR6_3_CONFIG
+#define PWM_TMR6_3_CONFIG \
+ { \
+ .name = "pwm_t61", \
+ .instance = CM_TMR6_3, \
+ .channel = 0, \
+ .stcTmr6Init = \
+ { \
+ .u8CountSrc = TMR6_CNT_SRC_SW, \
+ .sw_count = \
+ { \
+ .u32ClockDiv = TMR6_CLK_DIV1, \
+ .u32CountMode = TMR6_MD_SAWTOOTH, \
+ .u32CountDir = TMR6_CNT_DOWN, \
+ }, \
+ .u32PeriodValue = 0xFFFF, \
+ }, \
+ .stcPwmInit = \
+ { \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u32StartPolarity = TMR6_PWM_LOW, \
+ .u32StopPolarity = TMR6_PWM_LOW, \
+ .u32CompareMatchPolarity = TMR6_PWM_HIGH, \
+ .u32PeriodMatchPolarity = TMR6_PWM_LOW, \
+ .u32StartStopHold = TMR6_PWM_START_STOP_HOLD, \
+ }, \
+ { \
+ .u32CompareValue = 0x0000, \
+ .u32StartPolarity = TMR6_PWM_LOW, \
+ .u32StopPolarity = TMR6_PWM_LOW, \
+ .u32CompareMatchPolarity = TMR6_PWM_HIGH, \
+ .u32PeriodMatchPolarity = TMR6_PWM_LOW, \
+ .u32StartStopHold = TMR6_PWM_START_STOP_HOLD, \
+ } \
+ }, \
+ }
+#endif /* PWM_TMR6_3_CONFIG */
+#endif /* BSP_USING_PWM_TMR6_3 */
+
+#endif /* BSP_USING_PWM_TMR6 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PWM_TMRA_CONFIG_H__ */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/qspi_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/qspi_config.h
new file mode 100644
index 0000000000..b8e74bfae1
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/qspi_config.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-06-15 CDT first version
+ */
+
+#ifndef __QSPI_CONFIG_H__
+#define __QSPI_CONFIG_H__
+
+#include
+#include "irq_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef BSP_USING_QSPI
+#ifndef QSPI_BUS_CONFIG
+#define QSPI_BUS_CONFIG \
+ { \
+ .Instance = CM_QSPI, \
+ .clock = FCG1_PERIPH_QSPI, \
+ .timeout = 5000UL, \
+ .err_irq.irq_config = \
+ { \
+ .irq_num = BSP_QSPI_ERR_IRQ_NUM, \
+ .irq_prio = BSP_QSPI_ERR_IRQ_PRIO, \
+ .int_src = INT_SRC_QSPI_INTR, \
+ }, \
+ }
+#endif /* QSPI_BUS_CONFIG */
+
+#ifndef QSPI_INIT_PARAMS
+#define QSPI_INIT_PARAMS \
+ { \
+ .u32PrefetchMode = QSPI_PREFETCH_MD_INVD, \
+ .u32SetupTime = QSPI_QSSN_SETUP_ADVANCE_QSCK0P5, \
+ .u32ReleaseTime = QSPI_QSSN_RELEASE_DELAY_QSCK32, \
+ .u32IntervalTime = QSPI_QSSN_INTERVAL_QSCK1, \
+ }
+#endif /* QSPI_INIT_PARAMS */
+
+#define QSPI_WP_PIN_LEVEL QSPI_WP_PIN_HIGH
+
+#ifdef BSP_QSPI_USING_DMA
+#ifndef QSPI_DMA_CONFIG
+#define QSPI_DMA_CONFIG \
+ { \
+ .Instance = QSPI_DMA_INSTANCE, \
+ .channel = QSPI_DMA_CHANNEL, \
+ .clock = QSPI_DMA_CLOCK, \
+ .trigger_select = QSPI_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_AOS_STRG, \
+ .flag = QSPI_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = QSPI_DMA_IRQn, \
+ .irq_prio = QSPI_DMA_INT_PRIO, \
+ .int_src = QSPI_DMA_INT_SRC, \
+ } \
+ }
+#endif /* QSPI_DMA_CONFIG */
+#endif /* BSP_QSPI_USING_DMA */
+#endif /* BSP_USING_SPI1 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__QSPI_CONFIG_H__ */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/sdio_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/sdio_config.h
new file mode 100644
index 0000000000..8d1d1bf897
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/sdio_config.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-02-14 CDT first version
+ */
+
+#ifndef __SDIO_CONFIG_H__
+#define __SDIO_CONFIG_H__
+
+#include
+#include "irq_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if defined(BSP_USING_SDIO1)
+#ifndef SDIO1_BUS_CONFIG
+#define SDIO1_BUS_CONFIG \
+ { \
+ .name = "sdio1", \
+ .instance = CM_SDIOC1, \
+ .clock = FCG1_PERIPH_SDIOC1, \
+ .irq_config = \
+ { \
+ .irq_num = BSP_SDIO1_IRQ_NUM, \
+ .irq_prio = BSP_SDIO1_IRQ_PRIO, \
+ .int_src = INT_SRC_SDIOC1_SD, \
+ }, \
+ .dma_rx = \
+ { \
+ .Instance = SDIO1_RX_DMA_INSTANCE, \
+ .channel = SDIO1_RX_DMA_CHANNEL, \
+ .clock = SDIO1_RX_DMA_CLOCK, \
+ .trigger_select = SDIO1_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SDIOC1_DMAR, \
+ }, \
+ .dma_tx = \
+ { \
+ .Instance = SDIO1_TX_DMA_INSTANCE, \
+ .channel = SDIO1_TX_DMA_CHANNEL, \
+ .clock = SDIO1_TX_DMA_CLOCK, \
+ .trigger_select = SDIO1_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SDIOC1_DMAW, \
+ }, \
+ }
+#endif /* SDIO1_BUS_CONFIG */
+#endif /* BSP_USING_SDIO1 */
+
+#if defined(BSP_USING_SDIO2)
+#ifndef SDIO2_BUS_CONFIG
+#define SDIO2_BUS_CONFIG \
+ { \
+ .name = "sdio2", \
+ .instance = CM_SDIOC2, \
+ .clock = FCG1_PERIPH_SDIOC2, \
+ .irq_config = \
+ { \
+ .irq_num = BSP_SDIO2_IRQ_NUM, \
+ .irq_prio = BSP_SDIO2_IRQ_PRIO, \
+ .int_src = INT_SRC_SDIOC2_SD, \
+ }, \
+ .dma_rx = \
+ { \
+ .Instance = SDIO2_RX_DMA_INSTANCE, \
+ .channel = SDIO2_RX_DMA_CHANNEL, \
+ .clock = SDIO2_RX_DMA_CLOCK, \
+ .trigger_select = SDIO2_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SDIOC2_DMAR, \
+ }, \
+ .dma_tx = \
+ { \
+ .Instance = SDIO2_TX_DMA_INSTANCE, \
+ .channel = SDIO2_TX_DMA_CHANNEL, \
+ .clock = SDIO2_TX_DMA_CLOCK, \
+ .trigger_select = SDIO2_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SDIOC2_DMAW, \
+ }, \
+ }
+#endif /* SDIO2_BUS_CONFIG */
+#endif /* BSP_USING_SDIO2 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/spi_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/spi_config.h
new file mode 100644
index 0000000000..2e908e3d05
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/spi_config.h
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2022-04-28 CDT first version
+ */
+
+#ifndef __SPI_CONFIG_H__
+#define __SPI_CONFIG_H__
+
+#include
+#include "irq_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef BSP_USING_SPI1
+#ifndef SPI1_BUS_CONFIG
+#define SPI1_BUS_CONFIG \
+ { \
+ .Instance = CM_SPI1, \
+ .bus_name = "spi1", \
+ .clock = FCG1_PERIPH_SPI1, \
+ .timeout = 5000UL, \
+ .err_irq.irq_config = \
+ { \
+ .irq_num = BSP_SPI1_ERR_IRQ_NUM, \
+ .irq_prio = BSP_SPI1_ERR_IRQ_PRIO, \
+ .int_src = INT_SRC_SPI1_SPEI, \
+ }, \
+ }
+#endif /* SPI1_BUS_CONFIG */
+#endif /* BSP_USING_SPI1 */
+
+#ifdef BSP_SPI1_TX_USING_DMA
+#ifndef SPI1_TX_DMA_CONFIG
+#define SPI1_TX_DMA_CONFIG \
+ { \
+ .Instance = SPI1_TX_DMA_INSTANCE, \
+ .channel = SPI1_TX_DMA_CHANNEL, \
+ .clock = SPI1_TX_DMA_CLOCK, \
+ .trigger_select = SPI1_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI1_SPTI, \
+ .flag = SPI1_TX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI1_TX_DMA_IRQn, \
+ .irq_prio = SPI1_TX_DMA_INT_PRIO, \
+ .int_src = SPI1_TX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI1_TX_DMA_CONFIG */
+#endif /* BSP_SPI1_TX_USING_DMA */
+
+#ifdef BSP_SPI1_RX_USING_DMA
+#ifndef SPI1_RX_DMA_CONFIG
+#define SPI1_RX_DMA_CONFIG \
+ { \
+ .Instance = SPI1_RX_DMA_INSTANCE, \
+ .channel = SPI1_RX_DMA_CHANNEL, \
+ .clock = SPI1_RX_DMA_CLOCK, \
+ .trigger_select = SPI1_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI1_SPRI, \
+ .flag = SPI1_RX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI1_RX_DMA_IRQn, \
+ .irq_prio = SPI1_RX_DMA_INT_PRIO, \
+ .int_src = SPI1_RX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI1_RX_DMA_CONFIG */
+#endif /* BSP_SPI1_RX_USING_DMA */
+
+#ifdef BSP_USING_SPI2
+#ifndef SPI2_BUS_CONFIG
+#define SPI2_BUS_CONFIG \
+ { \
+ .Instance = CM_SPI2, \
+ .bus_name = "spi2", \
+ .clock = FCG1_PERIPH_SPI2, \
+ .timeout = 5000UL, \
+ .err_irq.irq_config = \
+ { \
+ .irq_num = BSP_SPI2_ERR_IRQ_NUM, \
+ .irq_prio = BSP_SPI2_ERR_IRQ_PRIO, \
+ .int_src = INT_SRC_SPI2_SPEI, \
+ }, \
+ }
+#endif /* SPI2_BUS_CONFIG */
+#endif /* BSP_USING_SPI2 */
+
+#ifdef BSP_SPI2_TX_USING_DMA
+#ifndef SPI2_TX_DMA_CONFIG
+#define SPI2_TX_DMA_CONFIG \
+ { \
+ .Instance = SPI2_TX_DMA_INSTANCE, \
+ .channel = SPI2_TX_DMA_CHANNEL, \
+ .clock = SPI2_TX_DMA_CLOCK, \
+ .trigger_select = SPI2_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI2_SPTI, \
+ .flag = SPI2_TX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI2_TX_DMA_IRQn, \
+ .irq_prio = SPI2_TX_DMA_INT_PRIO, \
+ .int_src = SPI2_TX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI2_TX_DMA_CONFIG */
+#endif /* BSP_SPI2_TX_USING_DMA */
+
+#ifdef BSP_SPI2_RX_USING_DMA
+#ifndef SPI2_RX_DMA_CONFIG
+#define SPI2_RX_DMA_CONFIG \
+ { \
+ .Instance = SPI2_RX_DMA_INSTANCE, \
+ .channel = SPI2_RX_DMA_CHANNEL, \
+ .clock = SPI2_RX_DMA_CLOCK, \
+ .trigger_select = SPI2_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI2_SPRI, \
+ .flag = SPI2_RX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI2_RX_DMA_IRQn, \
+ .irq_prio = SPI2_RX_DMA_INT_PRIO, \
+ .int_src = SPI2_RX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI2_RX_DMA_CONFIG */
+#endif /* BSP_SPI2_RX_USING_DMA */
+
+#ifdef BSP_USING_SPI3
+#ifndef SPI3_BUS_CONFIG
+#define SPI3_BUS_CONFIG \
+ { \
+ .Instance = CM_SPI3, \
+ .bus_name = "spi3", \
+ .clock = FCG1_PERIPH_SPI3, \
+ .timeout = 5000UL, \
+ .err_irq.irq_config = \
+ { \
+ .irq_num = BSP_SPI3_ERR_IRQ_NUM, \
+ .irq_prio = BSP_SPI3_ERR_IRQ_PRIO, \
+ .int_src = INT_SRC_SPI3_SPEI, \
+ }, \
+ }
+#endif /* SPI3_BUS_CONFIG */
+#endif /* BSP_USING_SPI3 */
+
+
+#ifdef BSP_SPI3_TX_USING_DMA
+#ifndef SPI3_TX_DMA_CONFIG
+#define SPI3_TX_DMA_CONFIG \
+ { \
+ .Instance = SPI3_TX_DMA_INSTANCE, \
+ .channel = SPI3_TX_DMA_CHANNEL, \
+ .clock = SPI3_TX_DMA_CLOCK, \
+ .trigger_select = SPI3_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI3_SPTI, \
+ .flag = SPI3_TX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI3_TX_DMA_IRQn, \
+ .irq_prio = SPI3_TX_DMA_INT_PRIO, \
+ .int_src = SPI3_TX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI3_TX_DMA_CONFIG */
+#endif /* BSP_SPI3_TX_USING_DMA */
+
+#ifdef BSP_SPI3_RX_USING_DMA
+#ifndef SPI3_RX_DMA_CONFIG
+#define SPI3_RX_DMA_CONFIG \
+ { \
+ .Instance = SPI3_RX_DMA_INSTANCE, \
+ .channel = SPI3_RX_DMA_CHANNEL, \
+ .clock = SPI3_RX_DMA_CLOCK, \
+ .trigger_select = SPI3_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI3_SPRI, \
+ .flag = SPI3_RX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI3_RX_DMA_IRQn, \
+ .irq_prio = SPI3_RX_DMA_INT_PRIO, \
+ .int_src = SPI3_RX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI3_RX_DMA_CONFIG */
+#endif /* BSP_SPI3_RX_USING_DMA */
+
+#ifdef BSP_USING_SPI4
+#ifndef SPI4_BUS_CONFIG
+#define SPI4_BUS_CONFIG \
+ { \
+ .Instance = CM_SPI4, \
+ .bus_name = "spi4", \
+ .clock = FCG1_PERIPH_SPI4, \
+ .timeout = 5000UL, \
+ .err_irq.irq_config = \
+ { \
+ .irq_num = BSP_SPI4_ERR_IRQ_NUM, \
+ .irq_prio = BSP_SPI4_ERR_IRQ_PRIO, \
+ .int_src = INT_SRC_SPI4_SPEI, \
+ }, \
+ }
+#endif /* SPI4_BUS_CONFIG */
+#endif /* BSP_USING_SPI4 */
+
+#ifdef BSP_SPI4_TX_USING_DMA
+#ifndef SPI4_TX_DMA_CONFIG
+#define SPI4_TX_DMA_CONFIG \
+ { \
+ .Instance = SPI4_TX_DMA_INSTANCE, \
+ .channel = SPI4_TX_DMA_CHANNEL, \
+ .clock = SPI4_TX_DMA_CLOCK, \
+ .trigger_select = SPI4_TX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI4_SPTI, \
+ .flag = SPI4_TX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI4_TX_DMA_IRQn, \
+ .irq_prio = SPI4_TX_DMA_INT_PRIO, \
+ .int_src = SPI4_TX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI4_TX_DMA_CONFIG */
+#endif /* BSP_SPI4_TX_USING_DMA */
+
+#ifdef BSP_SPI4_RX_USING_DMA
+#ifndef SPI4_RX_DMA_CONFIG
+#define SPI4_RX_DMA_CONFIG \
+ { \
+ .Instance = SPI4_RX_DMA_INSTANCE, \
+ .channel = SPI4_RX_DMA_CHANNEL, \
+ .clock = SPI4_RX_DMA_CLOCK, \
+ .trigger_select = SPI4_RX_DMA_TRIG_SELECT, \
+ .trigger_event = EVT_SRC_SPI4_SPRI, \
+ .flag = SPI4_RX_DMA_TRANS_FLAG, \
+ .irq_config = \
+ { \
+ .irq_num = SPI4_RX_DMA_IRQn, \
+ .irq_prio = SPI4_RX_DMA_INT_PRIO, \
+ .int_src = SPI4_RX_DMA_INT_SRC, \
+ } \
+ }
+#endif /* SPI4_RX_DMA_CONFIG */
+#endif /* BSP_SPI4_RX_USING_DMA */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__SPI_CONFIG_H__ */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/timer_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/timer_config.h
new file mode 100644
index 0000000000..b18d924d5b
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/timer_config.h
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-06-21 CDT first version
+ */
+
+#ifndef __TMR_CONFIG_H__
+#define __TMR_CONFIG_H__
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef BSP_USING_TMRA_1
+#ifndef TMRA_1_CONFIG
+#define TMRA_1_CONFIG \
+ { \
+ .tmr_handle = CM_TMRA_1, \
+ .clock_source = CLK_BUS_PCLK1, \
+ .clock = FCG2_PERIPH_TMRA_1, \
+ .flag = TMRA_FLAG_OVF, \
+ .isr = \
+ { \
+ .enIntSrc = INT_SRC_TMRA_1_OVF, \
+ .enIRQn = BSP_USING_TMRA_1_IRQ_NUM, \
+ .u8Int_Prio = BSP_USING_TMRA_1_IRQ_PRIO, \
+ }, \
+ .name = "tmra_1" \
+ }
+#endif /* TMRA_1_CONFIG */
+#endif /* BSP_USING_TMRA_1 */
+
+#ifdef BSP_USING_TMRA_2
+#ifndef TMRA_2_CONFIG
+#define TMRA_2_CONFIG \
+ { \
+ .tmr_handle = CM_TMRA_2, \
+ .clock_source = CLK_BUS_PCLK1, \
+ .clock = FCG2_PERIPH_TMRA_2, \
+ .flag = TMRA_FLAG_OVF, \
+ .isr = \
+ { \
+ .enIntSrc = INT_SRC_TMRA_2_OVF, \
+ .enIRQn = BSP_USING_TMRA_2_IRQ_NUM, \
+ .u8Int_Prio = BSP_USING_TMRA_2_IRQ_PRIO, \
+ }, \
+ .name = "tmra_2" \
+ }
+#endif /* TMRA_2_CONFIG */
+#endif /* BSP_USING_TMRA_2 */
+
+#ifdef BSP_USING_TMRA_3
+#ifndef TMRA_3_CONFIG
+#define TMRA_3_CONFIG \
+ { \
+ .tmr_handle = CM_TMRA_3, \
+ .clock_source = CLK_BUS_PCLK1, \
+ .clock = FCG2_PERIPH_TMRA_3, \
+ .flag = TMRA_FLAG_OVF, \
+ .isr = \
+ { \
+ .enIntSrc = INT_SRC_TMRA_3_OVF, \
+ .enIRQn = BSP_USING_TMRA_3_IRQ_NUM, \
+ .u8Int_Prio = BSP_USING_TMRA_3_IRQ_PRIO, \
+ }, \
+ .name = "tmra_3" \
+ }
+#endif /* TMRA_3_CONFIG */
+#endif /* BSP_USING_TMRA_3 */
+
+#ifdef BSP_USING_TMRA_4
+#ifndef TMRA_4_CONFIG
+#define TMRA_4_CONFIG \
+ { \
+ .tmr_handle = CM_TMRA_4, \
+ .clock_source = CLK_BUS_PCLK1, \
+ .clock = FCG2_PERIPH_TMRA_4, \
+ .flag = TMRA_FLAG_OVF, \
+ .isr = \
+ { \
+ .enIntSrc = INT_SRC_TMRA_4_OVF, \
+ .enIRQn = BSP_USING_TMRA_4_IRQ_NUM, \
+ .u8Int_Prio = BSP_USING_TMRA_4_IRQ_PRIO, \
+ }, \
+ .name = "tmra_4" \
+ }
+#endif /* TMRA_4_CONFIG */
+#endif /* BSP_USING_TMRA_4 */
+
+#ifdef BSP_USING_TMRA_5
+#ifndef TMRA_5_CONFIG
+#define TMRA_5_CONFIG \
+ { \
+ .tmr_handle = CM_TMRA_5, \
+ .clock_source = CLK_BUS_PCLK1, \
+ .clock = FCG2_PERIPH_TMRA_5, \
+ .flag = TMRA_FLAG_OVF, \
+ .isr = \
+ { \
+ .enIntSrc = INT_SRC_TMRA_5_OVF, \
+ .enIRQn = BSP_USING_TMRA_5_IRQ_NUM, \
+ .u8Int_Prio = BSP_USING_TMRA_5_IRQ_PRIO, \
+ }, \
+ .name = "tmra_5" \
+ }
+#endif /* TMRA_5_CONFIG */
+#endif /* BSP_USING_TMRA_5 */
+
+#ifdef BSP_USING_TMRA_6
+#ifndef TMRA_6_CONFIG
+#define TMRA_6_CONFIG \
+ { \
+ .tmr_handle = CM_TMRA_6, \
+ .clock_source = CLK_BUS_PCLK1, \
+ .clock = FCG2_PERIPH_TMRA_6, \
+ .flag = TMRA_FLAG_OVF, \
+ .isr = \
+ { \
+ .enIntSrc = INT_SRC_TMRA_6_OVF, \
+ .enIRQn = BSP_USING_TMRA_6_IRQ_NUM, \
+ .u8Int_Prio = BSP_USING_TMRA_6_IRQ_PRIO, \
+ }, \
+ .name = "tmra_6" \
+ }
+#endif /* TMRA_6_CONFIG */
+#endif /* BSP_USING_TMRA_6 */
+
+#endif /* __TMR_CONFIG_H__ */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/uart_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/uart_config.h
index be463c1700..cc8978a16a 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/uart_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/uart_config.h
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -57,6 +56,7 @@ extern "C" {
.clock = UART1_RX_DMA_CLOCK, \
.trigger_select = UART1_RX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART1_RI, \
+ .flag = UART1_RX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART1_RX_DMA_IRQn, \
@@ -83,7 +83,7 @@ extern "C" {
#endif /* UART1_RXTO_CONFIG */
#endif /* BSP_UART1_RX_USING_DMA */
-#if defined(BSP_UART1_TX_USING_DMA)
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART1_TX_USING_DMA)
#ifndef UART1_TX_CPLT_CONFIG
#define UART1_TX_CPLT_CONFIG \
{ \
@@ -94,8 +94,22 @@ extern "C" {
.int_src = INT_SRC_USART1_TCI, \
}, \
}
+#endif
+#elif defined(RT_USING_SERIAL_V2)
+#ifndef UART1_TX_CPLT_CONFIG
+#define UART1_TX_CPLT_CONFIG \
+ { \
+ .irq_config = \
+ { \
+ .irq_num = BSP_UART1_TX_CPLT_IRQ_NUM, \
+ .irq_prio = BSP_UART1_TX_CPLT_IRQ_PRIO, \
+ .int_src = INT_SRC_USART1_TCI, \
+ }, \
+ }
+#endif
#endif /* UART1_TX_CPLT_CONFIG */
+#if defined(BSP_UART1_TX_USING_DMA)
#ifndef UART1_DMA_TX_CONFIG
#define UART1_DMA_TX_CONFIG \
{ \
@@ -104,6 +118,7 @@ extern "C" {
.clock = UART1_TX_DMA_CLOCK, \
.trigger_select = UART1_TX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART1_TI, \
+ .flag = UART1_TX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART1_TX_DMA_IRQn, \
@@ -152,6 +167,7 @@ extern "C" {
.clock = UART2_RX_DMA_CLOCK, \
.trigger_select = UART2_RX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART2_RI, \
+ .flag = UART2_RX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART2_RX_DMA_IRQn, \
@@ -178,7 +194,7 @@ extern "C" {
#endif /* UART2_RXTO_CONFIG */
#endif /* BSP_UART2_RX_USING_DMA */
-#if defined(BSP_UART2_TX_USING_DMA)
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART2_TX_USING_DMA)
#ifndef UART2_TX_CPLT_CONFIG
#define UART2_TX_CPLT_CONFIG \
{ \
@@ -189,8 +205,22 @@ extern "C" {
.int_src = INT_SRC_USART2_TCI, \
}, \
}
+#endif
+#elif defined(RT_USING_SERIAL_V2)
+#ifndef UART2_TX_CPLT_CONFIG
+#define UART2_TX_CPLT_CONFIG \
+ { \
+ .irq_config = \
+ { \
+ .irq_num = BSP_UART2_TX_CPLT_IRQ_NUM, \
+ .irq_prio = BSP_UART2_TX_CPLT_IRQ_PRIO, \
+ .int_src = INT_SRC_USART2_TCI, \
+ }, \
+ }
+#endif
#endif /* UART2_TX_CPLT_CONFIG */
+#if defined(BSP_UART2_TX_USING_DMA)
#ifndef UART2_DMA_TX_CONFIG
#define UART2_DMA_TX_CONFIG \
{ \
@@ -199,6 +229,7 @@ extern "C" {
.clock = UART2_TX_DMA_CLOCK, \
.trigger_select = UART2_TX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART2_TI, \
+ .flag = UART2_TX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART2_TX_DMA_IRQn, \
@@ -247,6 +278,7 @@ extern "C" {
.clock = UART3_RX_DMA_CLOCK, \
.trigger_select = UART3_RX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART3_RI, \
+ .flag = UART3_RX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART3_RX_DMA_IRQn, \
@@ -273,7 +305,7 @@ extern "C" {
#endif /* UART3_RXTO_CONFIG */
#endif /* BSP_UART3_RX_USING_DMA */
-#if defined(BSP_UART3_TX_USING_DMA)
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART3_TX_USING_DMA)
#ifndef UART3_TX_CPLT_CONFIG
#define UART3_TX_CPLT_CONFIG \
{ \
@@ -284,8 +316,22 @@ extern "C" {
.int_src = INT_SRC_USART3_TCI, \
}, \
}
+#endif
+#elif defined(RT_USING_SERIAL_V2)
+#ifndef UART3_TX_CPLT_CONFIG
+#define UART3_TX_CPLT_CONFIG \
+ { \
+ .irq_config = \
+ { \
+ .irq_num = BSP_UART3_TX_CPLT_IRQ_NUM, \
+ .irq_prio = BSP_UART3_TX_CPLT_IRQ_PRIO, \
+ .int_src = INT_SRC_USART3_TCI, \
+ }, \
+ }
+#endif
#endif /* UART3_TX_CPLT_CONFIG */
+#if defined(BSP_UART3_TX_USING_DMA)
#ifndef UART3_DMA_TX_CONFIG
#define UART3_DMA_TX_CONFIG \
{ \
@@ -294,6 +340,7 @@ extern "C" {
.clock = UART3_TX_DMA_CLOCK, \
.trigger_select = UART3_TX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART3_TI, \
+ .flag = UART3_TX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART3_TX_DMA_IRQn, \
@@ -342,6 +389,7 @@ extern "C" {
.clock = UART4_RX_DMA_CLOCK, \
.trigger_select = UART4_RX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART4_RI, \
+ .flag = UART4_RX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART4_RX_DMA_IRQn, \
@@ -368,7 +416,7 @@ extern "C" {
#endif /* UART4_RXTO_CONFIG */
#endif /* BSP_UART4_RX_USING_DMA */
-#if defined(BSP_UART4_TX_USING_DMA)
+#if defined(RT_USING_SERIAL_V1) && defined(BSP_UART4_TX_USING_DMA)
#ifndef UART4_TX_CPLT_CONFIG
#define UART4_TX_CPLT_CONFIG \
{ \
@@ -379,8 +427,22 @@ extern "C" {
.int_src = INT_SRC_USART4_TCI, \
}, \
}
+#endif
+#elif defined(RT_USING_SERIAL_V2)
+#ifndef UART4_TX_CPLT_CONFIG
+#define UART4_TX_CPLT_CONFIG \
+ { \
+ .irq_config = \
+ { \
+ .irq_num = BSP_UART4_TX_CPLT_IRQ_NUM, \
+ .irq_prio = BSP_UART4_TX_CPLT_IRQ_PRIO, \
+ .int_src = INT_SRC_USART4_TCI, \
+ }, \
+ }
+#endif
#endif /* UART4_TX_CPLT_CONFIG */
+#if defined(BSP_UART4_TX_USING_DMA)
#ifndef UART4_DMA_TX_CONFIG
#define UART4_DMA_TX_CONFIG \
{ \
@@ -389,6 +451,7 @@ extern "C" {
.clock = UART4_TX_DMA_CLOCK, \
.trigger_select = UART4_TX_DMA_TRIG_SELECT, \
.trigger_event = EVT_SRC_USART4_TI, \
+ .flag = UART1_TX_DMA_TRANS_FLAG, \
.irq_config = \
{ \
.irq_num = UART4_TX_DMA_IRQn, \
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/usb_config/usb_app_conf.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/usb_config/usb_app_conf.h
new file mode 100644
index 0000000000..b668b2f22b
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/usb_config/usb_app_conf.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-02-14 CDT first version
+ */
+
+#ifndef __USB_APP_CONF_H__
+#define __USB_APP_CONF_H__
+
+/* C binding of definitions if building with C++ compiler */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*******************************************************************************
+ * Include files
+ ******************************************************************************/
+#include "rtconfig.h"
+
+/* USB MODE CONFIGURATION */
+
+
+#if defined(BSP_USING_USBFS)
+#define USB_FS_MODE
+#else
+#define USB_FS_MODE
+#endif
+
+#if defined(BSP_USING_USBD)
+#define USE_DEVICE_MODE
+#elif defined(BSP_USING_USBH)
+#define USE_HOST_MODE
+#else
+#define USE_DEVICE_MODE
+#endif
+
+#ifndef USB_FS_MODE
+#error "USB_FS_MODE should be defined"
+#endif
+
+#ifndef USE_DEVICE_MODE
+#ifndef USE_HOST_MODE
+#error "USE_DEVICE_MODE or USE_HOST_MODE should be defined"
+#endif
+#endif
+
+#if defined(BSP_USING_USBD)
+/* USB DEVICE FIFO CONFIGURATION */
+#ifdef USB_FS_MODE
+#define RX_FIFO_FS_SIZE (128U)
+#define TX0_FIFO_FS_SIZE (32U)
+#define TX1_FIFO_FS_SIZE (32U)
+#define TX2_FIFO_FS_SIZE (32U)
+#define TX3_FIFO_FS_SIZE (32U)
+#define TX4_FIFO_FS_SIZE (32U)
+#define TX5_FIFO_FS_SIZE (32U)
+
+#if ((RX_FIFO_FS_SIZE + \
+ TX0_FIFO_FS_SIZE + TX1_FIFO_FS_SIZE + TX2_FIFO_FS_SIZE + TX3_FIFO_FS_SIZE + TX4_FIFO_FS_SIZE + \
+ TX5_FIFO_FS_SIZE) > 320U)
+#error "The USB max FIFO size is 320 x 4 Bytes!"
+#endif
+#endif
+
+#if defined(BSP_USING_USBD_VBUS_SENSING)
+#define VBUS_SENSING_ENABLED
+#endif
+#endif
+
+#if defined(BSP_USING_USBH)
+/* USB HOST FIFO CONFIGURATION */
+#ifdef USB_FS_MODE
+#define RX_FIFO_FS_SIZE (128U)
+#define TXH_NP_FS_FIFOSIZ (64U)
+#define TXH_P_FS_FIFOSIZ (128U)
+
+#if ((RX_FIFO_FS_SIZE + TXH_NP_FS_FIFOSIZ + TXH_P_FS_FIFOSIZ) > 320U)
+#error "The USB max FIFO size is 320 x 4 Bytes!"
+#endif
+#endif
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USB_APP_CONF_H__ */
+
+/*******************************************************************************
+ * EOF (not truncated)
+ ******************************************************************************/
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/usb_config/usb_bsp.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/usb_config/usb_bsp.h
new file mode 100644
index 0000000000..76b5b37d81
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/config/usb_config/usb_bsp.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2023-02-14 CDT first version
+ */
+
+#ifndef __USB_BSP_H__
+#define __USB_BSP_H__
+
+/* C binding of definitions if building with C++ compiler */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "hc32_ll_utility.h"
+
+extern void usb_udelay(const uint32_t usec);
+extern void usb_mdelay(const uint32_t msec);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USB_BSP_H__ */
+
+/*******************************************************************************
+ * EOF (not truncated)
+ ******************************************************************************/
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/drv_config.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/drv_config.h
index a73c788129..ab205e1655 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/drv_config.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/drv_config.h
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2006-2022, RT-Thread Development Team
- * Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -19,20 +18,18 @@
extern "C" {
#endif
-/* Suppress warning messages */
-#if defined(__CC_ARM)
-// Suppress warning message: extended constant initialiser used
-#pragma diag_suppress 1296
-#elif defined(__ICCARM__)
-#elif defined(__GNUC__)
-#endif
-
#include "dma_config.h"
#include "uart_config.h"
+#include "spi_config.h"
+#include "adc_config.h"
#include "gpio_config.h"
#include "can_config.h"
-#include "adc_config.h"
-#include "pwm_tmra_config.h"
+#include "sdio_config.h"
+#include "pm_config.h"
+#include "i2c_config.h"
+#include "qspi_config.h"
+#include "pulse_encoder_config.h"
+#include "timer_config.h"
#ifdef __cplusplus
}
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/hc32f4xx_conf.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/hc32f4xx_conf.h
index 99e4acdb5d..33959398ba 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/hc32f4xx_conf.h
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/hc32f4xx_conf.h
@@ -5,10 +5,10 @@
@verbatim
Change Logs:
Date Author Notes
- 2022-04-28 CDT First version
+ 2022-03-31 CDT First version
@endverbatim
*******************************************************************************
- * Copyright (C) 2022, Xiaohua Semiconductor Co., Ltd. All rights reserved.
+ * Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved.
*
* This software component is licensed by XHSC under BSD 3-Clause license
* (the "License"); You may not use this file except in compliance with the
@@ -23,6 +23,7 @@
/*******************************************************************************
* Include files
******************************************************************************/
+#include
/* C binding of definitions if building with C++ compiler */
#ifdef __cplusplus
@@ -58,64 +59,44 @@ extern "C"
#define LL_CLK_ENABLE (DDL_ON)
#define LL_CMP_ENABLE (DDL_ON)
#define LL_CRC_ENABLE (DDL_ON)
-#define LL_CTC_ENABLE (DDL_ON)
-#define LL_DAC_ENABLE (DDL_ON)
+#define LL_DBGC_ENABLE (DDL_OFF)
#define LL_DCU_ENABLE (DDL_ON)
#define LL_DMA_ENABLE (DDL_ON)
-#define LL_DMC_ENABLE (DDL_ON)
-#define LL_DVP_ENABLE (DDL_ON)
#define LL_EFM_ENABLE (DDL_ON)
#define LL_EMB_ENABLE (DDL_ON)
-#define LL_ETH_ENABLE (DDL_ON)
#define LL_EVENT_PORT_ENABLE (DDL_OFF)
#define LL_FCG_ENABLE (DDL_ON)
#define LL_FCM_ENABLE (DDL_ON)
-#define LL_FMAC_ENABLE (DDL_ON)
#define LL_GPIO_ENABLE (DDL_ON)
#define LL_HASH_ENABLE (DDL_ON)
-#define LL_HRPWM_ENABLE (DDL_ON)
#define LL_I2C_ENABLE (DDL_ON)
#define LL_I2S_ENABLE (DDL_ON)
#define LL_INTERRUPTS_ENABLE (DDL_ON)
#define LL_INTERRUPTS_SHARE_ENABLE (DDL_ON)
#define LL_KEYSCAN_ENABLE (DDL_ON)
-#define LL_MAU_ENABLE (DDL_ON)
-#define LL_MDIO_ENABLE (DDL_OFF)
#define LL_MPU_ENABLE (DDL_ON)
-#define LL_NFC_ENABLE (DDL_ON)
#define LL_OTS_ENABLE (DDL_ON)
-#define LL_PLA_ENABLE (DDL_OFF)
#define LL_PWC_ENABLE (DDL_ON)
#define LL_QSPI_ENABLE (DDL_ON)
#define LL_RMU_ENABLE (DDL_ON)
#define LL_RTC_ENABLE (DDL_ON)
#define LL_SDIOC_ENABLE (DDL_ON)
-#define LL_SMC_ENABLE (DDL_ON)
#define LL_SPI_ENABLE (DDL_ON)
#define LL_SRAM_ENABLE (DDL_ON)
#define LL_SWDT_ENABLE (DDL_ON)
#define LL_TMR0_ENABLE (DDL_ON)
-#define LL_TMR2_ENABLE (DDL_ON)
#define LL_TMR4_ENABLE (DDL_ON)
#define LL_TMR6_ENABLE (DDL_ON)
#define LL_TMRA_ENABLE (DDL_ON)
#define LL_TRNG_ENABLE (DDL_ON)
#define LL_USART_ENABLE (DDL_ON)
-#define LL_USB_ENABLE (DDL_OFF)
-#define LL_VREF_ENABLE (DDL_OFF)
+#define LL_USB_ENABLE (DDL_ON)
#define LL_WDT_ENABLE (DDL_ON)
/**
* @brief The following is a list of currently supported BSP boards.
*/
-#define BSP_EV_HC32F4A0_LQFP176 (1U)
-#define BSP_EV_HC32F4A0_LQFP176_MEM (2U)
-#define BSP_EV_HC32F460_LQFP100_V1 (3U)
#define BSP_EV_HC32F460_LQFP100_V2 (4U)
-#define BSP_EV_HC32F451_LQFP100 (5U)
-#define BSP_EV_HC32F452_LQFP100 (6U)
-#define BSP_EV_HC32F472_LQFP100 (7U)
-#define BSP_SK_HC32F4A0_LQFP100 (8U)
/**
* @brief The macro BSP_EV_HC32F4XX is used to specify the BSP board currently
@@ -131,23 +112,9 @@ extern "C"
* Select the components you need to use to DDL_ON.
*/
#define BSP_24CXX_ENABLE (DDL_OFF)
-#define BSP_CY62167EV30LL_ENABLE (DDL_OFF)
-#define BSP_IS42S16400J7TLI_ENABLE (DDL_OFF)
-#define BSP_IS62WV51216_ENABLE (DDL_OFF)
-#define BSP_MT29F2G08AB_ENABLE (DDL_OFF)
-#define BSP_NT35510_ENABLE (DDL_OFF)
-#define BSP_OV5640_ENABLE (DDL_OFF)
-#define BSP_S29GL064N90TFI03_ENABLE (DDL_OFF)
-#define BSP_TCA9539_ENABLE (DDL_OFF)
#define BSP_W25QXX_ENABLE (DDL_OFF)
#define BSP_WM8731_ENABLE (DDL_OFF)
-/**
- * @brief The macro is used to re-define main function in system_device.c(eg. device=hc32f4a0).
- * @note Set value to non-zero if re-define main function.
- */
-#define RE_DEFINE_MAIN (0)
-
/*******************************************************************************
* Global variable definitions ('extern')
******************************************************************************/
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.icf b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.icf
index b7ba20831a..c81adeb474 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.icf
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.icf
@@ -1,21 +1,68 @@
-/*###ICF### Section handled by ICF editor, don't touch! ****/
+/***************************************************************************//**
+ * \file HC32F460.icf
+ * \version 1.0
+ *
+ * \brief Linker file for the IAR compiler.
+ *
+********************************************************************************
+* \copyright
+ * Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved.
+ *
+ * This software component is licensed by XHSC under 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:
+ * opensource.org/licenses/BSD-3-Clause
+*******************************************************************************/
+/*###ICF### Section handled by ICF editor, don't touch! *****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_4.xml" */
+// Check that necessary symbols have been passed to linker via command line interface
+if((!isdefinedsymbol(_LINK_RAM_)) && (!isdefinedsymbol(_LINK_FLASH_))) {
+ error "Link location not defined or not supported!";
+}
+if((!isdefinedsymbol(_HC32F460_512K_)) && (!isdefinedsymbol(_HC32F460_256K_))) {
+ error "Mcu type or size not defined or not supported!";
+}
+
+/*******************************************************************************
+ * Memory address and size definitions
+ ******************************************************************************/
+define symbol ram1_base_address = 0x1FFF8000;
+define symbol ram1_end_address = 0x20026FFF;
+
+if(isdefinedsymbol(_LINK_RAM_)) {
+ define symbol ram_start_reserve = 0x8000;
+ define symbol rom1_base_address = ram1_base_address;
+ define symbol rom1_end_address = rom1_base_address + ram_start_reserve - 0x01;
+ define symbol rom2_base_address = 0x0;
+ define symbol rom2_end_address = 0x0;
+} else {
+ define symbol ram_start_reserve = 0x0;
+ define symbol rom1_base_address = 0x0;
+ define symbol rom2_base_address = 0x03000C00;
+ define symbol rom2_end_address = 0x03000FBF;
+ if (isdefinedsymbol(_HC32F460_512K_)) {
+ define symbol rom1_end_address = 0x0007FFFF;
+ } else if (isdefinedsymbol(_HC32F460_256K_)) {
+ define symbol rom1_end_address = 0x0003FFFF;
+ }
+}
+
/*-Specials-*/
-define symbol __ICFEDIT_intvec_start__ = 0x00000000;
+define symbol __ICFEDIT_intvec_start__ = rom1_base_address;
/*-Memory Regions-*/
-define symbol __ICFEDIT_region_IROM1_start__ = 0x00000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x0007FFFF;
-define symbol __ICFEDIT_region_IROM2_start__ = 0x03000C00;
-define symbol __ICFEDIT_region_IROM2_end__ = 0x03000FFB;
+define symbol __ICFEDIT_region_IROM1_start__ = rom1_base_address;
+define symbol __ICFEDIT_region_IROM1_end__ = rom1_end_address;
+define symbol __ICFEDIT_region_IROM2_start__ = rom2_base_address;
+define symbol __ICFEDIT_region_IROM2_end__ = rom2_end_address;
define symbol __ICFEDIT_region_EROM1_start__ = 0x0;
define symbol __ICFEDIT_region_EROM1_end__ = 0x0;
define symbol __ICFEDIT_region_EROM2_start__ = 0x0;
define symbol __ICFEDIT_region_EROM2_end__ = 0x0;
define symbol __ICFEDIT_region_EROM3_start__ = 0x0;
define symbol __ICFEDIT_region_EROM3_end__ = 0x0;
-define symbol __ICFEDIT_region_IRAM1_start__ = 0x1FFF8000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x20026FFF;
+define symbol __ICFEDIT_region_IRAM1_start__ = ram1_base_address + ram_start_reserve;
+define symbol __ICFEDIT_region_IRAM1_end__ = ram1_end_address;
define symbol __ICFEDIT_region_IRAM2_start__ = 0x200F0000;
define symbol __ICFEDIT_region_IRAM2_end__ = 0x200F0FFF;
define symbol __ICFEDIT_region_ERAM1_start__ = 0x0;
@@ -25,16 +72,18 @@ define symbol __ICFEDIT_region_ERAM2_end__ = 0x0;
define symbol __ICFEDIT_region_ERAM3_start__ = 0x0;
define symbol __ICFEDIT_region_ERAM3_end__ = 0x0;
-
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0xC00;
define symbol __ICFEDIT_size_proc_stack__ = 0x0;
define symbol __ICFEDIT_size_heap__ = 0x400;
/**** End of ICF editor section. ###ICF###*/
+/*******************************************************************************
+ * Memory definitions
+ ******************************************************************************/
define memory mem with size = 4G;
-define region ROM_region = mem:[from __ICFEDIT_region_IROM1_start__ to __ICFEDIT_region_IROM1_end__]
- | mem:[from __ICFEDIT_region_IROM2_start__ to __ICFEDIT_region_IROM2_end__];
+define region ROM_region = mem:[from __ICFEDIT_region_IROM1_start__ to __ICFEDIT_region_IROM1_end__];
+define region OTP_region = mem:[from __ICFEDIT_region_IROM2_start__ to __ICFEDIT_region_IROM2_end__];
define region RAM_region = mem:[from __ICFEDIT_region_IRAM1_start__ to __ICFEDIT_region_IRAM1_end__]
| mem:[from __ICFEDIT_region_IRAM2_start__ to __ICFEDIT_region_IRAM2_end__];
@@ -47,5 +96,6 @@ do not initialize { section .noinit };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM_region { readonly };
+place in OTP_region { readonly section .otp_data };
place in RAM_region { readwrite,
block CSTACK, block HEAP };
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.ld b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.ld
index d65fd6b5f2..fd7390f12c 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.ld
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.ld
@@ -1,5 +1,5 @@
/******************************************************************************
- * Copyright (C) 2022, Xiaohua Semiconductor Co., Ltd. All rights reserved.
+ * Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved.
*
* This software component is licensed by XHSC under BSD 3-Clause license
* (the "License"); You may not use this file except in compliance with the
@@ -11,8 +11,8 @@
/* File HC32F460xE.ld */
/* Abstract Linker script for HC32F460 Device with */
/* 512KByte FLASH, 192KByte RAM */
-/* Version V1.0 */
-/* Date 2022-04-28 */
+/* Version V1.0 */
+/* Date 2022-03-31 */
/*****************************************************************************/
/* Custom defines, according to section 7.7 of the user manual.
@@ -163,42 +163,6 @@ SECTIONS
__data_end__ = .;
} >RAM
- __etext_ret_ram = __etext + ALIGN (SIZEOF(.data), 4);
- .ret_ram_data : AT (__etext_ret_ram)
- {
- . = ALIGN(4);
- __data_start_ret_ram__ = .;
- *(.ret_ram_data)
- *(.ret_ram_data*)
- . = ALIGN(4);
- __data_end_ret_ram__ = .;
- } >RET_RAM
-
- __bss_start = .;
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- __bss_start__ = _sbss;
- *(.bss)
- *(.bss*)
- *(COMMON)
- . = ALIGN(4);
- _ebss = .;
- __bss_end__ = _ebss;
- } >RAM
- __bss_end = .;
-
- .ret_ram_bss :
- {
- . = ALIGN(4);
- __bss_start_ret_ram__ = .;
- *(.ret_ram_bss)
- *(.ret_ram_bss*)
- . = ALIGN(4);
- __bss_end_ret_ram__ = .;
- } >RET_RAM
-
.heap_stack (COPY) :
{
. = ALIGN(8);
@@ -215,6 +179,45 @@ SECTIONS
__StackTop = .;
} >RAM
+ __etext_ret_ram = __etext + ALIGN (SIZEOF(.data), 4);
+ .ramb_data : AT (__etext_ret_ram)
+ {
+ . = ALIGN(4);
+ __data_start_ret_ram__ = .;
+ *(.ramb_data)
+ *(.ramb_data*)
+ . = ALIGN(4);
+ __data_end_ret_ram__ = .;
+ } >RET_RAM
+
+ __bss_start = .;
+ .bss __StackTop (NOLOAD):
+ {
+ . = ALIGN(4);
+ _sbss = .;
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ _ebss = .;
+ __bss_end__ = _ebss;
+ . = ALIGN(4);
+ *(.noinit*)
+ . = ALIGN(4);
+ } >RAM
+ __bss_end = .;
+
+ .ramb_bss :
+ {
+ . = ALIGN(4);
+ __bss_start_ret_ram__ = .;
+ *(.ramb_bss)
+ *(.ramb_bss*)
+ . = ALIGN(4);
+ __bss_end_ret_ram__ = .;
+ } >RET_RAM
+
/DISCARD/ :
{
libc.a (*)
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.sct b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.sct
index 61160eee1b..520af2165f 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.sct
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/linker_scripts/link.sct
@@ -8,7 +8,14 @@ LR_IROM1 0x00000000 0x00080000 { ; load region size_region
.ANY (+RO)
.ANY (+XO)
}
- RW_IRAM1 0x1FFF8000 0x0002F000 { ; RW data
+ RW_IRAM1 0x1FFF8000 UNINIT 0x00000008 { ; RW data
+ *(.bss.noinit)
+ }
+ RW_IRAM2 0x1FFF8008 0x0002EFF8 { ; RW data
+ .ANY (+RW +ZI)
+ .ANY (RAMCODE)
+ }
+ RW_IRAMB 0x200F0000 0x00001000 { ; RW data
.ANY (+RW +ZI)
}
}
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/SConscript b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/SConscript
new file mode 100644
index 0000000000..3c57bc9c6d
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/SConscript
@@ -0,0 +1,12 @@
+import os
+from building import *
+
+objs = []
+cwd = GetCurrentDir()
+
+list = os.listdir(cwd)
+for item in list:
+ if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
+ objs = objs + SConscript(os.path.join(item, 'SConscript'))
+
+Return('objs')
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/drv_spi_flash.c b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/drv_spi_flash.c
new file mode 100644
index 0000000000..cf6d37026b
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/drv_spi_flash.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2022-04-28 CDT first version
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef BSP_USING_SPI_FLASH
+
+#include "spi_flash.h"
+#ifdef RT_USING_SFUD
+ #include "spi_flash_sfud.h"
+#endif
+
+#define SPI_BUS_NAME "spi3"
+#define SPI_FLASH_DEVICE_NAME "spi30"
+#define SPI_FLASH_CHIP "w25q64"
+#define SPI_FLASH_SS_PORT GPIO_PORT_C
+#define SPI_FLASH_SS_PIN GPIO_PIN_07
+/* Partition Name */
+#define FS_PARTITION_NAME "filesystem"
+
+#ifdef RT_USING_SFUD
+static void rt_hw_spi_flash_reset(char *spi_dev_name)
+{
+ struct rt_spi_device *spi_dev_w25;
+ rt_uint8_t w25_en_reset = 0x66;
+ rt_uint8_t w25_reset_dev = 0x99;
+
+ spi_dev_w25 = (struct rt_spi_device *)rt_device_find(spi_dev_name);
+ if (!spi_dev_w25)
+ {
+ rt_kprintf("Can't find %s device!\n", spi_dev_name);
+ }
+ else
+ {
+ rt_spi_send(spi_dev_w25, &w25_en_reset, 1U);
+ rt_spi_send(spi_dev_w25, &w25_reset_dev, 1U);
+ DDL_DelayMS(1U);
+ rt_kprintf("Reset ext flash!\n");
+ }
+}
+
+static int rt_hw_spi_flash_with_sfud_init(void)
+{
+ rt_hw_spi_device_attach(SPI_BUS_NAME, SPI_FLASH_DEVICE_NAME, SPI_FLASH_SS_PORT, SPI_FLASH_SS_PIN);
+
+ if (RT_NULL == rt_sfud_flash_probe(SPI_FLASH_CHIP, SPI_FLASH_DEVICE_NAME))
+ {
+ rt_hw_spi_flash_reset(SPI_FLASH_DEVICE_NAME);
+ if (RT_NULL == rt_sfud_flash_probe(SPI_FLASH_CHIP, SPI_FLASH_DEVICE_NAME))
+ {
+ return -RT_ERROR;
+ }
+ }
+
+ return RT_EOK;
+}
+INIT_COMPONENT_EXPORT(rt_hw_spi_flash_with_sfud_init);
+
+static int rt_hw_fs_init(void)
+{
+ struct rt_device *mtd_dev = RT_NULL;
+
+ /* 初始化 fal */
+ fal_init();
+ /* 生成 mtd 设备 */
+ mtd_dev = fal_mtd_nor_device_create(FS_PARTITION_NAME);
+ if (!mtd_dev)
+ {
+ LOG_E("Can't create a mtd device on '%s' partition.", FS_PARTITION_NAME);
+ return -RT_ERROR;
+ }
+ else
+ {
+ /* 挂载 littlefs */
+ if (RT_EOK == dfs_mount(FS_PARTITION_NAME, "/", "lfs", 0, 0))
+ {
+ LOG_I("Filesystem initialized!");
+ return RT_EOK;
+ }
+ else
+ {
+ /* 格式化文件系统 */
+ if (RT_EOK == dfs_mkfs("lfs", FS_PARTITION_NAME))
+ {
+ /* 挂载 littlefs */
+ if (RT_EOK == dfs_mount(FS_PARTITION_NAME, "/", "lfs", 0, 0))
+ {
+ LOG_I("Filesystem initialized!");
+ return RT_EOK;
+ }
+ else
+ {
+ LOG_E("Failed to initialize filesystem!");
+ return -RT_ERROR;
+ }
+ }
+ else
+ {
+ LOG_E("Failed to Format fs!");
+ return -RT_ERROR;
+ }
+ }
+ }
+}
+INIT_APP_EXPORT(rt_hw_fs_init);
+
+#endif /* RT_USING_SFUD */
+
+#endif /* BSP_USING_SPI_FLASH */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/SConscript b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/SConscript
new file mode 100644
index 0000000000..cee47c2d7e
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/SConscript
@@ -0,0 +1,20 @@
+
+from building import *
+import rtconfig
+
+cwd = GetCurrentDir()
+
+src = []
+
+src += Glob('*.c')
+CPPPATH = [cwd]
+LOCAL_CFLAGS = ''
+
+if rtconfig.PLATFORM in ['gcc', 'armclang']:
+ LOCAL_CFLAGS += ' -std=c99'
+elif rtconfig.PLATFORM in ['armcc']:
+ LOCAL_CFLAGS += ' --c99'
+
+group = DefineGroup('FAL', src, depend = ['RT_USING_FAL'], CPPPATH = CPPPATH, LOCAL_CFLAGS = LOCAL_CFLAGS)
+
+Return('group')
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/fal_cfg.h b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/fal_cfg.h
new file mode 100644
index 0000000000..87b74d5694
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/fal_cfg.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2022-04-28 CDT first version
+ */
+
+#ifndef _FAL_CFG_H_
+#define _FAL_CFG_H_
+
+#include
+#include
+
+/* enable hc32f4 onchip flash driver sample */
+#define FAL_FLASH_PORT_DRIVER_HC32F4
+/* enable SFUD flash driver sample */
+#define FAL_FLASH_PORT_DRIVER_SFUD
+
+extern const struct fal_flash_dev hc32_onchip_flash;
+extern struct fal_flash_dev ext_nor_flash0;
+
+/* flash device table */
+#define FAL_FLASH_DEV_TABLE \
+{ \
+ &hc32_onchip_flash, \
+ &ext_nor_flash0, \
+}
+
+/* ====================== Partition Configuration ========================== */
+#ifdef FAL_PART_HAS_TABLE_CFG
+/* partition table */
+#define FAL_PART_TABLE \
+{ \
+ {FAL_PART_MAGIC_WROD, "app", "onchip_flash", 0, 512 * 1024, 0}, \
+ {FAL_PART_MAGIC_WROD, "filesystem", "w25q64", 0, 8 * 1024 * 1024, 0}, \
+}
+#endif /* FAL_PART_HAS_TABLE_CFG */
+
+#endif /* _FAL_CFG_H_ */
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/fal_flash_sfud_port.c b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/fal_flash_sfud_port.c
new file mode 100644
index 0000000000..b52d72de00
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/board/ports/fal/fal_flash_sfud_port.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2022-04-28 CDT first version
+ */
+
+#include
+
+#include
+#ifdef RT_USING_SFUD
+ #include
+#endif
+
+#ifndef FAL_USING_NOR_FLASH_DEV_NAME
+ #define FAL_USING_NOR_FLASH_DEV_NAME "w25q64"
+#endif
+
+static int init(void);
+static int read(long offset, uint8_t *buf, size_t size);
+static int write(long offset, const uint8_t *buf, size_t size);
+static int erase(long offset, size_t size);
+
+static sfud_flash_t sfud_dev = NULL;
+struct fal_flash_dev ext_nor_flash0 =
+{
+ .name = FAL_USING_NOR_FLASH_DEV_NAME,
+ .addr = 0,
+ .len = 8 * 1024 * 1024,
+ .blk_size = 4096,
+ .ops = {init, read, write, erase},
+ .write_gran = 1
+};
+
+static int init(void)
+{
+ /* RT-Thread RTOS platform */
+ sfud_dev = rt_sfud_flash_find_by_dev_name(FAL_USING_NOR_FLASH_DEV_NAME);
+ if (NULL == sfud_dev)
+ {
+ return -1;
+ }
+ /* update the flash chip information */
+ ext_nor_flash0.blk_size = sfud_dev->chip.erase_gran;
+ ext_nor_flash0.len = sfud_dev->chip.capacity;
+
+ return 0;
+}
+
+static int read(long offset, uint8_t *buf, size_t size)
+{
+ assert(sfud_dev);
+ assert(sfud_dev->init_ok);
+ sfud_read(sfud_dev, ext_nor_flash0.addr + offset, size, buf);
+
+ return size;
+}
+
+static int write(long offset, const uint8_t *buf, size_t size)
+{
+ assert(sfud_dev);
+ assert(sfud_dev->init_ok);
+ if (sfud_write(sfud_dev, ext_nor_flash0.addr + offset, size, buf) != SFUD_SUCCESS)
+ {
+ return -1;
+ }
+
+ return size;
+}
+
+static int erase(long offset, size_t size)
+{
+ assert(sfud_dev);
+ assert(sfud_dev->init_ok);
+ if (sfud_erase(sfud_dev, ext_nor_flash0.addr + offset, size) != SFUD_SUCCESS)
+ {
+ return -1;
+ }
+
+ return size;
+}
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/figures/board.jpg b/bsp/hc32/ev_hc32f460_lqfp100_v2/figures/board.jpg
index 3a012313dd..124820d25e 100644
Binary files a/bsp/hc32/ev_hc32f460_lqfp100_v2/figures/board.jpg and b/bsp/hc32/ev_hc32f460_lqfp100_v2/figures/board.jpg differ
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/jlink/ev_hc32f460_lqfp100_v2 Debug.launch b/bsp/hc32/ev_hc32f460_lqfp100_v2/jlink/ev_hc32f460_lqfp100_v2 Debug.launch
new file mode 100644
index 0000000000..61c1a349b1
--- /dev/null
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/jlink/ev_hc32f460_lqfp100_v2 Debug.launch
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bsp/hc32/ev_hc32f460_lqfp100_v2/project.ewd b/bsp/hc32/ev_hc32f460_lqfp100_v2/project.ewd
index 5f58df5569..8cf712a8d7 100644
--- a/bsp/hc32/ev_hc32f460_lqfp100_v2/project.ewd
+++ b/bsp/hc32/ev_hc32f460_lqfp100_v2/project.ewd
@@ -11,7 +11,7 @@
C-SPY
2
- 31
+ 32
1
0
+
@@ -1003,7 +1007,7 @@
STLINK_ID
2
- 6
+ 7
1
0
@@ -1375,7 +1379,7 @@