超详细教程 | Hands-On 基于 Flagchip FC4150 MCAL-使用 GPT 模块定时喂狗

简介

        本文将详细介绍如何使用 EB 工具配置 Flagchip FC4150 MCAL 使用 GPT 模块定时喂狗,并重点强调了配置 GPT、WDG 模块的过程以及对 GPT、WDG 模块的详细解释,关于 mcu、port 、dio、icu、adc 、pwm 模块可参考之前发布的博文。本次示例演示将会使用 FTU4_CH0 超时时间去做 WDG 模块的硬件定时喂狗,FTU0_CH1 来做周期性软件喂狗。

硬件平台:旗芯微 FC4150 DEMO BOARD V2 开发板

软件平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.04

MCAL: V1.1.0 & V1.1.1

一 、MCAL 配置

1.1 配置 MCU 模块

        根据本次实例的内容,我们需要在 MCU 模块-> PCC 下添加 FTU1、FTU4 的外设时钟,时钟选择 FOSCDIVH。另外需要在 MCU 模块-> McuClockReferencePoint下添加 FTU1、FTU4、SYS_CORE 、FOSC 对外的参考时钟,来用作 GPT、WDG 模块的输入参考时钟。如图 1.1.1、1.1.2 所示。

▲ 图 1.1.1

▲ 图 1.1.2

1.2配置 WDG 模块

        1.2.1 在 Module Configurations 中添加 WDG 模块,在 WDG-> General 下配置超时时间的初始值为 0.03 秒、最大值为 0.1 秒

▲ 图 1.2.1

        1.2.2 在 WDG->  WdgSettingsConfig下添加 WdgSettingsConfig_0,选择硬件看门狗 0、看门狗模式为慢速、关联的 Gpt 通道为 GptChannel_WDG (该项在 GPT ->GptChannelConfiguration 配置完成后进行配置)、时钟参考点选择 McuClockReferencePoint_Fosc、填入看门狗时钟频率、选择看门狗类型为超时复位、看门狗时钟选择 FOSC_Clock、看门狗溢出时间 0.1 秒、使能 Wdg 时钟分频(固定 256 分频)。如图 1.2.2 所示

▲ 图 1.2.2

 1.3 配置 GPT 模块

        1.3.1在 Module Configurations 中添加 GPT模块,在 GPT->  GptClockReferencePoint下选择 系统时钟参考点。另新建两个 GPT 时钟参考点,如图 1.3.1 所示

▲ 图 1.3.1

        1.3.2 在 GPT-> GptChannelConfiguration 添加两个 GPT Channel


▲ 图 1.3.2

        1.3.3 双击 Index 0 进入GPT Channel 配置界面,将名称命名为 GptChannel_WDG、GPT 通道选择为 FTU4_CH0、GPT 通道配置为连续模式、时钟参考点选择GptClockReferencePoint_Ftu4、填入 GPT 通道时钟频率、填入 GPT 通道最大计数值、使能 FTU4 DEBUG、ISR 模式、填入 FTU4 中断回调函数命名为 Wdg_Cbk_GptNotification0 、将 FTU4 设置为时钟 32 分频,时钟输入选择为 PCC。关于 FTU4 时钟分频说明: 在 WDG 模块中我们配置了看门狗硬件溢出时间 0.1 秒(MCAL WDG API 初始化时会将 GPT 触发中断的时间设置为看门狗硬件溢出时间的一半(0.05 秒)),FTU4 的时钟输入源为 24Mhz 、分频 32 后计算得出 0.75MHz、FTU4 最大计数值为 65535 ,计算得出 FTU4 计数溢出中断时间为 0.08738 秒,在看门狗的硬件溢出时间内进行了喂狗操作,不会使系统硬件复位。

▲ 图 1.3.3

        1.3.4 双击 Index 1 进入 GPT Channel 配置界面,将名称命名为 GptChannel_WDGCondition、GPT 通道选择为 FTU1_CH0、GPT 通道配置为连续模式、时钟参考点选择GptClockReferencePoint_Ftu1、填入 GPT 通道时钟频率、填入 GPT 通道最大计数值、使能 FTU1 ISR 模式、填入 FTU1 中断回调函数命名为 Gpt_WdgCondition_Notification 、将 FTU1 设置为时钟 32 分频,时钟输入选择为 PCC。关于 FTU1 时钟分频说明: FTU1 应用于每次进入中断设置软件超时时间,与 FTU4 的时钟频率相同更加容易方便计算。

