简介
本文将详细介绍如何使用 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
更多资讯,请扫码关注我们!