简介
本文介绍如何使用 Flagchip FC7300 MCAL 点亮 LED 灯。首先以实例的方式介绍 PORT、DIO 功能的配置过程,其次再对 PORT、DIO 模块的各个选项进行释义。对于这个实例中的相关模块 (MCU、EcuC、Common、OS) 的功能介绍,请查看本网站的其他相关博文。
硬件平台:旗芯微 FC7300 Demo Board V2 开发板
软件平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.07
AUTOSAR 版本:V4.6.0
FC7300 MCAL版本:0.4.0
一、示例的MCAL 配置
1.1、配置 MCU 模块
1.1.1、 在 Module Configurations 中添加 MCU 模块,如图 1.1.1 所示,按照步骤 1→2 进行操作,先点击 1( MCU Clock Setting Config ),然后双击 2(Index 0)进行时钟配置。
▲ 图 1.1.1
1.1.2、 配置系统时钟
①、配置外部输入晶振FOSC时钟为 24 Mhz。
▲ 图 1.1.2.1
②、由下图1.2.2可知,将PLL0频率配置为300MHZ。
▲ 图 1.1.2.2
③、配置 PLL0 为系统时钟
▲ 图 1.1.2.3
④、如图 1.2.4 所示为 demo board LED 原理图,为了进行点亮 LED 灯的配置,我们需要确保 Port A 、PortD 的外设时钟配置为使能。
▲ 图 1.1.2.4
1.2、配置 PORT 模块
1.2.1 在 Module Configurations 中添加 PORT 模块,在 PORT 模块中的 PortConfig 下添加 PORT A、D。
▲ 图 1.2.1
1.2.2 双击 Index 0 进入 Port A 的 PortPin 界面下,添加 PTA14 引脚并命名为 LED3,PTA26 引脚命名为 LED1。
▲ 图 1.2.2
1.2.3 如图 1.2.2 所示,双击 Index13、Index25 进入 PTA 分别 14 、PTA26 的配置界面,将 PTA14、PTA26 分别配置为 GPIO 输出,初始状态为高,如下图 1.2.3、1.2.4 所示。
▲ 图 1.2.3
▲ 图 1.2.4
1.2.4 如图 1.2.2-1.2.4 所示,PTD31 的 IO 配置重复以上步骤即可。
1.3、配置 DIO 模块
1.3.1 在 Module Configurations 中添加 DIO 模块,在 DIO 模块中的 DioPort 下确保添加 PORTA、PORTD 2 个 DioPort。
▲ 图 1.3.1
1.3.2 如图 1.3.1 所示,双击 Index 0 进入 Dioport_A,添加 2 个 DioChannel 分别命名为 LED1、LED3,DIO Channel id 分别修改为 26、14,对应图 1.1.2.4 原理中的 PTA26、PTA14 引脚。
▲ 图 1.3.2
1.3.3 如 1.3.2 所示,PTD31 的 DIO 配置重复以上步骤即可,并设置 Dio Channel Id 为 31。
1.4、配置 ECUC 模块
在点亮 LED 灯的 MCAL 中必须有 ECUC 模块,在 Module Configurations 中添加 ECUC 模块,选择默认配置即可。
▲ 图 1.4
1.5、配置OS 模块
在点亮 LED 灯的 MCAL 中必须有 OS 模块,在 Module Configurations 中添加 OS 模块,选择默认配置即可。
▲ 图 1.5
二、示例代码解析
2.1 将 EB 配置好的工程编译并更新代码至 FCIDE 中
▲ 图 2.1
2.2 Mcal_DemoBoard_Project 工程目录 & 文件介绍
▲ 图 2.2
- _MCAL_multicore_generate _8M: EB 工具生成的配置文件
- APP: AutoSar 应用层
- MCAL: 微控制器抽象层
- MiddleWare:中间层
- Source:示例应用
2.3 _ MCAL_multicore_generate _8M ->include 文件夹下 Dio_Cfg.h
我们可以看到在 EB 配置好生成的 LED1、LED2、LED3 DioChannel Id 的宏定义
▲ 图 2.3
2.4 主函数在 source 文件夹下的 main_multicore.c 中
▲ 图 2.4
- Bsp_Mcu_Init(); MCU 初始化
- Bsp_Port_Init(); PORT初始化,将LED1、LED2、LED3对应的PORT引脚初始化为GPIO模式,初始状态为高电平,所以这个初始化程序结束之后LED被点亮。
三、烧录 & 调试
3.1 将工程编译并烧录到开发板
观察 3 颗 LED 已经点亮,(EB 配置这三个 GPIO 初始化状态为高)
▲ 图 3.1
四、MCAL PORT 模块详解
PORT 模块就是 MCU 上的 Pin 脚配置,可以配置为 DIO、ADC、PWM、CAN、ICU、SPI 等引脚复用功能。
4.1 General 配置
▲ 图 4.1
- Port Development Error Detect :PORT 模块开发错误检测使能
- Port SetPinMode Api:Pin 模式设置的 API 使能
- Port VersionInfo Api :读取 PORT 模块版本信息 API
- Port SetPinDirection Api:Pin 方向设置 API 使能
- Port Freeze Jtag Pins :将已配置为 jtag 引脚的 PORT 冻结,使其不能再被其他模式应用,防止错误配置导致无法 Debug。
- Port Multicore Support: 支持多核
4.2 Port Config 配置
4.2.1.1 Port Config Set 主要对 Port A、B、C、D、E 、F、G、H、I 引脚属性的定义
▲ 图 4.2.1.1
4.2.1.2 如图 5.2.1.1 所示,双击 Index0 进入 PORTA 配置,在这里只对 LED3(PORTA14) 进行举例说明,LED1(PORT26)、LED2(PORTD31)与 LED3 配置一样。
▲ 图 4.2.1.2
4.2.2 如图 4.2.1.2 所示,双击 Index13 进入 PortContainer_0 -> LED3(PORTA14)界面
▲ 图 4.2.2
- PortPinId: 逻辑上的 Id 值,从 1 递增
- PortPin PCRn: 指定引脚的控制寄存器(PCR)配置
- PortPin Name:对应芯片手册的 pin 引脚 ID
- PortPin Mode Changeable:是否启用在程序运行过程中更改 PortPin 的模式
- PortPin Mode: 选择 PortPin 用作哪个功能
- PortPin Pull Enable:是否启用上下拉
- PortPin Pull Select: 选择上拉或下拉
- PortPin Direction Changeable: 是否可以在程序运行过程中改变 PortPin 的方向(输入,输出)
- PortPin Direction : PortPin 的方向(输入、 输出、高阻)
- PortPin Level Value:设置 PortPin 的初始化电平状态
- PortPin Drive Strength Enable:引脚驱动能力配置
- PortPin Slew Rate Enable:引脚转换速率配置
- PortPin Open Drain Enable:引脚开漏使能
- PortPin Passive Filter Enable:是否启用引脚数字滤波
- PortPin Initial Mode: 不需要配置
4.3 PORT模块接口函数
▲ 图 4.3
- PORT_TEXT_SECTION void Port_Init(const Port_ConfigType *ConfigPointer);
- 函数对 PORT PIN 的复用模式、端口的方向进行配置
- 对 PORT PIN 端口的数字滤波器的开启、宽度、速率进行配置
- PORT_TEXT_SECTION void Port_SetPinDirection(Port_PinType Pin, Port_PinDirectionType Direction);
- PORT PIN 端口方向(输出、输入、高阻)进行配置
- PORT_TEXT_SECTION void Port_RefreshPortDirection(void);
- 重新设置 PORT PIN 的端口方向
- PORT_TEXT_SECTION void Port_GetVersionInfo(Std_VersionInfoType *VersionInfoPointer);
- 获取 PORT 模块的版本信息
- PORT_TEXT_SECTION void Port_SetPinMode(Port_PinType PinId, Port_PinModeType PinMuxMode);
- 设置 PORT PIN 端口复用模式(例如:GPIO、PORT_ALT5_FUNC_MODE 等)
五、MCAL DIO 模块详解
DIO (输入、输出)模块是对 MCU 引脚的访问进行了抽象,并且还可以对引脚进行分组,若使用 MCU 引脚进行输入输出控制,则需要先配置 PORT 模块中的该引脚为 GPIO 模式,再进行 DIO 模块配置。
5.1 General 配置
▲ 图 5.1
- Dio Development Error Detect :DIO 模块开发错误检测使能
- Dio Flip Channel Api :引脚翻转的 API 使能
- Dio Version Info Api :读取 Dio 模块版本信息 API
- Dio Masked Write Port Api :定义驱动程序函数 Dio_MaskedWritePort(),是否将在编译时包含或排除
- Dio Multicore Support:支持多核
5.2 DioPort 配置
一共分为 9 组 Index 分别对应 FC7300 的 PORT A、B、C、D、E 、F、G、H、I,在这里对 PORTA 进行举例说明,其他配置和 PORTA 一样。
▲ 图 5.2
5.3 DioPort->DioChannel 配置
如图 5.3 所示,双击 Index0 进入 DioChannel ,按照步骤 1→3 进行创建,如下图 5.3 所示
▲ 图 5.3
DioChannel Id 就是 PORT 对应的引脚 PIN 号。
5.4 DIO 模块常用接口函数
▲ 图 5.4
- DIO_TEXT_SECTION Dio_LevelType Dio_ReadChannel(const Dio_ChannelType ChannelId);
- 读取 DioChannelId 的电平状态
- DIO_TEXT_SECTION void Dio_WriteChannel(const Dio_ChannelType ChannelId, const Dio_LevelType Level)
- 设置 DioChannelId 的电平状态
- DIO_TEXT_SECTION Dio_LevelType Dio_FlipChannel(const Dio_ChannelType ChannelId)
- 翻转 DioChannelId 的电平状态
- DIO_TEXT_SECTION Dio_PortLevelType Dio_ReadPort(const Dio_PortType PortId)
- 读取 PORT 的电平状态
- DIO_TEXT_SECTION void Dio_WritePort(const Dio_PortType PortId, const Dio_PortLevelType Level);
- 设置 PORT 的电平状态
- DIO_TEXT_SECTION Dio_PortLevelType Dio_ReadChannelGroup(const Dio_ChannelGroupType *ChannelGroupIdPtr);
- 读取通道组的电平状态
- DIO_TEXT_SECTION void Dio_WriteChannelGroup(const Dio_ChannelGroupType *ChannelGroupIdPtr, const Dio_PortLevelType Level);
- 设置通道组的电平状态
- DIO_TEXT_SECTION void Dio_MaskedWritePort(Dio_PortType PortId,Dio_PortLevelType Level,Dio_PortLevelType Mask);
- 设置 PORT 中没有屏蔽的 PIN 的状态
- DIO_TEXT_SECTION void Dio_GetVersionInfo(Std_VersionInfoType *VersionInfo);
- 获取 DIO 模块的版本信息
六、总结
本文以点亮 LED 灯为示例介绍了有关PORT、DIO模块的配置,并对这两个模块的所有功能进行了解释,如果有问题,可以发送邮件 atu.sh@wpi-group.com与我们联系。
七、参考文献
(1) AUTOSAR_SWS_PortDriver.pdf
(2) AUTOSAR_SWS_DIODriver.pdf
(3) FC7300 Reference Manual V0.6.pdf
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:扎根地下
更多资讯,请扫码关注我们!