▲ 图 1.3.4

二、示例代码解析

2.1 工程导入 & Main 函数

2.1.1将 EB 配置好的工程编译并更新代码至 FCIDE 中

2.1.2 在工程下中找到 Main 函数,将 BSP_FCUART_Init、Bsp_Gpt_Init 、Bsp_Wdg_Init 函数取消屏蔽

▲ 图 2.1.2

2.2 GPT 相关函数

        2.2.1 在 Gpt_PBcfg.c 中我们可以看到 FTU0、FTU4外设、FTUx_CH0 在EB 工具配置好的属性、回调函数名称

▲ 图 2.2.1.1(GPT通道配置属性)

▲ 图 2.2.2(GPT通道中断回调函数)

2.2.2 在 Gpt_Cfg.h 中我们可以看到 GPT 通道配置的名称宏定义,在调用 MCAL 函数会使用到

▲ 图 2.2.1.2 (GPT通道配置属性)

        2.2.3 在 Bsp_Gpt.c 中, 这是 demo 示例对 MCAL API 的调用,其中 FTU4_IRQHandler 用于硬件喂狗,FTU1_IRQHandler 用于软件超时时间设置

▲ 图 2.2.3

2.3 WDG 相关函数

        2.3.1 在 Wdg_instance0_PBcfg.c 中我们可以看到 WDG0 外设在 EB 工具配置好的属性,工作模式、时钟、关联的 GPT 通道名称

▲ 图 2.3.1.1 (WDG0 配置属性)

▲ 图 2.3.1.1 (WDG0 慢速模式下的配置)

        2.3.2 在 Wdg_HLD.c 中, 找到  Wdg_Cbk_GptNotification0 这是我们在 GPT FTU4_CH0 通道配置中的中断回调函数实体,用于进行硬件看门狗喂狗。

▲ 图 2.3.2

2.3.3在Bsp_Wdg.c 中, 这是 demo 示例对 MCAL API 的调用

 ▲ 图 2.3.3

2.4 软件流程框架

        2.4.1 软件流程示意

        配置项:

          ①、硬件喂狗时间(硬件看门狗)

          ②、软件喂狗时间(软件看门狗)

          ③、软件超时时间(软件看门狗的超时时间)

         注意项:(软件超时时间>定时中断进行喂狗时间)&& (定时中断进行喂狗时间>定时中断时间)

▲ 图 2.4.1

        2.4.2 Wdg_Cbk_GptNotification0 回调函数中 Wdg_HLD_ChannelTrigger 函数分析

        每一次 GPT FTU4_CH0 中断的喂狗中,都会对 s_WdgTimeout 进行操作,当 s_WdgTimeout 时间小于 s_WdgGptPeriod 时间时,将会停止 GPT 相对应的通道计时功能(停止喂狗、FTU4_CH0 中断),否则进行 s_WdgTimeout - s_WdgGptPeriod 时间,进行喂狗。(s_WdgTimeout 软件超时时间、s_WdgGptPeriod:GPT 周期触发时间)

▲ 图 2.4.2

        2.4.3 Gpt_WdgCondition_Notification 回调函数中 Wdg_Instance0_SetTriggerCondition 函数分析

        每一次 GPT FTU1_CH0 中断中,进行软件超时时间的设定,当 uElapsedTime 大于 s_WdgTimeout 时,将会停止 GPT 相对应的通道计时功能(停止喂狗、FTU4_CH0 中断),否则进行 s_WdgTimeout 的重新赋值。(s_WdgTimeout 剩余软件超时时间、uElapsedTime:上一次 FTU4_CH0 中断发生到此刻的时间间隔)

▲ 图 2.4.3

三、烧录 & 调试

 3.1 将工程编译并烧录到开发板

         通过串口上位机软件,波特率设置为 115200 ,打开串口时间戳,我们可以看到串口打印的信息 :FTU1 的软件喂狗中断时间为 20 ms,FTU4 的硬件喂狗中断时间为 50 ms。

▲ 图 3.1

四、MCAL GPT 模块详解

FC4150 GPT 模块用于定时器触发指定的功能

