[BSP] xmc7100外设适配和RTDuino适配
ToolsCI / Tools (push) Has been cancelled
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled

This commit is contained in:
hydevcode
2025-10-16 20:03:44 +08:00
committed by R b b666
parent 982e52e200
commit 16e729e147
16 changed files with 460 additions and 48 deletions
+45 -3
View File
@@ -18,6 +18,8 @@
#if defined(SOC_XMC7200D_E272K8384AA)
#define __IFX_PORT_MAX 35u
#elif defined(SOC_XMC7100D_F144K4160AA)
#define __IFX_PORT_MAX 33u
#else
#define __IFX_PORT_MAX 14u
#endif
@@ -57,7 +59,8 @@ static struct pin_irq_map pin_irq_map[] =
{CYHAL_PORT_19, ioss_interrupts_gpio_19_IRQn},
{CYHAL_PORT_20, ioss_interrupts_gpio_20_IRQn},
{CYHAL_PORT_21, ioss_interrupts_gpio_21_IRQn},
{CYHAL_PORT_22, ioss_interrupts_gpio_23_IRQn},
{CYHAL_PORT_22, ioss_interrupts_gpio_22_IRQn},
{CYHAL_PORT_23, ioss_interrupts_gpio_23_IRQn},
{CYHAL_PORT_24, ioss_interrupts_gpio_24_IRQn},
{CYHAL_PORT_25, ioss_interrupts_gpio_25_IRQn},
{CYHAL_PORT_26, ioss_interrupts_gpio_26_IRQn},
@@ -70,6 +73,26 @@ static struct pin_irq_map pin_irq_map[] =
{CYHAL_PORT_33, ioss_interrupts_gpio_33_IRQn},
{CYHAL_PORT_34, ioss_interrupts_gpio_34_IRQn},
#endif
#if defined(SOC_XMC7100D_F144K4160AA)
{CYHAL_PORT_15, ioss_interrupts_gpio_15_IRQn},
{CYHAL_PORT_16, ioss_interrupts_gpio_16_IRQn},
{CYHAL_PORT_17, ioss_interrupts_gpio_17_IRQn},
{CYHAL_PORT_18, ioss_interrupts_gpio_18_IRQn},
{CYHAL_PORT_19, ioss_interrupts_gpio_19_IRQn},
{CYHAL_PORT_20, ioss_interrupts_gpio_20_IRQn},
{CYHAL_PORT_21, ioss_interrupts_gpio_21_IRQn},
{CYHAL_PORT_22, ioss_interrupts_gpio_22_IRQn},
{CYHAL_PORT_23, ioss_interrupts_gpio_23_IRQn},
{CYHAL_PORT_24, ioss_interrupts_gpio_24_IRQn},
{CYHAL_PORT_25, ioss_interrupts_gpio_25_IRQn},
{CYHAL_PORT_26, ioss_interrupts_gpio_26_IRQn},
{CYHAL_PORT_27, ioss_interrupts_gpio_27_IRQn},
{CYHAL_PORT_28, ioss_interrupts_gpio_28_IRQn},
{CYHAL_PORT_29, ioss_interrupts_gpio_29_IRQn},
{CYHAL_PORT_30, ioss_interrupts_gpio_30_IRQn},
{CYHAL_PORT_31, ioss_interrupts_gpio_31_IRQn},
{CYHAL_PORT_32, ioss_interrupts_gpio_32_IRQn},
#endif
};
static struct rt_pin_irq_hdr pin_irq_handler_tab[] =
@@ -111,6 +134,25 @@ static struct rt_pin_irq_hdr pin_irq_handler_tab[] =
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
#endif
#if defined(SOC_XMC7100D_F144K4160AA)
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
{-1, 0, RT_NULL, RT_NULL},
#endif
};
rt_inline void pin_irq_handler(int irqno)
@@ -320,7 +362,7 @@ static rt_err_t ifx_pin_irq_enable(struct rt_device *device, rt_base_t pin,
irqmap = &pin_irq_map[gpio_port];
#if !defined(COMPONENT_CAT1C)
#if !defined(COMPONENT_CAT1C)||defined(SOC_XMC7100D_F144K4160AA)
IRQn_Type irqn = irqmap->irqno;
irq_cb_data[irqn].callback = irq_callback;
irq_cb_data[irqn].callback_arg = (rt_uint16_t *)&pin_irq_map[gpio_port].port;
@@ -356,7 +398,7 @@ static rt_err_t ifx_pin_irq_enable(struct rt_device *device, rt_base_t pin,
irqmap = &pin_irq_map[gpio_port];
#if !defined(COMPONENT_CAT1C)
#if !defined(COMPONENT_CAT1C)||defined(SOC_XMC7100D_F144K4160AA)
IRQn_Type irqn = irqmap->irqno;
if (irqn < 0 || irqn >= PIN_IFXPORT_MAX)
{
@@ -39,6 +39,14 @@
static struct ifx_spi_handle spi_bus_obj[] =
{
#if defined(BSP_USING_SPI0)
#if defined(SOC_XMC7100D_F144K4160AA)
{
.bus_name = "spi0",
.sck_pin = GET_PIN(0, 2),
.miso_pin = GET_PIN(1, 0),
.mosi_pin = GET_PIN(1, 1),
},
#else
{
.bus_name = "spi0",
.sck_pin = GET_PIN(0, 4),
@@ -46,6 +54,7 @@ static struct ifx_spi_handle spi_bus_obj[] =
.mosi_pin = GET_PIN(0, 2),
},
#endif
#endif
#if defined(BSP_USING_SPI3)
{
.bus_name = "spi3",
@@ -7,10 +7,26 @@ Drivers.I2C:
kconfig:
- CONFIG_BSP_USING_I2C=y
- CONFIG_BSP_USING_HW_I2C1=y
- CONFIG_BSP_USING_HW_I2C2=y
Drivers.SPI:
<<: *scons
kconfig:
- CONFIG_BSP_USING_SPI=y
- CONFIG_BSP_USING_SPI5=y
- CONFIG_BSP_USING_SPI0=y
# ------ Peripheral CI ------
Peripheral.tfcard:
kconfig:
- CONFIG_BSP_USING_TF_CARD=y
Peripheral.qmi8658:
kconfig:
- CONFIG_BSP_USING_QMI8658=y
- CONFIG_BSP_USING_QMI8658=y
Peripheral.rw007:
kconfig:
- CONFIG_BSP_USING_RW007=y
- CONFIG_RW007_NOT_USE_EXAMPLE_DRIVERS=y
Peripheral.arduino:
kconfig:
- CONFIG_BSP_USING_ARDUINO=y
- CONFIG_BSP_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD=y
+48 -9
View File
@@ -104,11 +104,9 @@
#
# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set
# end of rt_strnlen options
# CONFIG_RT_UTEST_TC_USING_KLIBC is not set
# end of klibc options
CONFIG_RT_NAME_MAX=8
CONFIG_RT_NAME_MAX=15
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
# CONFIG_RT_USING_NANO is not set
# CONFIG_RT_USING_SMART is not set
@@ -211,6 +209,8 @@ CONFIG_FINSH_THREAD_PRIORITY=20
CONFIG_FINSH_THREAD_STACK_SIZE=4096
CONFIG_FINSH_USING_HISTORY=y
CONFIG_FINSH_HISTORY_LINES=5
# CONFIG_FINSH_USING_WORD_OPERATION is not set
# CONFIG_FINSH_USING_FUNC_EXT is not set
CONFIG_FINSH_USING_SYMTAB=y
CONFIG_FINSH_CMD_SIZE=80
CONFIG_MSH_USING_BUILT_IN_COMMANDS=y
@@ -235,16 +235,22 @@ CONFIG_FINSH_USING_OPTION_COMPLETION=y
# CONFIG_RT_USING_DEV_BUS is not set
CONFIG_RT_USING_DEVICE_IPC=y
CONFIG_RT_UNAMED_PIPE_NUMBER=64
# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
CONFIG_RT_USING_SYSTEM_WORKQUEUE=y
CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048
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_RB_BUFSZ=64
CONFIG_RT_SERIAL_RB_BUFSZ=256
# CONFIG_RT_USING_SERIAL_BYPASS is not set
# CONFIG_RT_USING_CAN is not set
# CONFIG_RT_USING_CPUTIME is not set
# CONFIG_RT_USING_I2C is not set
CONFIG_RT_USING_I2C=y
# CONFIG_RT_I2C_DEBUG is not set
CONFIG_RT_USING_I2C_BITOPS=y
# CONFIG_RT_I2C_BITOPS_DEBUG is not set
# CONFIG_RT_USING_SOFT_I2C is not set
# CONFIG_RT_USING_PHY is not set
# CONFIG_RT_USING_PHY_V2 is not set
# CONFIG_RT_USING_ADC is not set
@@ -252,7 +258,7 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
# CONFIG_RT_USING_NULL is not set
# CONFIG_RT_USING_ZERO is not set
# CONFIG_RT_USING_RANDOM is not set
# CONFIG_RT_USING_PWM is not set
CONFIG_RT_USING_PWM=y
# CONFIG_RT_USING_PULSE_ENCODER is not set
# CONFIG_RT_USING_INPUT_CAPTURE is not set
# CONFIG_RT_USING_MTD_NOR is not set
@@ -260,7 +266,13 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
# CONFIG_RT_USING_PM is not set
# CONFIG_RT_USING_RTC is not set
# CONFIG_RT_USING_SDIO is not set
# CONFIG_RT_USING_SPI is not set
CONFIG_RT_USING_SPI=y
# CONFIG_RT_USING_SOFT_SPI is not set
# CONFIG_RT_USING_QSPI is not set
# CONFIG_RT_USING_SPI_MSD is not set
# CONFIG_RT_USING_SFUD is not set
# CONFIG_RT_USING_ENC28J60 is not set
# CONFIG_RT_USING_SPI_WIFI is not set
# CONFIG_RT_USING_WDT is not set
# CONFIG_RT_USING_AUDIO is not set
# CONFIG_RT_USING_SENSOR is not set
@@ -387,6 +399,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_FREEMODBUS is not set
# CONFIG_PKG_USING_NANOPB is not set
# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set
# CONFIG_PKG_USING_ESP_HOSTED is not set
#
# Wi-Fi
@@ -494,6 +507,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_QMODBUS is not set
# CONFIG_PKG_USING_PNET is not set
# CONFIG_PKG_USING_OPENER is not set
# CONFIG_PKG_USING_FREEMQTT is not set
# end of IoT - internet of things
#
@@ -630,6 +644,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_ZDEBUG is not set
# CONFIG_PKG_USING_RVBACKTRACE is not set
# CONFIG_PKG_USING_HPATCHLITE is not set
# CONFIG_PKG_USING_THREAD_METRIC is not set
# end of tools packages
#
@@ -723,6 +738,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
# CONFIG_PKG_USING_RMP is not set
# CONFIG_PKG_USING_R_RHEALSTONE is not set
# CONFIG_PKG_USING_HEARTBEAT is not set
# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set
# end of system packages
#
@@ -822,6 +838,7 @@ CONFIG_PKG_INFINEON_RETARGET_IO_VER="latest"
# CONFIG_PKG_USING_NRF5X_SDK is not set
# CONFIG_PKG_USING_NRFX is not set
# CONFIG_PKG_USING_RASPBERRYPI_PICO_RP2350_SDK is not set
# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set
# CONFIG_PKG_USING_MM32 is not set
@@ -864,6 +881,10 @@ CONFIG_PKG_INFINEON_RETARGET_IO_VER="latest"
#
# HC32 DDL Drivers
#
# CONFIG_PKG_USING_HC32F3_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_HC32F3_SERIES_DRIVER is not set
# CONFIG_PKG_USING_HC32F4_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_HC32F4_SERIES_DRIVER is not set
# end of HC32 DDL Drivers
#
@@ -877,6 +898,21 @@ CONFIG_PKG_INFINEON_RETARGET_IO_VER="latest"
# CONFIG_PKG_USING_NXP_IMX6UL_DRIVER is not set
# CONFIG_PKG_USING_NXP_IMXRT_DRIVER is not set
# end of NXP HAL & SDK Drivers
#
# NUVOTON Drivers
#
# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set
# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set
# end of NUVOTON Drivers
#
# GD32 Drivers
#
# CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER is not set
# end of GD32 Drivers
# end of HAL & SDK Drivers
#
@@ -1048,6 +1084,7 @@ CONFIG_PKG_INFINEON_RETARGET_IO_VER="latest"
# CONFIG_PKG_USING_SEAN_WS2812B is not set
# CONFIG_PKG_USING_IC74HC165 is not set
# CONFIG_PKG_USING_IST8310 is not set
# CONFIG_PKG_USING_ST7789_SPI is not set
# CONFIG_PKG_USING_SPI_TOOLS is not set
# end of peripheral libraries and drivers
@@ -1402,6 +1439,8 @@ CONFIG_SOC_XMC7100D_F144K4160AA=y
CONFIG_BSP_USING_USB_TO_USART=y
# CONFIG_BSP_USING_TF_CARD is not set
# CONFIG_BSP_USING_QMI8658 is not set
# CONFIG_BSP_USING_ARDUINO is not set
# CONFIG_BSP_USING_RW007 is not set
# end of Onboard Peripheral Drivers
#
@@ -1409,7 +1448,7 @@ CONFIG_BSP_USING_USB_TO_USART=y
#
CONFIG_BSP_USING_GPIO=y
CONFIG_BSP_USING_UART=y
CONFIG_BSP_USING_UART2=y
# CONFIG_BSP_USING_UART2 is not set
CONFIG_BSP_USING_UART4=y
CONFIG_UART_CPU_IRQ_Number=3
# CONFIG_BSP_USING_I2C is not set
+4 -32
View File
@@ -21,8 +21,8 @@
| USB 转串口 | 支持 | UART4 |
| GPIO | 支持 | — |
| UART | 支持 | UART2,UART4 |
| I2C | 支持 | I2C1 |
| I2C | 支持 | I2C1,I2C2 |
| SPI | 支持 | SPI0,SPI5 |
## 快速上手
本 BSP 是以 `GCC``Jlink` 为开发环境(编译器:GCC),接下来介绍如何将系统运行起来。
@@ -59,7 +59,6 @@ Vscode下载拓展Cortex-Debug,然后在.vscode下新建launch.json文件,并
"interface": "swd",
"serialNumber": "",
"preLaunchCommands": [
// Program via the hex file to get complete coverage
"exec-file rt-thread.hex"
],
"overrideRestartCommands": [
@@ -68,34 +67,7 @@ Vscode下载拓展Cortex-Debug,然后在.vscode下新建launch.json文件,并
// svdFile is optional, it can be very large.
"svdFile": "${workspaceRoot}/libs/cat1c4m.svd",
"breakAfterReset": true,
"runToEntryPoint": "main", // Specifies application entry point name where program will halt
"showDevDebugOutput": "none",
"presentation": {
"hidden": false,
"group": "CM7"
},
"serverpath": "C:/Program Files/SEGGER/JLink_V820/JLinkGDBServerCL.exe"
},
// When using 'attach', make sure your program is running on the board and that your
// executable matches the image in the chip exactly, or else strange things can happen
// with breakpoints, variables, etc.
{
"name": "Attach XMC7100D CM7 (JLink)",
"type": "cortex-debug",
"request": "attach",
"cwd": "${workspaceFolder}",
"executable": "${workspaceRoot}/rt-thread.elf",
"servertype": "jlink",
"device": "XMC7100-4160_CM7_0_tm",
"interface": "swd",
"serialNumber": "",
"overrideRestartCommands": [
"starti"
],
// svdFile is optional, it can be very large.
"svdFile": "${workspaceRoot}/libs/cat1c4m.svd",
"breakAfterReset": true,
"runToEntryPoint": "main", // Specifies application entry point name for restart/reset
"runToEntryPoint": "main",
"showDevDebugOutput": "none",
"presentation": {
"hidden": false,
@@ -112,7 +84,7 @@ Vscode下载拓展Cortex-Debug,然后在.vscode下新建launch.json文件,并
## 运行结果
下载程序成功之后,点击全速运行。然后打开终端工具串口助手,选择波特率为 115200。复位设备后,LED 将会闪烁,而且在终端上可以看到 `RT-Thread` 的输出信息
下载程序成功之后,点击全速运行。可通过 Type-C 接口 将开发板连接至电脑。随后,打开任意串口调试软件,在串口列表中选择设备名为 USB-HiSpeed-SERIAL-B 的端口,并将波特率设置为 115200。完成配置后,按下开发板上的 复位按键,即可在串口终端中实时看到 RT-Thread 系统的启动与运行日志信息
注:推荐使用串口调试助手如:`MobaXterm`
@@ -6,6 +6,9 @@ cwd = GetCurrentDir()
path = [cwd]
src = Glob('*.c')
if GetDepend(['PKG_USING_RTDUINO']) and not GetDepend(['RTDUINO_NO_SETUP_LOOP']):
src += ['arduino_main.cpp']
group = DefineGroup('Applications', src, depend = [''], CPPPATH = path)
list = os.listdir(cwd)
@@ -0,0 +1,24 @@
/*
* Copyright (c) 2006-2024, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-10-16 Hydevcode first version
*/
#include <Arduino.h>
void setup(void)
{
/* put your setup code here, to run once: */
Serial.begin();
}
void loop(void)
{
/* put your main code here, to run repeatedly: */
Serial.println("Hello Arduino!");
delay(800);
}
@@ -0,0 +1,37 @@
# xmc7100d-f144k4160aa 开发板的Arduino生态兼容说明
## 1 RTduino - RT-Thread的Arduino生态兼容层
xmc7100d-f144k4160aa 开发板已经完整适配了[RTduino软件包](https://github.com/RTduino/RTduino),即RT-Thread的Arduino生态兼容层。用户可以按照Arduino的编程习惯来操作该BSP,并且可以使用大量Arduino社区丰富的库,是对RT-Thread生态的极大增强。更多信息,请参见[RTduino软件包说明文档](https://github.com/RTduino/RTduino)。
### 1.1 如何开启针对本BSP的Arduino生态兼容层
Env 工具下敲入 menuconfig 命令,或者 RT-Thread Studio IDE 下选择 RT-Thread Settings
```Kconfig
Hardware Drivers Config --->
Onboard Peripheral Drivers --->
[*] Compatible with Arduino Ecosystem (RTduino)
```
## 2 Arduino引脚排布
更多引脚布局相关信息参见 [pins_arduino.c](pins_arduino.c) 和 [pins_arduino.h](pins_arduino.h)。
| Arduino引脚编号 | XMC7100引脚编号 | 5V容忍 | 备注 |
| ------------------- | --------- | ---- | ------------------------------------------------------------------------- |
| 0 (D0) | BSP_IO_PORT_19_PIN_00 | 否 | Serial2-RX,默认被RT-Thread的UART设备框架uart2接管 |
| 1 (D1) | BSP_IO_PORT_19_PIN_01 | 否 | Serial2-TX,默认被RT-Thread的UART设备框架uart2接管 |
| 2 (D2) | BSP_IO_PORT_00_PIN_03 | 否 | SPI0-CS |
| 3 (D3) | BSP_IO_PORT_01_PIN_01 | 否 | SPI0-MOSI,默认被RT-Thread的SPI设备框架spi0接管 |
| 4 (D4) | BSP_IO_PORT_01_PIN_00 | 否 | SPI0-MISO,默认被RT-Thread的SPI设备框架spi0接管 |
| 5 (D5) | BSP_IO_PORT_00_PIN_02 | 否 | SPI0-SCK,默认被RT-Thread的SPI设备框架spi0接管 |
| 6 (D6) | BSP_IO_PORT_00_PIN_00 | 否 | I2C2-SDA,默认被RT-Thread的I2C设备框架i2c2接管 |
| 7 (D7) | BSP_IO_PORT_00_PIN_01 | 否 | I2C2-SCL,默认被RT-Thread的I2C设备框架i2c2接管 |
> 注意:
>
> 1. BMP280和SSD1306不能同时开启,会导致BMP280无法获取数据
> 2. SSD1306的地址需要改成0x3D
> 3. 需要去掉HardwareSerial::begin(uint32_t baud, uint8_t config) 和HardwareSerial::begin(uint32_t baud)函数内的代码
> 4. 部分引脚默认被RT-Thread的设备框架(如UART、SPI、I2C)接管,使用时请注意资源冲突。
@@ -0,0 +1,9 @@
from building import *
cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')
inc = [cwd]
group = DefineGroup('RTduino', src, depend = ['PKG_USING_RTDUINO'], CPPPATH = inc)
Return('group')
@@ -0,0 +1,32 @@
/*
* Copyright (c) 2006-2024, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-10-16 Hydevcode first version
*/
#include <Arduino.h>
#include "drv_gpio.h"
#include "pins_arduino.h"
/*
* {Arduino Pin, RT-Thread Pin [, Device Name, Channel]}
* [] means optional
* Digital pins must NOT give the device name and channel.
* Analog pins MUST give the device name and channel(ADC, PWM or DAC).
* Arduino Pin must keep in sequence.
*/
const pin_map_t pin_map_table[]=
{
{D00, GET_PIN(19, 0), "uart2"}, /* Serial2-RX */
{D01, GET_PIN(19, 1), "uart2"}, /* Serial2-TX */
{D2, GET_PIN(0, 3)}, /* SPI0_CS*/
{D3, GET_PIN(1, 1), "spi0"}, /* SPI0_MOSI */
{D4, GET_PIN(1, 0), "spi0"}, /* SPI0_MISO */
{D5, GET_PIN(0, 2), "spi0"}, /* SPI_SCK */
{D6, GET_PIN(0, 0), "i2c2"}, /* I2C-SDA (Soft Wire) */
{D7, GET_PIN(0, 1), "i2c2"}, /* I2C-SCL (Soft Wire) */
};
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2006-2024, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-10-16 Hydevcode first version
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
/* pins alias. Must keep in sequence */
#define D00 (0)
#define D01 (1)
#define D2 (2)
#define D3 (3)
#define D4 (4)
#define D5 (5)
#define D6 (6)
#define D7 (7)
#define RTDUINO_PIN_MAX_LIMIT D7 /* pin number max limit check */
#define F_CPU 350000000L /* CPU:350MHz */
// #define LED_BUILTIN D0 /* Default Built-in LED */
/* i2c2 : P00.00-SDA P00.01-SCL */
#define RTDUINO_DEFAULT_IIC_BUS_NAME "i2c2"
#define SS D2 /* Chip select pin of default spi */
#define RTDUINO_DEFAULT_SPI_BUS_NAME "spi0"
#endif /* Pins_Arduino_h */
@@ -33,6 +33,97 @@ menu "Onboard Peripheral Drivers"
select BSP_USING_I2C
select PKG_USING_QMI8658
default n
menuconfig BSP_USING_ARDUINO
bool "Compatible with Arduino Ecosystem (RTduino)"
default n
select PKG_USING_RTDUINO
select BSP_USING_UART2
select BSP_USING_GPIO
select BSP_USING_I2C
select BSP_USING_HW_I2C2
select BSP_USING_SPI
select BSP_USING_SPI0
imply RTDUINO_USING_SERVO
imply RTDUINO_USING_WIRE
imply RTDUINO_USING_SPI
if BSP_USING_ARDUINO
menuconfig BSP_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD
bool "Enable ARDUINO RTDUINO SENSORFUSION SHIELD"
default n
select PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD
select PKG_ARDUINO_RTDUINO_SENSORFUSION_SHIELD_DEMO
if BSP_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD
config BSP_USING_RTDUINO_SENSORFUSION_SHIELD_BMP280_DEMO
bool "Enable RTDUINO SENSORFUSION SHIELD BMP280 DEMO"
select PKG_RTDUINO_SENSORFUSION_SHIELD_BMP280_DEMO
default n
config BSP_USING_RTDUINO_SENSORFUSION_SHIELD_SHT31_DEMO
bool "Enable RTDUINO SENSORFUSION SHIELD SHT31 DEMO"
select PKG_RTDUINO_SENSORFUSION_SHIELD_SHT31_DEMO
default n
config BSP_USING_RTDUINO_SENSORFUSION_SHIELD_QMC5883L_DEMO
bool "Enable RTDUINO SENSORFUSION SHIELD QMC5883L DEMO"
select PKG_RTDUINO_SENSORFUSION_SHIELD_QMC5883L_DEMO
default n
config BSP_USING_RTDUINO_SENSORFUSION_SHIELD_SC7A20_DEMO
bool "Enable RTDUINO SENSORFUSION SHIELD SC7A20 DEMO"
select PKG_RTDUINO_SENSORFUSION_SHIELD_SC7A20_DEMO
default n
config BSP_USING_RTDUINO_SENSORFUSION_SHIELD_SSD1306_DEMO
bool "Enable RTDUINO SENSORFUSION SHIELD SSD1306 DEMO"
select PKG_RTDUINO_SENSORFUSION_SHIELD_SSD1306_DEMO
default n
endif
endif
menuconfig BSP_USING_RW007
bool "Enable RW007"
default n
select PKG_USING_RW007
select BSP_USING_SPI
select BSP_USING_SPI0
select RW007_NOT_USE_EXAMPLE_DRIVERS
if BSP_USING_RW007
comment "Notice: P5_7 --> 47; P5_6 -->46; P0_5 --> 5; P0_4 --> 4"
config IFX_RW007_SPI_BUS_NAME
string "RW007 BUS NAME"
default "spi0"
config IFX_RW007_WIFI_SSID
string "Wi-Fi SSID"
default "realthread_VIP"
config IFX_RW007_WIFI_PASSWORD
string "Wi-Fi Password"
default "your wifi password"
config IFX_RW007_CS_PIN
int "(INT)CS pin index"
range 1 113
default 3
config IFX_RW007_BOOT0_PIN
int "(INT)BOOT0 pin index (same as spi clk pin)"
range 1 113
default 2
config IFX_RW007_BOOT1_PIN
int "(INT)BOOT1 pin index (same as spi cs pin)"
range 1 113
default 3
config IFX_RW007_INT_BUSY_PIN
int "(INT)INT/BUSY pin index"
range 1 190
default 160
config IFX_RW007_RST_PIN
int "(INT)RESET pin index"
range 1 190
default 180
endif
endmenu
menu "On-chip Peripheral Drivers"
@@ -76,6 +167,19 @@ menu "On-chip Peripheral Drivers"
range 0 999
default 145
endif
menuconfig BSP_USING_HW_I2C2
bool "Enable BSP_USING_HW_I2C2"
default y
if BSP_USING_HW_I2C2
config BSP_I2C2_SCL_PIN
int "BSP_I2C2_SCL_PIN number(0,1)"
range 0 999
default 1
config BSP_I2C2_SDA_PIN
int "BSP_I2C2_SDA_PIN number(0,0)"
range 0 999
default 0
endif
endif
menuconfig BSP_USING_SPI
bool "Enable SPI"
@@ -85,6 +189,9 @@ menu "On-chip Peripheral Drivers"
config BSP_USING_SPI5
bool "Enable BSP_USING_SPI5"
default y
config BSP_USING_SPI0
bool "Enable BSP_USING_SPI0"
default y
endif
endmenu
@@ -14,6 +14,9 @@ if GetDepend(['BSP_USING_SPI_FLASH']):
if GetDepend(['BSP_USING_TF_CARD']):
src += Glob('drv_filesystem.c')
if GetDepend(['BSP_USING_RW007']):
src += Glob('drv_rw007.c')
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path)
Return('group')
@@ -0,0 +1,65 @@
#include <rtthread.h>
#include <rtdbg.h>
#ifdef BSP_USING_RW007
#include <rtdevice.h>
#include <drv_spi.h>
#include <board.h>
#include <spi_wifi_rw007.h>
extern void spi_wifi_isr(int vector);
static void rw007_gpio_init(void)
{
/* Configure IO */
rt_pin_mode(IFX_RW007_RST_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(IFX_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLDOWN);
/* Reset rw007 and config mode */
rt_pin_write(IFX_RW007_RST_PIN, PIN_LOW);
rt_thread_delay(rt_tick_from_millisecond(100));
rt_pin_write(IFX_RW007_RST_PIN, PIN_HIGH);
/* Wait rw007 ready(exit busy stat) */
while (!rt_pin_read(IFX_RW007_INT_BUSY_PIN))
{
rt_thread_delay(5);
}
rt_thread_delay(rt_tick_from_millisecond(200));
rt_pin_mode(IFX_RW007_INT_BUSY_PIN, PIN_MODE_INPUT_PULLUP);
}
int wifi_spi_device_init(void)
{
char sn_version[32];
uint32_t cs_pin = IFX_RW007_CS_PIN;
rw007_gpio_init();
rt_hw_spi_device_attach(IFX_RW007_SPI_BUS_NAME, "wspi", cs_pin);
rt_hw_wifi_init("wspi");
rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION);
rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP);
rw007_sn_get(sn_version);
rt_kprintf("\nrw007 sn: [%s]\n", sn_version);
rw007_version_get(sn_version);
rt_kprintf("rw007 ver: [%s]\n\n", sn_version);
return 0;
}
INIT_APP_EXPORT(wifi_spi_device_init);
static void int_wifi_irq(void *p)
{
((void)p);
spi_wifi_isr(0);
}
void spi_wifi_hw_init(void)
{
rt_pin_attach_irq(IFX_RW007_INT_BUSY_PIN, PIN_IRQ_MODE_FALLING, int_wifi_irq, 0);
rt_pin_irq_enable(IFX_RW007_INT_BUSY_PIN, PIN_IRQ_ENABLE);
}
#endif /* BSP_USING_RW007 */
@@ -16,7 +16,11 @@
#ifdef BSP_USING_SPI_FLASH
static int rt_spi_flash_init(void)
{
#if !defined(BSP_USING_RW007)
rt_hw_spi_device_attach("spi5", "spi30", GET_PIN(7, 3));
#else
rt_hw_spi_device_attach(IFX_RW007_SPI_BUS_NAME, "spi30", GET_PIN(20, 3));
#endif
if (RT_NULL == msd_init("sd0", "spi30"))
{
return -RT_ERROR;
+17 -3
View File
@@ -61,7 +61,7 @@
/* end of rt_strnlen options */
/* end of klibc options */
#define RT_NAME_MAX 8
#define RT_NAME_MAX 15
#define RT_CPUS_NR 1
#define RT_ALIGN_SIZE 8
#define RT_THREAD_PRIORITY_32
@@ -145,9 +145,16 @@
#define RT_USING_DEVICE_IPC
#define RT_UNAMED_PIPE_NUMBER 64
#define RT_USING_SYSTEM_WORKQUEUE
#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048
#define RT_SYSTEM_WORKQUEUE_PRIORITY 23
#define RT_USING_SERIAL
#define RT_USING_SERIAL_V1
#define RT_SERIAL_RB_BUFSZ 64
#define RT_SERIAL_RB_BUFSZ 256
#define RT_USING_I2C
#define RT_USING_I2C_BITOPS
#define RT_USING_PWM
#define RT_USING_SPI
#define RT_USING_PIN
/* end of Device Drivers */
@@ -322,6 +329,14 @@
/* NXP HAL & SDK Drivers */
/* end of NXP HAL & SDK Drivers */
/* NUVOTON Drivers */
/* end of NUVOTON Drivers */
/* GD32 Drivers */
/* end of GD32 Drivers */
/* end of HAL & SDK Drivers */
/* sensors drivers */
@@ -417,7 +432,6 @@
#define BSP_USING_GPIO
#define BSP_USING_UART
#define BSP_USING_UART2
#define BSP_USING_UART4
#define UART_CPU_IRQ_Number 3
/* end of On-chip Peripheral Drivers */