diff --git a/rt-thread-version/rt-thread-standard/_sidebar.md b/rt-thread-version/rt-thread-standard/_sidebar.md index 45013d81696a52aade0c9dadb70ffc9a313baf7f..13c08b53028ef47423df2b5f668169d9bc7c0d98 100644 --- a/rt-thread-version/rt-thread-standard/_sidebar.md +++ b/rt-thread-version/rt-thread-standard/_sidebar.md @@ -190,6 +190,8 @@ - 英飞凌PSoC™6系列 - [BSP制作教程](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-psoc6/PSoC6系列BSP制作教程.md) - [PSoC™6开发实践指南](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-psoc6/PSoC6开发实践指南.md) + - 英飞凌XMC7200系列 + - [英飞凌XMC7200开发实践指南](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/英飞凌XMC7200实践指南.md) - NXP-MCX系列 - [恩智浦FRDM-MCXN947开发实践指南](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/NXP-MCX/恩智浦FRDM-MCX974实践指南.md) - [恩智浦FRDM-MCXN236开发实践指南](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/MCX-N236/恩智浦FRDM-MCXN236实践指南.md) diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/10spi.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/10spi.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf6868d07ad50b2f9e7b92320a8c97934fbaacb Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/10spi.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/11CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/11CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0ebc18d2be366f69c3e840aed978e5782a41e0 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/11CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/12LED.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/12LED.png new file mode 100644 index 0000000000000000000000000000000000000000..2d75b19b98fe46f43387451a8404a02c6bad0ef4 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/12LED.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/13CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/13CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..ef492a83eb55e2ffca0490a703d5234a9e8bc5d9 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/13CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/14CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/14CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..0bab42c076f04942d611894d93eb3c55ea411922 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/14CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/15CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/15CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4106eb212cab9175284e215a7e0056773cc88b Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/15CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/16CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/16CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..82e8f2ec21e484f1fc6a181af24059c0f55779fb Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/16CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/17CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/17CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..dbac609cae7b275134e0cef37213a420b438a3c8 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/17CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/18CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/18CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfcb13d37713bb2a235b7acb6e105e1b98ec7fd Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/18CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/19CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/19CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..27c780611e28447a841943995958b52c6085f2c6 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/19CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/1board.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/1board.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed4c182c88c9704734225bf9013afc27c4a3448 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/1board.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/20CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/20CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..83547476f0edd27309bd72537c75278e9f76934a Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/20CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/21CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/21CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..452c0a3c9ab6c0e9182ab364844eafad36842543 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/21CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/22CAN.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/22CAN.jpg new file mode 100644 index 0000000000000000000000000000000000000000..455550766741cafe4ca8857c61168e4fa93f30a6 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/22CAN.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/23CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/23CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..b1120a3570358f68f517d99afec17b60e9f20e07 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/23CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/24CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/24CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..c0173f25648b0cf839b05132bfeafaa1fba36b92 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/24CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/25CAN.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/25CAN.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b7f3a428ce8ed929fb49f28a488024188db9494 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/25CAN.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/26CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/26CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..5da623afdc08318172f589bc6ff8190eafed7c73 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/26CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/27CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/27CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..a378cf42fa569dc5ba8e67397a6c1fba3abfcc03 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/27CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/28CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/28CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..f975c265e457fafd57561d672627811d0e00c273 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/28CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/29CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/29CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1f93544bce07e9b5b8a033f2d0e1c359fb953b Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/29CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/2env.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/2env.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d5247fd63c1c9c83fb397cec06532984a44ca7d Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/2env.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/30.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..809b9c5503c0b734ad9ff8907cae4f4b850347c9 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/30.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/31CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/31CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..e87ccaf191934179fa7dae73423eea2b040fb175 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/31CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/32CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/32CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..a39c54f2281980553ab8c3d284f11e0ec28faa62 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/32CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/33CAN.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/33CAN.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e2658cb5f7fbd1f1a67322c2f3856a0847c19c Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/33CAN.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/3env.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/3env.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6046c267b5cbdac49d4aab94413b8869fc9a23a6 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/3env.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/4inf.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/4inf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8bcc7a759921f7e4fb9b359c2efd8371a831d0f2 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/4inf.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/5result.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/5result.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1db102b7343538fa25bc7bdf4370a2dd55a72dc6 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/5result.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/6led.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/6led.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f13305290348eb8491e046540f6075d71ff99d9 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/6led.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/7btn.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/7btn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ceb02288de2516075f53f5dcd86fd3dee701d92 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/7btn.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/8btn.jpg b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/8btn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5e6c285f1e55cbdbc216d5d954e153e35d342be Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/8btn.jpg differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/9spi.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/9spi.png new file mode 100644 index 0000000000000000000000000000000000000000..9cdabaf03ccad5f5e0f3cbbc5fb2163f5f9cdede Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/figures/9spi.png differ diff --git "a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/\350\213\261\351\243\236\345\207\214XMC7200\345\256\236\350\267\265\346\214\207\345\215\227.md" "b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/\350\213\261\351\243\236\345\207\214XMC7200\345\256\236\350\267\265\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..cb4d3fdf4d43df7ec6f0d63e68436be9c80b50b7 --- /dev/null +++ "b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/ifx-XMC7200/\350\213\261\351\243\236\345\207\214XMC7200\345\256\236\350\267\265\346\214\207\345\215\227.md" @@ -0,0 +1,529 @@ +# 英飞凌XMC7200开发实践指南 + +| **目录** | 作者 | +| -------------------------------------------- | ---------------------- | +| **零、实践指南说明** | **RT-Thread & 英飞凌** | +| **一、XMC7200上的UART实践** | andeyqi | +| **二、XMC7200上的GPIO实践** | andeyqi | +| **三、XMC7200上的SPI实践** | 张瑞轩 | +| **四、XMC7200上的CAN实践** | 齐文冬+熊成傲 | +| **FAQ** | **RT-Thread &** **英飞凌** | + +# 《英飞凌XMC7200开发实践指南》 **零、实践指南说明** +## 硬件介绍 +1. 开发板描述: XMC7200是英飞凌推出的一款32位双核CPU子系统(ARM Cortex-M7 和 ARM Cortex-M0)的开发板。该XMC7200D专为工业应用而设计,是一款真正的可编程嵌入式片上系统,集成了多达两个 350MHz Arm® Cortex-M7® 作为主应用处理器,一个 100MHz Arm® Cortex-M0®+ 。 +2. 开发板外观如下图所示: + ![xmc700](figures/1board.png) +3. 芯片特点: + +- 单通道/双通道 350-MHz Arm® Cortex®-M7 和 Cortex®-M0+ +- 高达 8MB 闪存,高达 1MB SRAM +- 7 V 至 5.5 V 电源电压 +- 扩展温度范围高达 125°C +- 接口:最多 10 通道 CAN FD,最多 11 通道 SCB +- eMMC、SMIF(QSPI/HS-SPI)、最多 2 通道 10/100/1000 Mbit 以太网 +- 模数转换器:最多 96 通道、12 位,带 3 个逐次逼近模数转换器(SAR ADC)单元 +- 定时器:多达 15 通道 16 位,用于电机控制;87 通道 16 位定时器/计数器/脉宽调制 (TCPWM) 和 16 通道 32 位 TCPWM +- 事件发生定时器 +- 可用封装: QFP-176、BGA-272 + +4. 应用方向: + +- 工业传动与机器人技术 + +- 电动汽车充电 +- 电动两轮车 +- 可编程逻辑控制 (PLC) + +开发板更多详细信息请参考 [**Infineon官方网站**](https://www.infineon.com/) + +**我有疑问:**[**RT-Thread 官方论坛**](https://club.rt-thread.org/) + +# 一、XMC7200上的UART实践 + ## 1.实验目的 +XMC7200 开发板已经适配了uart驱动,默认配置uart3 作为console 的输出及shell 的输入,我们可以关闭uart3 作为console 的配置,将uart3 作为串行设备通过驱动进行读写访问验证UART 功能。 + + ## 2. 步骤说明 + ### 2.1 关闭uart3 console 配置 +通过menuconfig 关闭shell 及 console 配置. + +![env](figures/2env.jpg) + +![env](figures/3env.jpg) + +### 2.2 uart 读写验证 + +RT-thread 的uart 设备驱动模型数据分访问流程如下: + +![inf](figures/4inf.jpg) + +参照上述流程添加如下测试代码,将接收到的uart 数据 重新写到uart 设备,完成uart 的读写验证: + +```c +#include +#define SAMPLE_UART_NAME "uart3" +/* 用于接收消息的信号量 */ +static struct rt_semaphore rx_sem; +static rt_device_t serial; +/* 接收数据回调函数 */ +static rt_err_t uart_input(rt_device_t dev, rt_size_t size) +{ + /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */ + rt_sem_release(&rx_sem); + return RT_EOK; +} +static void serial_thread_entry(void *parameter) +{ + char ch; + while (1) + { + /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */ + while (rt_device_read(serial, -1, &ch, 1) != 1) + { + /* 阻塞等待接收信号量,等到信号量后再次读取数据 */ + rt_sem_take(&rx_sem, RT_WAITING_FOREVER); + } + /* 读取到的数据通过串口错位输出 */ + //ch = ch + 1; + rt_device_write(serial, 0, &ch, 1); + } +} +int uart_sample(int argc, char *argv[]) +{ + rt_err_t ret = RT_EOK; + char uart_name[RT_NAME_MAX]; + char str[] = "hello RT-Thread!\r\n"; + if (argc == 2) + { + rt_strncpy(uart_name, argv[1], RT_NAME_MAX); + } + else + { + rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX); + } + /* 查找系统中的串口设备 */ + serial = rt_device_find(uart_name); + if (!serial) + { + rt_kprintf("find %s failed!\n", uart_name); + return RT_ERROR; + } + /* 初始化信号量 */ + rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); + /* 以中断接收及轮询发送模式打开串口设备 */ + rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); + /* 设置接收回调函数 */ + rt_device_set_rx_indicate(serial, uart_input); + /* 发送字符串 */ + rt_device_write(serial, 0, str, (sizeof(str) - 1)); + /* 创建 serial 线程 */ + rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); + /* 创建成功则启动线程 */ + if (thread != RT_NULL) + { + rt_thread_startup(thread); + } + else + { + ret = RT_ERROR; + } + return ret +``` + +## 3.实验结果 + +在main 线程内调用 uart_sample 函数启动串口接收线程验证uart 读写功能,通过scons --target=mdk5 命令生成MDK工程验证。 +将程序下载到板子中运行发现串口发送数据会被回传回来,从而验证了uart 设备模型的读写功能。 + +![result](figures/5result.jpg) + +## 4.原文连接 +原文连接:https://club.rt-thread.org/ask/article/f79e0cec6792d322.html +# 二、XMC7200上的GPIO实践 + +## 1.系统适配 +RT-Thread BSP已经适配了 XMC7200 开发板,我们获取代码生成工程即可运行系统了,BSP 的适配论坛已经有帖子详细的说明(免费测评 | 英飞凌XMC7200系列MCU在RT-Thread上的移植经验大公开!),将编译的程序下载到板子中运行,在shell中输入任何字符就会触发hardfault,对应日志如下。 + +```shell + \ | / +- RT - Thread Operating System + / | \ 5.2.0 build Jul 22 2024 21:46:16 + 2006 - 2024 Copyright by RT-Thread team +msh >psr: 0x80000013 +r00: 0x00000000 +r01: 0x280054b0 +r02: 0x00000000 +r03: 0x00000000 +r04: 0x00000003 +r05: 0x280041e8 +r06: 0xdeadbeef +r07: 0xdeadbeef +r08: 0xdeadbeef +r09: 0xdeadbeef +r10: 0xdeadbeef +r11: 0xdeadbeef +r12: 0x00000000 + lr: 0x100801a5 + pc: 0x00000000 +hard fault on handler +usage fault: +SCB_CFSR_UFSR:0x02 INVSTATE +``` + +根据上述的日志的LR和PC可以看出执行了空函数,从LR地址可以定位出异常函数的返回地址,debug 发现是因为用户中断处理函数指针数组的成员为NULL,在接收到串口数据的时候调用了空函数指针,本地在board 初始化的时候重新初始化了修复的该问题。 + +```c +rt_weak void rt_hw_board_init() + { + SystemIrqInit(); + + cy_bsp_all_init(); + /* systick init */ +``` + +编写如下测试代码,配置P16_1 为输出模式周期闪烁: + +## 2.1GPIO 输出验证 + +开发板上自带三个用户LED,我们可以使用pin 驱动的接口去配置GPIO输出模式点灯。 + +![led](figures/6led.jpg) + +编写如下测试代码,配置P16_1 为输出模式周期闪烁: + +```c +#include "drv_gpio.h" +#define LED_PIN GET_PIN(16, 1) +int main(void) +{ + rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); + for (;;) + { + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} +``` + +运行后跟预期的一致周期闪烁。 + +## 2.2GPIO输入实践 + +板载有两个user button,我们可以使用该GPIO 读取按键状态。 + +![btn](figures/7btn.jpg) + +![btn](figures/8btn.jpg) + +编写如下测试代码,配置P17_3 为输入模式,读取按键状态: + +```c +#include "drv_gpio.h" +#define BTN2_PIN GET_PIN(17, 3) +int main(void) +{ + uint8_t btn2 = 1; + rt_pin_mode(BTN2_PIN, PIN_MODE_INPUT); + for (;;) + { + if(rt_pin_read(BTN2_PIN) != btn2) + { + btn2 = rt_pin_read(BTN2_PIN); + rt_kprintf("btn2 %d\n",btn2); + } + rt_thread_mdelay(10); + } +} +``` + +运行log 如下,案件的压下抬起动作可以被读取到。 + +```c +msh >btn2 0 +btn2 1 +btn2 0 +btn2 1 +btn2 0 +``` + +## 2.3GPIO中断实践 + +我们在上述配置成输入的基础上添加中断配置,通过中断读取BTN2 的状态信息。 + +```c +#include "drv_gpio.h" +#define BTN2_PIN GET_PIN(17, 3) +void btn2_callback(void * args) +{ + rt_kprintf("btn2 %d\n",rt_pin_read(BTN2_PIN)); +} +int main(void) +{ + uint8_t btn2 = 1; + rt_pin_mode(BTN2_PIN, PIN_MODE_INPUT); + rt_pin_attach_irq(BTN2_PIN,PIN_IRQ_MODE_RISING_FALLING,btn2_callback,NULL); + rt_pin_irq_enable(BTN2_PIN, 1); + for (;;) + { + rt_thread_mdelay(10); + } +} +``` + +在中断回调中打印按键状态,发现中断回调按照预期的被调用了。 + +```c +msh >btn2 0 +btn2 1 +btn2 0 +btn2 1 +btn2 0 +``` + +## 3.原文连接 +原文连接:https://club.rt-thread.org/ask/article/576023c4b7c99878.html + + +# 三、XMC7200上的SPI实践 +## 1.SPI适配 +首先在board/Kconfig里面加入SPI配置. + +```livescript +menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + select RT_USING_SPI + default n + if BSP_USING_SPI + menuconfig BSP_USING_SPI0 + bool "Enable SPI0 BUS" + default n + menuconfig BSP_USING_SPI3 + bool "Enable SPI3 BUS" + default n + if BSP_USING_SPI3 + config BSP_USING_SPI3_SAMPLE + bool "Enable SPI3 BUS Sample" + default n + endif + menuconfig BSP_USING_SPI6 + bool "Enable SPI6 BUS" + default n + endif +``` + +![](figures/9spi.png) + +然后在menuconfig开启即可,但是需要修改一下drv_spi.c的引脚. + +![](figures/10spi.png) + +引脚修改成EVK上对应的引脚即可,这里用的是Arduino接口上的SPI,与官方例程使用的SPI一致。 +配置与应用代码如下所示: + +```c +#include +#include +#include "ADIS16467-2.h" +#include "drv_gpio.h" +#include "drv_spi.h" +#include "rtdbg.h" +#define DBG_LVL DBG_ +#define LED_PIN GET_PIN(16, 1) +#define LED2_PIN GET_PIN(16,2) +rt_thread_t spitest; +ADIS16467_T adi_imu = {0}; +void SPIRTTEST() { + rt_pin_mode(GET_PIN(10, 3), PIN_MODE_OUTPUT); + rt_kprintf("SPIRTTEST\n"); + struct rt_spi_configuration imu_config = { + .data_width=16, + .mode=RT_SPI_MASTER | RT_SPI_MODE_3 | RT_SPI_MSB, + .max_hz=1000000 + }; + struct rt_spi_device *imu = (struct rt_spi_device *) rt_device_find("spi61"); + if (!imu) { + LOG_E("imu not found\n"); + } else { + rt_kprintf("imu found\n"); + } + rt_spi_bus_attach_device_cspin(imu,"spi61","spi6",GET_PIN(10,3),RT_NULL); + rt_spi_configure(imu, &imu_config); + adi_imu.spi_device = imu; + uint16_t send[1]={0x1234}; + rt_spi_send(imu,send,1); + ADIS16467_Init(&adi_imu); + ADIS16467_Check(&adi_imu); + ADIS16467_imuInfo(&adi_imu); + rt_kprintf("IMU ProdID : %X", adi_imu.ProdId); + rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); + while (1) { + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} +int main(void) { + spitest = rt_thread_create("spitest", SPIRTTEST, RT_NULL, + RT_MAIN_THREAD_STACK_SIZE, 20, 20); + rt_thread_startup(spitest); + rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); + rt_kprintf("Hello World!\n"); + for (;;) { + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} +``` + +## 2.原文连接 +原文连接:https://club.rt-thread.org/ask/article/0aa315187cb31b27.html + +# 四、XMC7200上的CAN实践 +## 1. 开箱测试 +RTT完成了基本的RTT移植,通过shell可以看到做好了uart3的console。 + +![](figures/11CAN.png) + +我要做的任务是完成CAN_FD的驱动移植并且正常启动RTT + +根据 https://club.rt-thread.org/ask/article/4e5abc98191c3747.html - RT-Thread帖子构建开发环境。并在RTT内核bsp中找到了\bsp\Infineon\xmc7200-kit_xmc7200_evk 这个开发板的模板例程和当前板内运行的应用程序。于是不改变任何参数进行软件编译和下载方法验证 +修改应用程序让三个灯循环点亮. + +![](figures/12LED.png) + +下载验证: + +![](figures/13CAN.png) + +## 2.原理图分析 +![](figures/14CAN.png) + +![](figures/15CAN.png) + +从开发板的原理图和芯片复用手册可知,驱动CAN_FD芯片的是P0.2和P0.3两个引脚,使用CAN0通道1进行控制。另外P1.0引脚控制CAN transceiver的standby功能。 + +## 3.驱动移植 + +使用RTT ENV 工具对内核进行配置,开启内核层CAN总线驱动,并重新生成KEIL MDK工程,运行scons --target=mdk5 + +![](figures/16CAN.png) + +并在HAL_Drivers目录下添加硬件层的can驱动代码,命名为drv_can.c drv_can.h. + +![](figures/17CAN.png) + +这个硬件层驱动文件是从STM32系列上面拷贝过来,需要针对性地对各部分进行更改,需要仔细核对驱动API调用方法才能完成移植,目前第一次使用英飞凌XMC系列处理器,并没有完全了解其驱动库架构和寄存器对应关系,需要进一步更改才能使用。目前实现的功能是内核驱动挂载并正常显示,但是无法调用fops进行相关接口的使用,这部分需要进一步分析并更新到此记录中。 + +如下图所示,可查找到名为xmc_can0的设备,但是无法对其进行操作。 +![](figures/18CAN.png) + +![](figures/19CAN.png) + +## 4.CAN测试 + +为了完成XMC7200 CANFD驱动评估,需要一个CAN总线分析仪。手里没用现成的,网上比较好的又很贵,因此考虑通过嘉立创开源项目拷贝一个现有方案并手工贴片完成一个简单的CAN采集器,用于测试和数据分析。 +选中了下面这款USB_TO_CAN tool,并进行打板,焊接,测试,下载官方的固件并进行通信验证。 + +![](figures/20CAN.png) + +完成的实物和测试效果如下图: + +![](figures/21CAN.png) + + 于是基于STM32H7的art-pi板子进行驱动移植,模仿实现相关接口。最终完成了一个传统CAN模式的测试框架,并提交到github上面。https://github.com/Jason0204/rtthread-xmc7200 +测试效果如下: + +![](figures/22CAN.jpg) + +![](figures/23CAN.png) + +XMC7200EVK 传统模式下的CANFD 在RTT下的运行已经完成驱动移植和部分测试。 + +## 5.原文连接 +原文连接:https://club.rt-thread.org/ask/article/ee5a26b536d9a122.html + +# 五、XMC7200上的CAN实践(二) +## 1.前言 +XMC7200系列属于XMC7000家族的32位工业微控制器,基于多达两个arm Cortex-M7处理器内核。XMC7200系列微控制器充分利用英飞凌数十年的微控制器设计经验,提供了一种优化的解决方案,以满足当今嵌入式控制应用的性能挑战。该系列结合了ARM Cortex-M7内核的扩展功能和性能,以及强大的片上外围子系统和片上存储单元。 +![](figures/24CAN.png) + +![](figures/25CAN.jpg) + +本文围绕CAN接口通讯进行实践。(由于作者水平有限,仅在官方例程基础上进行测试) + +## 2.环境搭建 + +英飞凌官方IDE——ModusToolbox +英飞凌烧录工具——Cypress programmer +Git代理工具——ModusToolbox_URL_Modifier + +官方IDE和烧录软件安装和移植RT-Thread +在复制英飞凌其他板卡基础上进行RAM修改,编译和配置文件修改如下,对照RT-Thread现有官方文档中已经移植完成的其他型号对工程补齐,完成移植。 + +![](figures/26CAN.png) + +详细可参考:https://club.rt-thread.org/ask/article/4e5abc98191c3747.html + +![](figures/27CAN.png) + +因为ModusToolbox创建工程需要拉取github相关内容,和总所周知的原因,国内大概率会拉取失败无法创建示例工程。所以推荐使用ModusToolbox_URL_Modifier通过第三方中继器绕过git。以下为详细步骤:https://github.com/dreamscaperia/ModusToolbox_URL_Modifier,拉取上述压缩包后解压并以管理员身份运行install.cmd,等待运行完成后即可通过代理服务器访问github。 + +![](figures/28CAN.png) + +![](figures/29CAN.png) + +创建工程: + +使用ModusToolbox IDE选择对应型号生成示例文件; + +![](figures/30.png) + +![](figures/31CAN.png) + +## 3.CAN_FD实践 +主函数初始化CANFD通道和中断。用户按钮和用户LED也被初始化。主循环检查按钮按下的中断标志,当它被设置时,发送一个CANFD帧。每当从其他节点接收到CANFD帧时,用户LED切换并通过串行终端记录接收到的数据。初始化代码: + +```c +/* canfd interrupt handler */ +void isr_canfd (void); +/* canfd frame receive callback */ +void canfd_rx_callback(bool rxFIFOMsg, uint8_t msgBufOrRxFIFONum, cy_stc_canfd_rx_buffer_t* basemsg); +/* button press interrupt handler */ +void isr_button (void); +``` +按键检测发送CAN帧代码: +```c + if (ButtonIntrFlag == true) + { + ButtonIntrFlag = false; + /* Sending CANFD frame to other node */ + status = Cy_CANFD_UpdateAndTransmitMsgBuffer(CANFD_HW, + CAN_HW_CHANNEL, + &CANFD_txBuffer_0, + CAN_BUFFER_INDEX, + &canfd_context); + #if USE_CAN_MODE == CAN_CLASSIC_MODE + printf("CAN standard frame sent from Node-%d\r\n\r\n", USE_CAN_NODE); + #elif USE_CAN_MODE == CAN_FD_MODE + printf("CANFD frame sent from Node-%d\r\n\r\n", USE_CAN_NODE); + #endif + printf("=====================OK!!!===========================\r\n\n"); + printf("================Successful reception=================\r\n\n"); + } +``` +使用RT-Thread Studio编译后运行: + +![](figures/32CAN.png) + +按下用户按钮(SW2)后观察终端窗口结果。观察到“CANFD frame sent from Node-1”说明板卡成功发送一个CANFD帧。 + +![](figures/33CAN.png) + +## 4.原文链接 +原文链接:https://club.rt-thread.org/ask/article/c1445285b8b66faa.html +