4.1 General 配置

▲ 图 4.1

       4.1.1 GptConfigurationOfOptApiServices

  • GptDeInitApi:复位 GPT 配置
  • GptEnableDisableNotificationApi:启用通道中断通知
  • GptTimeElapsedApi :获取该通道已经过的时间
  • GptTimeRemainingApi :获取该通道到达设定目标之前剩下的时间
  • GptVersionInfoApi :获取 GPT 模块版本信息
  • GptWakeupFunctionalityApi :使能通道的唤醒功能
  • GptChangeNextTimeoutValueApi :更改正在运行的通道计数器比较值的设置

       4.1.2 GptDriverConfiguration

  • GptDevErrorDetect  :打开或关闭开发错误检测和通知
  • GptPredefTimer100us32bitEnable :启用 GPT 预定义定时器 100us 32bit
  • GptPredefTimer1usEnablingGrade :指定使能 1us 时钟周期的 GPT 预定义定时器、可选 GPT_PREDEF_TIMER_1US_16BIT_ENABLED、GPT_PREDEF_TIMER_1US_16_24BIT_ENABLED、GPT_PREDEF_TIMER_1US_16_24_32BIT_ENABLED
  • GptReportWakeupSource :使能唤醒源通知
  • GPT Register Locking Mode :GPT 寄存器加锁机制,不需要配置
  • GPT Enable User Mode Support :不需要配置
  • Gpt Standby Wakeup Support  :专门休眠唤醒(需要用 A0NTIMER ) 配合 ECUM,与 GptChannelConfiguration -> General ->GptWakeupConfiguration 相同配合勾选

4.2 GptChannelConfigSet 配置

        4.2.1 在 GptChannelConfiguration 下一共可以添加 58 个 GPT Channel ,由硬件决定

▲ 图 4.2

4.2.2 双击 Index 进入 GptChannelConfiguration -> General 配置


▲ 图 4.2.2

  • GptChannelId: GPT 通道逻辑 ID 号
  • GptHwChannel :选择所使用的硬件 GPT 通道
  • GptChannelMode :通道计数模式。可选单次和连续触发
  • GptChannelTickFrequency:GPT 通道的时钟频率
  • GptChannelClkSrcRef:GPT 通道的时钟参考点
  • GptChannelTickValueMax:GPT 通道最大计数值(由硬件决定)
  • GptDbgModeEnable :使能后,在 DEBGU 打断点后 CNT 继续计数
  • GptIsrEnable :中断使能
  • GptEnableWakeup :使能唤醒服务
  • GptNotification :填入中断回调函数名称
  • GptFtuPrescaler :GPT 外设的时钟分频选择
  • GptFtuChannelClkSrc: GPT 通道的时钟源选择

4.3 GptClockReferencePoint 配置

       系统时钟参考点,依赖于 MCU 模块 McuClockReferencePoint 中的定义

▲ 图 4.3

  • System clock reference point: 系统时钟的参考点
  • GptClockReferencePoint:GPT 所选外设时钟的参考点

4.4 PublishedInformation

 GPT 模块版本信息

4.5 GPT 模块常用函数

  • Gpt_Init:初始化GPT 模块
  • Gpt_DeInit:将 GPT模块复位至默认状态
  • Gpt_GetTimeElapsed:获取该通道已经过的时间
  • Gpt_GetTimeRemaining:获取该通道到达设定目标之前剩下的时间
  • Gpt_StartTimer:开始 GPT通道计时
  • Gpt_StopTimer:停止GPT通道计时
  • Gpt_EnableNotification:使能 GPT 通道事件通知
  • Gpt_DisableNotification:失能GPT通道事件通知
  • Gpt_GetVersionInfo: 获取 GPT模块版本信息
  • Gpt_SetMode:设置 GPT 模块的运行模式
  • Gpt_DisableWakeup:失能 GPT 通道唤醒
  • Gpt_EnableWakeup:使能 GPT 通道唤醒
  • Gpt_CheckWakeup:检查 GPT 通道是否为唤醒源
  • Gpt_ChangeNextTimeoutValue:更改正在运行的通道计数器比较值的设置
  • Gpt_GetPredefTimerValue:获取预定义定时器值

五、MCAL WDG 模块详解

FC4150 WDG 模块有两个看门狗模块

