1、[bsp] [imxrt] rename docs imxrt -> i.MX RT

2、[bsp] [stm32] fix drv_can assert bug
This commit is contained in:
tyustli 2019-08-27 15:35:58 +08:00
parent 40bb254ccd
commit 3730df2411
5 changed files with 30 additions and 26 deletions

View File

@ -1,8 +1,9 @@
# IMXRT 系列 BSP 制作教程 # i.MX RT 系列 BSP 制作教程
为了让广大开发者更好、更方便地使用 BSP 进行开发RT-Thread 开发团队重新整理了现有的 IMXRT 系列的 BSP推出了新的 BSP 框架。新的 BSP 框架在易用性、移植便利性、驱动完整性、代码规范性等方面都有较大提升,在新的 BSP 框架下进行开发,可以大大提高应用的开发效率。 为了让广大开发者更好、更方便地使用 BSP 进行开发RT-Thread 开发团队重新整理了现有的 i.MX RT 系列的 BSP推出了新的 BSP 框架。新的 BSP 框架在易用性、移植便利性、驱动完整性、代码规范性等方面都有较大提升,在新的 BSP 框架下进行开发,可以大大提高应用的开发效率。
和 RT-Thread 以往提供的 i.MX RT 的 BSP 不同,新的框架将不会出现一个 BSP 通过 Env 配置来适配不同开发平台的情况。而是将这些不同的开发平台通过不同的 BSP 文件展示出来。这种方式不仅大大降低了代码的耦合性,减少了 BSP 的维护成本,而且让开发者可以更容易地找到自己需要的资源。
和 RT-Thread 以往提供的 BSP 不同,在新的 BSP 文件夹中将不会包含固件库、外设驱动等可以被多个 BSP 引用的代码文件。而是将这些通用的文件统一存放在 Libraries 文件夹中,通过在特定 BSP 中引用这些文件的方式,来包含 BSP 中所需的库文件或者驱动文件。这种方式不仅大大提高了代码复用率,降低了 BSP 的维护成本,而且可以更方便地给开发者提供更丰富的驱动文件,让开发者可以更容易地找到自己需要的资源。
新的 BSP 框架还引入了 MCUXpresso Config Tools 工具可以使用该工具来对引脚和时钟进行配置。MCUXpresso 工具提供了图形化的配置界面,这种图形化的配置方式对开发者来说更加直观,不仅可以让开发者灵活地配置 BSP 中使用的资源,并且可以让开发者对资源的使用情况一目了然。 新的 BSP 框架还引入了 MCUXpresso Config Tools 工具可以使用该工具来对引脚和时钟进行配置。MCUXpresso 工具提供了图形化的配置界面,这种图形化的配置方式对开发者来说更加直观,不仅可以让开发者灵活地配置 BSP 中使用的资源,并且可以让开发者对资源的使用情况一目了然。
@ -18,19 +19,19 @@ BSP 框架结构如下图所示:
![BSP 框架图](./figures/frame.png) ![BSP 框架图](./figures/frame.png)
IMXRT 系列的 BSP 由三部分组成,分别是官方 SDK、通用驱动和特定开发板 BSP下面的表格以 1050 系列 BSP 为例介绍这三个部分: i.MX RT 系列的 BSP 由三部分组成,分别是官方 SDK、通用驱动和特定开发板 BSP下面的表格以 1050 系列 BSP 为例介绍这三个部分:
| 项目 | 文件夹 | 说明 | | 项目 | 文件夹 | 说明 |
| - | - | :-- | | - | - | :-- |
| 官方 SDK | imxrt/libraries/MIMXRT1050 | 1050 系列官方 SDK | | 官方 SDK | imxrt/libraries/MIMXRT1050 | 1050 系列官方 SDK |
| drivers | imxrt/libraries/drivers | IMXRT 系列通用 RTT 驱动 | | drivers | imxrt/libraries/drivers | i.MX RT 系列通用 RTT 驱动 |
| 特定开发板 BSP | imxrt/imxrt1052-nxp-evk | NXP 官方 imxrt1050 EVK 开发板 BSP | | 特定开发板 BSP | imxrt/imxrt1052-nxp-evk | NXP 官方 imxrt1050 EVK 开发板 BSP |
## 2. 知识准备 ## 2. 知识准备
制作一个 BSP 的过程就是构建一个新系统的过程,因此想要制作出好用的 BSP要对 RT-Thread 系统的构建过程有一定了解,需要的知识准备如下所示: 制作一个 BSP 的过程就是构建一个新系统的过程,因此想要制作出好用的 BSP要对 RT-Thread 系统的构建过程有一定了解,需要的知识准备如下所示:
- 掌握 imxrt 系列 BSP 的使用方法 - 掌握 i.MX RT 系列 BSP 的使用方法
了解 BSP 的使用方法,可以阅读 [BSP 说明文档](../README.md) 中使用教程表格内的文档。了解外设驱动的添加方法可以参考《外设驱动添加指南》。 了解 BSP 的使用方法,可以阅读 [BSP 说明文档](../README.md) 中使用教程表格内的文档。了解外设驱动的添加方法可以参考《外设驱动添加指南》。
@ -48,7 +49,7 @@ IMXRT 系列的 BSP 由三部分组成,分别是官方 SDK、通用驱动和
- 熟悉 MCUXpresso 工具的使用 - 熟悉 MCUXpresso 工具的使用
在新的 imxrt 系列 BSP 中利用了 MCUXpresso 工具对底层硬件进行配置,因此需要了解 MCUXpresso 工具的使用方法。 在新的 i.MX RT 系列 BSP 中利用了 MCUXpresso 工具对底层硬件进行配置,因此需要了解 MCUXpresso 工具的使用方法。
## 3. BSP 制作方法 ## 3. BSP 制作方法
@ -127,7 +128,7 @@ BSP 的制作过程分为如下五个步骤:
| 宏定义 | 意义 | 格式 | | 宏定义 | 意义 | 格式 |
| ------------------ | -------- | ------------------ | | ------------------ | -------- | ------------------ |
| SOC_MIMXRT1052CVL5B | BSP 芯片型号 | SOC_MIMXRT10xxx | | SOC_MIMXRT1052CVL5B | BSP 芯片型号 | SOC_MIMXRT10xxx |
| SOC_IMXRT1050_SERIES | BSP 芯片系列 | SOC_IMXRT10xx_SERIES,IMXRT 目前包括1015、1020、1050、1060及1064系列 | | SOC_IMXRT1050_SERIES | BSP 芯片系列 | SOC_IMXRT10xx_SERIES,i.MX RT 目前包括1015、1020、1050、1060及1064系列 |
关于 BSP 上的外设支持选项,一个初次提交的 BSP 仅仅需要支持 GPIO 驱动和串口驱动即可,因此在配置选项中只需保留这两个驱动配置项,如下图所示: 关于 BSP 上的外设支持选项,一个初次提交的 BSP 仅仅需要支持 GPIO 驱动和串口驱动即可,因此在配置选项中只需保留这两个驱动配置项,如下图所示:
@ -215,11 +216,11 @@ BSP 的制作过程分为如下五个步骤:
## 4. 规范 ## 4. 规范
本章节介绍 RT-Thread IMXRT 系列 BSP 制作与提交时应当遵守的规范 。开发人员在 BSP 制作完成后,可以根据本规范提出的检查点对制作的 BSP 进行检查,确保 BSP 在提交前有较高的质量 。 本章节介绍 RT-Thread i.MX RT 系列 BSP 制作与提交时应当遵守的规范 。开发人员在 BSP 制作完成后,可以根据本规范提出的检查点对制作的 BSP 进行检查,确保 BSP 在提交前有较高的质量 。
### 1. BSP 制作规范 ### 1. BSP 制作规范
IMXRT BSP 的制作规范主要分为 3 个方面工程配置ENV 配置和 IDE 配置。在已有的 IMXRT 系列 BSP 的模板中,已经根据下列规范对模板进行配置。在制作新 BSP 的过程中拷贝模板进行修改时需要注意的是不要修改这些默认的配置。BSP 制作完成后,需要对新制作的 BSP 进行功能测试,功能正常后再进行代码提交。 i.MX RT BSP 的制作规范主要分为 3 个方面工程配置ENV 配置和 IDE 配置。在已有的 i.MX RT 系列 BSP 的模板中,已经根据下列规范对模板进行配置。在制作新 BSP 的过程中拷贝模板进行修改时需要注意的是不要修改这些默认的配置。BSP 制作完成后,需要对新制作的 BSP 进行功能测试,功能正常后再进行代码提交。
下面将详细介绍 BSP 的制作规范。 下面将详细介绍 BSP 的制作规范。
@ -227,7 +228,7 @@ IMXRT BSP 的制作规范主要分为 3 个方面工程配置ENV 配置和
- 遵从 RT-Thread 编码规范,代码注释风格统一 - 遵从 RT-Thread 编码规范,代码注释风格统一
- main 函数功能保持一致 - main 函数功能保持一致
- 如果有 LED 的话main 函数里 ** 只放一个 ** LED 1HZ 闪烁的程序 - 如果有 LED 的话main 函数里只放一个 LED 1HZ 闪烁的程序
- 在 `rt_hw_board_init` 中需要完成堆的初始化:调用 `rt_system_heap_init` - 在 `rt_hw_board_init` 中需要完成堆的初始化:调用 `rt_system_heap_init`
- 默认只初始化 GPIO 驱动和 FinSH 对应的串口驱动,不使用 DMA - 默认只初始化 GPIO 驱动和 FinSH 对应的串口驱动,不使用 DMA
- 当使能板载外设驱动时,应做到不需要修改代码就能编译下载使用 - 当使能板载外设驱动时,应做到不需要修改代码就能编译下载使用
@ -253,11 +254,11 @@ IMXRT BSP 的制作规范主要分为 3 个方面工程配置ENV 配置和
### 2. BSP 提交规范 ### 2. BSP 提交规范
- 提交前请认真修改 BSP 的 README.md 文件README.md 文件的外设支持表单只填写 BSP 支持的外设,可参考其他 BSP 填写。查看文档 [《IMXRT 系列驱动介绍》](./IMXRT 系列驱动介绍. md) 了解驱动分类。 - 提交前请认真修改 BSP 的 README.md 文件README.md 文件的外设支持表单只填写 BSP 支持的外设,可参考其他 BSP 填写。查看文档 [i.MX RT 系列驱动介绍》](./i.MX RT 系列驱动介绍. md) 了解驱动分类。
- 提交 BSP 分为 2 个阶段提交: - 提交 BSP 分为 2 个阶段提交:
- 第一阶段:基础 BSP 包括串口驱动和 GPIO 驱动,能运行 FinSH 控制台。完成 MDK4、MDK5 、IAR 和 GCC 编译器支持,如果芯片不支持某款编译器(比如 MDK4可以不用做。 BSP 的 README.md 文件需要填写第二阶段要完成的驱动。 - 第一阶段:基础 BSP 包括串口驱动和 GPIO 驱动,能运行 FinSH 控制台。完成 MDK4、MDK5 、IAR 和 GCC 编译器支持,如果芯片不支持某款编译器(比如 MDK4可以不用做。 BSP 的 README.md 文件需要填写第二阶段要完成的驱动。
- 第二阶段:完成板载外设驱动支持,所有板载外设使用 menuconfig 配置后就能直接使用。若开发板没有板载外设,则此阶段可以不用完成。不同的驱动也要分开提交,方便 review 和合并。 - 第二阶段:完成板载外设驱动支持,所有板载外设使用 menuconfig 配置后就能直接使用。若开发板没有板载外设,则此阶段可以不用完成。不同的驱动也要分开提交,方便 review 和合并。
- 只提交 BSP 必要的文件,删除无关的中间文件,能够提交的文件请对照其他 BSP。 - 只提交 BSP 必要的文件,删除无关的中间文件,能够提交的文件请对照其他 BSP。
- 提交 IMXRT 不同系列的 Library 库时,请参考 1050 系列的 FSL 库。 - 提交 i.MX RT 不同系列的 Library 库时,请参考 1050 系列的 FSL 库。
- 提交前要对 BSP 进行编译测试,确保在不同编译器下编译正常。 - 提交前要对 BSP 进行编译测试,确保在不同编译器下编译正常。
- 提交前要对 BSP 进行功能测试,确保 BSP 的在提交前符合工程配置章节中的要求。 - 提交前要对 BSP 进行功能测试,确保 BSP 的在提交前符合工程配置章节中的要求。

View File

@ -12,7 +12,7 @@
## 前提要求 ## 前提要求
- 学会如何使用 ENV 工具,参考:[RT-Thread env 工具用户手册](https://www.rt-thread.org/document/site/rtthread-development-guide/rtthread-tool-manual/env/env-user-manual/) - 学会如何使用 ENV 工具,参考:[RT-Thread env 工具用户手册](https://www.rt-thread.org/document/site/programming-manual/env/env/)
## 如何使用更多的板载资源 ## 如何使用更多的板载资源

View File

@ -1,12 +1,12 @@
# IMXRT 系列外设驱动添加指南 # i.MX RT 系列外设驱动添加指南
## 1. 简介 ## 1. 简介
本文档是为需要给现有的 IMXRT BSP 添加更多外设驱动的开发者准备的。通过阅读本文,开发者可以按照自己的实际情况给现有 BSP 添加自己需要的驱动。 本文档是为需要给现有的 i.MX RT BSP 添加更多外设驱动的开发者准备的。通过阅读本文,开发者可以按照自己的实际情况给现有 BSP 添加自己需要的驱动。
## 2. 前提要求 ## 2. 前提要求
- 熟练使用 ENV 工具,参考:[RT-Thread env 工具用户手册](https://www.rt-thread.org/document/site/rtthread-development-guide/rtthread-tool-manual/env/env-user-manual/) - 熟练使用 ENV 工具,参考:[RT-Thread env 工具用户手册](https://www.rt-thread.org/document/site/programming-manual/env/env/)
- 熟悉 Kconfig 语法 - 熟悉 Kconfig 语法
- 熟悉 MCUXpresso 工具 - 熟悉 MCUXpresso 工具
- 对 RT-Thread 设备驱动框架有一定了解 - 对 RT-Thread 设备驱动框架有一定了解
@ -63,9 +63,9 @@
## 4. 注意事项 ## 4. 注意事项
- 部分驱动如果没有适配 BSP 所属的 IMXRT 系列,请等待 RT-Thread 团队更新。 - 部分驱动如果没有适配 BSP 所属的 i.MX RT 系列,请等待 RT-Thread 团队更新。
- 驱动文件对 IMXRT 系列的支持情况可以查看 [IMXRT系列驱动介绍文档](./IMXRT系列驱动介绍.md)。 - 驱动文件对 i.MX RT 系列的支持情况可以查看 [i.MX RT系列驱动介绍文档](./IMXRT系列驱动介绍.md)。
- 对于驱动文件或文档说明,有任何建议或者意见,欢迎反馈到 [RT_Thread GitHub](https://github.com/RT-Thread/rt-thread) 网站或 [RT-Thread 官方论坛](https://www.rt-thread.org/qa/forum.php)。 - 对于驱动文件或文档说明,有任何建议或者意见,欢迎反馈到 [RT_Thread GitHub](https://github.com/RT-Thread/rt-thread) 网站或 [RT-Thread 官方论坛](https://www.rt-thread.org/qa/forum.php)。

View File

@ -24,7 +24,7 @@
## 2. 外设驱动的使用方法 ## 2. 外设驱动的使用方法
当前 RT-Thread 提供的驱动库已经支持 IMXRT 多个系列的 BSP。点击下表中的驱动名称即可跳转到对应驱动框架的介绍文档。开发者可以通过阅读相关资料了解如何在应用开发中通过设备驱动框架来使用这些外设驱动。 当前 RT-Thread 提供的驱动库已经支持 i.MX RT 多个系列的 BSP。点击下表中的驱动名称即可跳转到对应驱动框架的介绍文档。开发者可以通过阅读相关资料了解如何在应用开发中通过设备驱动框架来使用这些外设驱动。
### 2.1 片上外设 ### 2.1 片上外设

View File

@ -377,8 +377,6 @@ static int _can_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_t
HAL_CAN_StateTypeDef state = hcan->State; HAL_CAN_StateTypeDef state = hcan->State;
/* Check the parameters */ /* Check the parameters */
RT_ASSERT(IS_CAN_IDTYPE(pmsg->ide));
RT_ASSERT(IS_CAN_RTR(pmsg->rtr));
RT_ASSERT(IS_CAN_DLC(pmsg->len)); RT_ASSERT(IS_CAN_DLC(pmsg->len));
if ((state == HAL_CAN_STATE_READY) || if ((state == HAL_CAN_STATE_READY) ||
@ -515,10 +513,15 @@ static int _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo)
/* get len */ /* get len */
pmsg->len = rxheader.DLC; pmsg->len = rxheader.DLC;
/* get hdr */ /* get hdr */
#ifdef BSP_USING_CAN2 if (hcan->Instance == CAN1)
pmsg->hdr = rxheader.FilterMatchIndex; {
#else
pmsg->hdr = (rxheader.FilterMatchIndex + 1) >> 1; pmsg->hdr = (rxheader.FilterMatchIndex + 1) >> 1;
}
#ifdef CAN2
else if (hcan->Instance == CAN2)
{
pmsg->hdr = (rxheader.FilterMatchIndex >> 1) + 14;
}
#endif #endif
return RT_EOK; return RT_EOK;