diff --git a/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c b/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c index 327fcd230b0..ba9a959395b 100644 --- a/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c +++ b/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c @@ -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) { diff --git a/bsp/Infineon/libraries/HAL_Drivers/drv_spi.c b/bsp/Infineon/libraries/HAL_Drivers/drv_spi.c index d66ef594e5b..eee1c01d21a 100644 --- a/bsp/Infineon/libraries/HAL_Drivers/drv_spi.c +++ b/bsp/Infineon/libraries/HAL_Drivers/drv_spi.c @@ -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", diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/.ci/attachconfig/ci.attachconfig.yml b/bsp/Infineon/xmc7100d-f144k4160aa/.ci/attachconfig/ci.attachconfig.yml index bf17c097261..f06e61d8b91 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/.ci/attachconfig/ci.attachconfig.yml +++ b/bsp/Infineon/xmc7100d-f144k4160aa/.ci/attachconfig/ci.attachconfig.yml @@ -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 \ No newline at end of file + - 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 + \ No newline at end of file diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/.config b/bsp/Infineon/xmc7100d-f144k4160aa/.config index 0d7eb0e9aa6..30c486fa4b8 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/.config +++ b/bsp/Infineon/xmc7100d-f144k4160aa/.config @@ -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 diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/README.md b/bsp/Infineon/xmc7100d-f144k4160aa/README.md index 8510d79422a..2e4ee402529 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/README.md +++ b/bsp/Infineon/xmc7100d-f144k4160aa/README.md @@ -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` diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/applications/SConscript b/bsp/Infineon/xmc7100d-f144k4160aa/applications/SConscript index 034056eca76..d78d36184d1 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/applications/SConscript +++ b/bsp/Infineon/xmc7100d-f144k4160aa/applications/SConscript @@ -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) diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_main.cpp b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_main.cpp new file mode 100644 index 00000000000..37172ee7404 --- /dev/null +++ b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_main.cpp @@ -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 + +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); +} diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/README.md b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/README.md new file mode 100644 index 00000000000..096d0a2db86 --- /dev/null +++ b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/README.md @@ -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)接管,使用时请注意资源冲突。 diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/SConscript b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/SConscript new file mode 100644 index 00000000000..25399290275 --- /dev/null +++ b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/SConscript @@ -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') diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/pins_arduino.c b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/pins_arduino.c new file mode 100644 index 00000000000..ba3a1d2807e --- /dev/null +++ b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/pins_arduino.c @@ -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 +#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) */ +}; diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/pins_arduino.h b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/pins_arduino.h new file mode 100644 index 00000000000..9844ae54365 --- /dev/null +++ b/bsp/Infineon/xmc7100d-f144k4160aa/applications/arduino_pinout/pins_arduino.h @@ -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 */ \ No newline at end of file diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/board/Kconfig b/bsp/Infineon/xmc7100d-f144k4160aa/board/Kconfig index 8bac8748594..00e7f766b79 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/board/Kconfig +++ b/bsp/Infineon/xmc7100d-f144k4160aa/board/Kconfig @@ -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 diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/SConscript b/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/SConscript index 0f1e6e1f3d8..e947eb2240c 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/SConscript +++ b/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/SConscript @@ -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') diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/drv_rw007.c b/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/drv_rw007.c new file mode 100644 index 00000000000..4867be2cff2 --- /dev/null +++ b/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/drv_rw007.c @@ -0,0 +1,65 @@ +#include +#include +#ifdef BSP_USING_RW007 +#include +#include +#include +#include + +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 */ diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/spi_flash_init.c b/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/spi_flash_init.c index 4d461f65647..8b153d54aca 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/spi_flash_init.c +++ b/bsp/Infineon/xmc7100d-f144k4160aa/board/ports/spi_flash_init.c @@ -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; diff --git a/bsp/Infineon/xmc7100d-f144k4160aa/rtconfig.h b/bsp/Infineon/xmc7100d-f144k4160aa/rtconfig.h index 41e131c9c6e..9feb9c50f6c 100644 --- a/bsp/Infineon/xmc7100d-f144k4160aa/rtconfig.h +++ b/bsp/Infineon/xmc7100d-f144k4160aa/rtconfig.h @@ -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 */