5.1 General 配置  

▲ 图 5.1

  • Development Error Detection:打开或关闭开发错误检测和通知
  • Wdg Disable Allowed:允许启用/禁用看门狗驱动程序
  • Wdg Instance0 Index:看门狗 0 模块
  • Wdg Instance1 Index:看门狗 1 模块
  • Wdg Initial Timeou:初始的看门狗软件超时时间,看门狗初始化时设置的时间
  • Wdg Max Timeout:最大可设置的看门狗软件超时时间,设置软件超时时间时,会与 Wdg Max Timeout 进行比较,进行合规检查
  • Wdg Run Area:看门狗驱动程序的执行区域,ROM 或 RAM
  • Wdg Trigger Location:不需要配置
  • Provide Version Info AP:获取看门狗模块的版本信息
  • Wdg Trigger Mode:看门狗触发方式,不需要配置

5.2 WdgSettingsConfig 配置

        5.2.1 在 WdgSettingsConfig 下一共可以添加 2 个 WDG  ,由硬件决定

▲ 图 5.2.1

        5.2.2 双击 Index 进入 WdgSettingsConfig-> General 配置


▲ 图 5.2.2

  • Wdg Hardware Instance:看门狗硬件外设选择
  • Wdg Default Mode:看门狗默认模式配置,关、快速、慢速
  • Enable Wdg interrupt:是否使能看门狗中断
  • Wdg instance ISR CallBack Notification:看门狗硬件中断通知回调函数
  • Wdg GPT Trigger Channel:选择关联的 Gpt 通道,WDG 通过 GPT 来实现启/停喂狗
  • Wdg Clock Value:看门狗时钟
  • WdgClkSrcRef:看门狗时钟参考点
  • Wdg Runs In Stop mode:当 MCU 处于 STOP 模式时,启用/停止看门狗继续计数
  • Wdg Runs In Debug Mode:当 MCU 处于 DEBUG 模式时,启用/停止看门狗继续计数
  • Wdg Runs In Wait Mode:当 MCU 处于 WAIT 模式时,启用/停止看门狗继续计数
  • Wdg Set Reset Delay:当看门狗发生中断时,需配置延迟复位时间,可选 WDG_RST_DLY_128、WDG_RST_DLY_256、WDG_RST_DLY_512、WDG_RST_DLY_1024 总线时钟。注意:仅在 FC4150 1M Flash 芯片上可用
  • Wdg Operation Mode:看门狗计数溢出时处理模式、超时复位、超时中断
  • Wdg Clock Selection:看门狗时钟源选择,可选 Bus_Clock、AON_Clock、FOSC_Clock、FOSC_Clock
  • Wdg Timeout Period:看门狗溢出时间设置,单位:秒 ,注意:不要超过最大硬件时钟周期
  • Wdg Window Mode:启用窗口看门狗模式
  • Wdg Window Period:窗口看门狗溢出时间设置,单位:秒
  • Wdg Prescaler Enabled :启用看门狗的时钟分频,启用后则 256 分频
  • Wdg Allow Updates:是否允许软件重新配置看门狗而不进行复位
  • Wdg Test Mode:启用看门狗自检模式,可选 TestModeDisabled、TestModeEnabled、TestModeLowByte、TestModeHighByte

5.3 PublishedInformation

 WDG 模块版本信息

5.4 WDG 模块常用函数

  • Wdg_Instancex_Init:初始化看门狗模块
  • Wdg_Instancex_SetMode:设置看门狗模式
  • Wdg_Instancex_SetTriggerCondition:看门狗软件超时时间设置
  • Wdg_Instancex_GetVersionInfo:获取 WDG 模块版本信息

六、总结

        本文以使用 GPT 模块定时喂狗为示例,详细介绍了如何配置和使用 GPT(定时器)、WDG(看门狗)模块,通过本文的讲解,读者可以了解到如何正确配置 GPT、WDG 模块,以实现定时器触发指定的功能与与看门狗模块的使用。

七、参考文献

(1)  AUTOSAR_SWS_WatchdogDriver.pdf

(2)  AUTOSAR_SWS_GPTDriver.pdf

(3)  FC4150 Reference Manual V3.0.pdf

欢迎在博文下方留言评论,我们会及时回复您的问题。

如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com   作者:Memory

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值