1 引言
在AUTOSAR分层架构中,MCAL是最基础的一层。由于该层直接和单片机打交道,在整个开发流程中往往最靠前,在PCB测试过程中也发挥着至关重要的作用。
本文以MCAL的串口模块为例,分别讲述UART手工和工具链编程的方法。对于MCAL的其它模块,设计思路和步骤是类似的,可参照本文的要点进行开发。
2 基本概念
为表述方便,首先对本文中出现的概念或术语进行说明,文中黑体字为“官方定义”,红体字加入了本人的理解。
2.1 MCAL
MCAL(Microcontroller Abstraction Layer)指微控制器抽象层,是实现不同硬件接口统一化的特殊层。通过微控制器抽象层可将硬件封装起来, 避免上层软件直接对微控制器的寄存器进行操作。微控制器抽象层包括微控制器驱动(Microcontroller Drivers)、存储器驱动(MemoryDrivers)、通信驱动(Communication Drivers)以及I/O驱动(I/O Drivers)。
简单来说,MCAL就是主控芯片(单片机)的外设驱动。
2.2 静态代码和动态代码
静态代码(Static Code)指各模块功能的具体实现代码;动态代码(Dynamic Code)指由配置工具根据相关配置信息生成的代码,也称为配置代码。
在AUTOSAR应用过程中,静态代码实现了某模块的全部功能,且其内容在工具链不更新的前提下是不会改变的。而具体用到该模块的哪些功能以及用何种方式实现这些功能,是由用户通过工具配置出来的,配置结果生成在动态代码的程序文件中。
2.3 配置文档和设计文档
在工具链开发过程中,文档的编写显得尤为重要。原因是各个功能块都是用工具配置出来的且生成代码量极其庞大,通过代码研读的方式分析查找问题不太现实,需要把整个工作过程记录下来。在MCAL开发过程中最好输出如下2个文档。
设计文档:记录MCAL模块的整个设计过程,包括MCAL相关模块的配置、初始化函数的调用、功能具体实现和调试过程等。
配置文档:作为设计文档的一部分,聚焦MCAL本模块配置的详细步骤。
2.4 MCAL用户手册
MCAL用户手册(User Manual)作为MCAL开发过程中最重要的文档,存在于“EB Tresos Studio”(MCAL配置工具)的安装包中。
3 设计思路
下面着重讲述手工方式和工具链方式设计主控芯片外设驱动在思路上的差别。
3.1 单片机驱动手工编程设计思路
单片机底层驱动手工编程的设计步骤如图3-1所示。
图3-1: 手写代码实现单片机外设驱动步骤
3.2 单片机驱动工具链开发设计思路
单片机底层驱动工具链开发的设计步骤如图3-2所示。
图3-2: 工具链开发实现单片机外设驱动步骤
3.3 注意事项
这里着重强调一点,在用工具链开发单片机外设驱动的过程中,千万不要像传统方法那样研究单片机的寄存器和时序。AUTOSAR工程数据结构复杂,函数调用层级众多,在短时间内将某个模块的静态代码研究明白不太现实。从实例和配置项含义入手,再配合以局部改动和调试,往往能取得事半功倍的效果。
4 手写代码实现方法
用手工编程方式实现单片机UART模块,主要包括初始化、中断处理、数据收发等几部分,收发数据往往以字节为单位进行,图4-1和图4-2为手工方式实现UART模块的代码段截图。
图4-1: UART手写代码截图-寄存器配置
图4-2: UART手写代码截图-功能实现
5 AUTOSAR工具链实现方法
下面列出AUTOSAR工具链实现UART功能的步骤,这里将TC275的P14.10和P14.8用做UART的发送和接收管脚。
注:EcuM、OS等模块配置在前面的文章中讲述过,本文不再赘述,感兴趣的读者可参照本公众号之前的文章。
《从手写代码到AUTOSAR工具链_RTE入门篇》;
《从手写代码到AUTOSAR工具链_EcuM应用篇》;
《从手写代码到AUTOSAR工具链_BswM应用篇》;
《从手写代码到AUTOSAR工具链_工程创建与模块集成》。
表5-1: 主控芯片和工具一览表
5.1 Port模块配置
首先需要配置参与串口通信的P14.8和P14.10,重点是将P14.10的功能配置为“ATX1”。
表5-2: P14.8参数配置
5.2 Mcu模块配置
Mcu配置分为AscLin和Clock两部分。
5.2.1 ASCLIN配置
按照图5-1和图5-2所示将AscLin1配置为UART驱动。
5.2.2 时钟配置
按照图5-3和图5-4配置ASCLIN模块的时钟,本文示例配置为100MHz。
5.3 Uart模块配置
依次进行通用箱配置和UART集配置。
5.3.1 通用箱配置
下面介绍UART模块通用(General)箱的配置情况,图5-5为配置界面,表5-4为各项的配置参数和简要说明。
表5-4: UART模块通用箱参数配置
5.3.2 UART集配置
下面介绍Uart集(UartConfigSet)箱的配置情况,图5-6为其配置界面。
1.通用配置
图5-7为Uart集通用(General)箱的配置界面,表5-5为各项的配置参数和简要说明。
2.Uart通道配置
图5-8为Uart通道(UartChannel)箱的配置界面,表5-6为各项的配置参数和简要说明。
表5-6:Uart0通道参数配置
5.3.3 版本配置
下面介绍Uart模块版本(Published Information)箱的配置情况,图5-9为配置界面,表5-7为各项的配置参数和简要说明。
图5-9: Uart模块版本箱配置界面
表5-7: Uart模块版本箱参数配置
5.4 Irq模块配置
根据需要配置UART模块的中断类型和中断类别,UART的中断类型包括Tx中断、Rx中断和Err中断;中断类别分为一类中断和二类中断,两者的区别和配置方法如表5-8所列。
①配置的目的是为了打开Xxx\_Irq.c中的相应宏,如图5-10所示
图5-10: 中断服务子程序示例
②数值越大优先级越高
③与DMA配合的中断,处理源(Irq<ModuleName>TosConfig)配置为DMA;其它中断配置为相应的CPUx
④中断初始化函数的格式:Irq<ModuleName>_Init
5.4.1 MCAL中断配置
按照图5-11和图5-12配置MCAL的Irq模块,配置参数如表5-9所列,其余项使用缺省值。
图5-11: AscLin中断配置进入
图5-12: AscLin中断配置
表5-9: AscLin中断参数配置
5.4.2 RTA-OS中断配置
在RTA-OS环境下按照图5-13配置表5-10列出的中断。
表5-10: OS中断配置参数
注意:上表中的“名称”项非自行命名,须与Xxx\_Irq.c中的名称一致,否则编译无法通过。
图5-14: 中断配置名称示例
5.4.3 代码生成
需在RTA-OS中生成OS代码,再在ISOLAR-AB中进行抽取、BSW代码生成、RTE代码生成等操作。
5.5 初始化函数调用
UART模块初始化函数调用在EcuM模块中进行。
5.5.1 模块配置
在ISOLAR-AB中按照图5-15和图5-16的步骤配置表5-11中的参数。
图5-15: EcuM配置启动
图5-16: EcuM串口初始化配置
表5-11: Uart初始化参数配置
5.5.2 代码编写
在程序文件中编写如图5-17所示的宏定义。
5.6 调试代码编写
UART模块常用的API函数如表5-12所列。
表5-12: UART模块API函数功用
调试代码的功用:将接收到的25字节数据发出,图5-18为其主要代码的截图。
如果接收的数据少于25字节,只有在收全25字节后,才执行数据发送的操作;如果接收的数据多于25字节,只接收前25字节并发出。
作者:李漠尘
文章来源:汽车电子与软件
推荐阅读
更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。