XMC7200是英飞凌推出的一款32位双核CPU子系统(ARM Cortex-M7 和 ARM Cortex-M0)的开发板。该XMC7200D专为工业应用而设计,是一款真正的可编程嵌入式片上系统,集成了多达两个 350MHz Arm Cortex-M7 作为主应用处理器,一个 100MHz Arm Cortex-M0+ 。
RT-Thread已率先支持英飞凌XMC7200系列,本文将介绍RT-Thread基于开发板xmc7200-kit_xmc7200_evk的移植经验:
XMC7200测评活动
1. 前期准备
1.1 英飞凌烧录工具——Cypress programmer
我们把代码编译好后使用Cypress programmer进行烧录。
官方下载链接:Cypress Programmer - Infineon Developer Center
1.2 英飞凌官方IDE——ModusToolbox
我们会使用到官方的IDE去获取所需要的文件,如驱动文件、启动文件、编译脚本等等。
官方下载链接:ModusToolbox - Infineon Developer Center
1.3 Keil_MDK && ENV环境
ENV环境会帮我们生成Keil工程,然后使用Keil进行代码编写。(如果是用主线代码,需要下载ENV2.0)
使用参考:RT-Thread之ENV工具_rt-thread env-CSDN博客
ENV2.0下载教程:【重要通知】ENV-Windows v2.0.0版本发布
2. 移植准备
2.1 了解RT-Thread目录结构
在大多数的BSP中,都会包含一下文件:
文件名称 | 文件说明 | |
.settings | 用于生成RT-Thread Studio工程 | |
applications | 存放用户代码,通常会有一个main.c文件 | |
board | 里面通常会放有linker_scripts(各类编译器的编译脚本)、board.c/.h(板级相关的初始化和配置) | |
drivers | 设备驱动代码,里面存放各种外设的驱动,例如GPIO、UART等等,一般会放在BSP上一级目录下的libraries下的HAL_Drivers里面 | |
figures | 开发板照片以及.md说明里用到的图片 | |
.config, rtconfig.h, Kconfig | Kconfig配置系统相关文件(在本篇中不涉及语法使用教程) | |
rtconfig.py, SConscript, SConstruct | scons构建系统相关文件(在本篇中不涉及语法使用教程) | |
template.uvprojx, template.uvoptx | keil模板工程 | |
project.uvprojx, project.uvoptx | keil工程(由模板工程生成得来) | |
template.eww, template.ewp | iar模板工程 | |
project.eww, project.ewp | iar工程 |
在了解了目录以后我们就能根据所需要的文件一步一步完成BSP了。
2.2 使用ModusToolBox生成示例工程
2.2.1 生成工程
接下来我们使用官方的IDE生成一个示例工程获取其驱动库、启动文件、链接脚本等。
在弹出的窗口中选择我们本次用到的芯片类型然后点击Next。
然后选择‘Hello World’工程,选择好保存位置后就可以创建了。
2.2.2 生成文件
2.2.2.1 mtb_shared文件
当我们的工程创建好以后,我们会使用到这两个文件
在mtb_shared里面存放着:
我们会使用到下面的文件
文件名称 | 文件说明 | |
cat1cm0p | 包含了与基于 Cortex-M0+ 核心的微控制器相关的代码和资源,低功耗的控制代码 | |
cmsis | ARM的一套标准化软件接口 | |
core-lib | 核心库,定义一些参数、类型的值 | |
mtb-hal-cat1 | 硬件抽象层库 | |
mtb-pdl-cat1 | 硬件驱动层库 | |
retarget-io | 包含重定向输入输出的文件 |
2.2.2.2 工程下文件
在生成的示例工程中,bsps目录下会存放着相应开发板的相关链接脚本以、包含板载初始化的文件以及启动文件,这个我们待会也会使用到。
3. 文件移植
我们在同系列下新建一个文件夹。
3.1 applications文件
在这个文件夹中我们存放的是用户代码,一般初始的时候只有一个main.c和一个Sconscript。可以去其它系列复制一个applications文件夹过来放在底下。
3.2 board文件
在这个文件中存放的是一些编译器链接脚本以及板载初始化用到的文件。
3.2.1 链接脚本
链接脚本我们去到示例工程下找:
把其修改好名称后放在board下的linker_scripts文件夹下。
3.2.2 board.c/.h文件
在board.c/.h文件中,一般会存放一些在板载初始化阶段要使用的函数,每个厂商需要的初始化流程不同,会有不一样内容。在本次移植中,就需要加入cybsp_init()功能,这个函数可以帮我们配置系统时钟、电源管理和资源管理等。这个可以去同系列里面复制粘贴过来就好。
然后就是要修改board.h里面的SRAM大小跟起始地址,这个需要查看芯片的数据书册。
3.2.3 Scons&&KConfig
还有就是Scons跟KConfig文件,这个主要是涉及编译跟配置的,这个复制过来以后需要做一些修改。
首先就是需要指定一下不同编译器实现底层系统库函数,这个源文件在mtb_shared目录下。
然后是各种参与编译的宏,这个需要使用到ModusToolBox编译示例工程,然后在生成的compile_commands.json里寻找以-D开头的参数,这些都是参与编译的宏。然后把这些宏加入到Sconscript里面。
然后是Kconfig的,在这里配置我们需要使用的外设选项,本次移植只需要使用到串口跟GPIO,所以板载外设配置里面就只有这里两项配置。在复制文件过来的基础上进行增删改就可以了。在硬件驱动配置这里我们仿照其它系列进行修改。同时也要在libraries下的Konfig进行修改(后面有提及)。
3.3 lib文件
我们需要把刚刚示例工程下生成bsps目录下的TARGET_APP_KIT_XMC72_EVK文件复制过来,同时也要编写一个Sconscript,在这里我们需要使用到里面的配置、启动文件。
3.4 MDK工程
先从其它工程里面把有关MDK的工程文件复制过来。
然后修改模板工程里面的芯片类型。如果没有显示的话需要先下载一下英飞凌的Pack包。
可以通过Keil内置的下载器下载,也可通过链接路径下载
下载路径:https://raw.githubusercontent.com/Infineon/cmsis-packs/master/CAT1C_DFP/Infineon.CAT1C_DFP.1.0.0.pack
3.5 rtconfig.h/.py、Konfig、.config
这几个文件是负责硬件配置相关的,我们复制过来后可以根据需求直接修改.config里面的设置,然后用ENV进入menuconfig保存一下更新rtconfig.h。例如这里需要把控制台串口设置为串口3。
也可以用ENV进入到menuconfig里面去修改:
3.6 SConscript、SConsturct
这类型的文件主要与编译相关。从其它BSP复制过来后,SConscript文件一般不需要进行修改,SConstruct文件要看自己的需要修改一下文件路径。
如这里将英飞凌驱动库做成了软件包的形式,就需要重新指定一下路径,大家根据自己的需求修改。
3.7 Libraries修改
3.7.1 修改Kconfig
在libraries目录下的Kconfig里,我们需要添加上我们的板子信息,仿照其它系列就好了。
3.7.2 修改HAL_Drivers文件
在驱动库中,有些地方还需要我们进行调整。
在uart_config.h里,修改串口的引脚。
不同于已适配的英飞凌Psoc6系列,中断配置会有所不同,这里也需要修改。如果是相同系列同样配置的话无需操作。
4. 做成软件包
移植工作完成后,我发现英飞凌自身的驱动库体积比较大,所以将其整合了一下,做成了软件包的形式。同时也将其它系列也修改为依赖软件包的形式,大家在使用的时候记得先进入ENV中使用pkgs --update的命令将软件包下载下来。如果是其它系列的则可以参考其它文章将生成的驱动库放在合适的位置。
5. 使用
到这里就适配完成了,接下来就是进行编译与下载。
5.1 生成MDK工程
待软件包安装好后,在ENV环境下输入SCons --target==MDK5命令,ENV会自动生成MDK5工程。
然后进入MDK中进行编译
(可以看到,刚刚所写的编译宏会显示在这里)
这里记得勾选上生成HEX文件用于待会的烧录
5.2 烧录
打开官方的烧录软件Cypress。选择好对应的板子。
选择刚刚编译好的.hex然后点击连接。
然后点击这个按钮进行下载即可
全部0条评论
快来发表一下你的评论吧 !