超详细教程 | Hands-On 基于 Flagchip FC7300 MCAL-点亮 LED 灯

简介

        本文介绍如何使用 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   作者:扎根地下

更多资讯,请扫码关注我们!

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值