关于tresos Studio(EB)的MCAL配置之GPT
概念
GPT,全称General Purpose Timer,就是个通用定时器,取的名字奇怪了点。定时器是一定要的,要么提供给BSW去使用,要么提供给OS去使用。
配置
General
GptDeinitApi控制接口Gpt_DeInit是否启用
GptEnableDisableNotificationApi控制接口Gpt_EnableNotification和Gpt_DisableNotification是否启用。
GptTimeElapsedApi控制接口Gpt_GetTimeElapsed是否启用
GptTimeRemainingApi控制接口Gpt_GetTimeRemaining是否启用
GptTimeElapsedApi控制接口Gpt_GetTimeElapsed是否启用
GptTimeRemainingApi控制接口Gpt_GetTimeRemaining是否启用
GptVersionInfoApi控制接口Gpt_GetVersionInfo是否启用
GptWakeupFunctionalityApi控制唤醒相关功能接口接口Gpt_SetMode, Gpt_EnableWakeup,Gpt_DisableWakeup和Gpt_Cbk_CheckWakeup()是否启用。
这里介绍一下定时器唤醒机制:如果硬件支持并启用,内部硬件计时器可以作为唤醒源,如果一个通道作为唤醒源,就不能用来做其他的用途。
GptDevErrorDetect开发者错误检测是PORT_DEV_ERROR_DETECT宏定义的开关,新人可以勾选,它能帮你检查出一些开发阶段的错误。老手一般不打开,因为会影响到代码的执行效率。
GptReportWakeupSource控制唤醒源报告是否启用
GptEnableDualClockMode在模式转换时启用预分频器设置,一般用不上。
GptEnablePit64启用pit 64位功能,PIT就是Periodic Interrupt Timer周期中断定时器,PIT64就是一个大点的PIT计时器,能容纳更大的tick数据,因为芯片只有32位,所以分开高32位和低32位传回来。
GptClockReferencePoint
这里就是在GPT模块里面创建个时钟引用,本身不创建任何东西,只是把MCU模块里面配置的时钟引用过来,作为一个基准时钟,给到GptChannelConfigSet里面的定时器去用。
GptChannelConfigSet
GptChannelConfiguration里面的才是主要的配置,每个容器就是一个通用定时器。
GptChannelId自己排序的号
GptHwChannel物理通用定时器通道,可以选STM(System Timer Module系统时钟模块)/GTM(Generic Timer Module通用定时器模块)/PIT(Periodic Interrupt Timer周期中断定时器)之类的。
- STM(系统时钟模块):适用于系统级任务,如系统心跳或任务调度,通常与系统时钟直接相关。
- GTM(通用定时器模块):适合需要多种功能的场景,如PWM生成、输入捕捉和比较输出,灵活性高。
- PIT(周期中断定时器):专为生成周期性中断设计,适合需要定期执行任务的情况。
GptChannelMode定时器超时之后的行为,也就是连续计时还是一次性计时。
GptChannelTickFrequency指定定时器的频率,单位为Hz。最大不能大于下面引用的GptClockReferencePoint引用的MCU时钟,下面称为“引用的MCU时钟”。
对于STM,引用的MCU时钟除以定时器频率小于等于256。
对于RTC,引用的MCU时钟除以定时器频率只能是32或512或16384。
其他通道改这个配置值是不起作用的。
GptFreezeEnable勾选之后不能在代码运行的时候修改硬件通道。
GptEnableWakeup使能通道唤醒功能
GptNotification通用定时器的回调函数,这个函数要自己实现,动态代码只会生成个定义,不会实现出来。
GptChannelClkSrcRef选择GptClockReferencePoint里面的引用,这个引用后面会再引用到MCU的时钟源。具体GPT的时钟基础就是引用的MCU频率,在Gpt_StartTimer接口里面设置超时时间,到达超时时间就会调用回调函数。
GptWakeupSourceRef唤醒源,从ECU状态管理器里面获取。
GptDisableEcumWakeupSourceNotification通过调用EcuM_CheckWakeup接口启用/禁用EcuM通知
静态代码
Gpt_CheckWakeup检查支持唤醒的GPT通道是否是唤醒事件的源,并调用ECU状态管理器服务EcuM_SetWakeupEvent,用于有效的GPT通道唤醒事件。在调用Gpt_Cbk_CheckWakeup之前,需要初始化驱动程序。
Gpt_DeInit逆初始化接口,根据硬件通道是STM/PIT/GTM/PIT1类型来操作对应的寄存器。譬如硬件通道是STM类型的,就操作STM_CR寄存器失能定时器、分频数设置为0,操作STM_CCR寄存器失能STM通道里面跟定时器相关的配置,操作STM_CMP寄存器将比较器里面的值清零,操作STM_CIR寄存器清除中断标志位。最后,无论是什么类型的硬件通道,都会把通道状态进行重置,模式设置为普通,回调函数指针清空。
Gpt_DisableWakeup禁用单个GPT通道的唤醒中断调用。实际上就是调用Gpt_LLD_DisableWakeup接口,根据硬件通道类型去失能对应通道的中断,入参是物理通道ID,需要在动态代码里面复制。
Gpt_EnableNotification开启单个GPT通道的唤醒中断调用,操作Gpt_DisableWakeup相反。
Gpt_GetTimeElapsed获取从开始计时或重新开始计时到现在的tick,实际上是调用Gpt_LLD_GetTimeElapsed接口获取当前tick返回。
Gpt_GetTimeRemaining获取现在到超时之间的tick,实际上是调用Gpt_LLD_GetTimeRemaining接口获取当前tick和超时tick进行相减后返回。
Gpt_GetVersionInfo获取版本信息,需要传入一个Std_VersionInfoType类型的结构体指针,接口会把版本信息赋值到传入的结构体里面。
Gpt_Init初始化的时候需要调用,入参是Gpt_ConfigType类型的结构体指针,接口会把入参的结构体或者Gpt_InitConfigPC结构体里面的内容赋值给全局结构体Gpt_Cfg_Ptr,这个结构体会在Gpt_LLD_SetSleepMode等GPT相关的操作函数里面使用到。
Gpt_SetMode设置GPT的模式,只有GPT_MODE_NORMAL和GPT_MODE_SLEEP可以选。如果是GPT_MODE_NORMAL,调用Gpt_LLD_SetNormalMode接口,有回调函数就使能回调函数,使能定时器。如果是GPT_MODE_SLEEP,调用Gpt_LLD_SetSleepMode,停止定时器并失能,有回调函数失能回调函数。并且在执行过程中调用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保护GPT的执行。
Gpt_StartTimer启动定时器,入参为GPT通道和超时值,单位为tick。先调用Gpt_LLD_CheckStartTimeoutValue检查超时值是否合理,再调用Gpt_LLD_StartTimer开始计时。并且在执行过程中调用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保护GPT的执行。
Gpt_StopTimer停止定时器,调用Gpt_LLD_StopTimer暂停计时。并且在执行过程中调用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保护GPT的执行。
Gpt_DisableNotification失能定时器函数回调机制。
Gpt_DisableNotification_Pit64失能Pit64的回调机制,其实就是清除PIT1_TCTRL寄存器。并且在执行过程中调用Gpt_Schm_ProtectResource和Gpt_Schm_UnprotectResource保护GPT的执行。
介绍到这里,需要注意一件事情,就是启动定时器之前,如果有回调函数,就要先使能回调机制。暂停定时器的时候,如果有回调函数,就要失能回调机制,放在暂停定时器的前还是后都可以。
Gpt_EnableNotification_Pit64使能Pit64的回调机制
Gpt_EnableWakeup_Pit64使能PIT64的唤醒功能
Gpt_GetTimeElapsed_Pit64获取PIT64从开始计时或重新开始计时到现在的tick
Gpt_GetTimeRemaining_Pit64获取PIT64计时器离超时还有多久的tick
Gpt_StartTimer_Pit64启动PIT64计时器
Gpt_StopTimer_Pit64暂停PIT64计时器
动态代码
GPT_GTM_TOMx_CH_y_ISR_USED,其中x和y都是可变的数字,当你选择的GPT通道为GTM的,就会出现这类定义,这类定义会将动态代码里面的ISR(Gpt_TOM_x_CHy_CHz_ISR);接口编译进来,其中xyz都是可变数字。其实就是开启一个TOM的中断,并且把该接口实现,该接口本质上就是调用Gpt_Gtm_LLD_ProcessInterrupt接口执行产生中断时候的动作,譬如重载、调用回调函数之类的。
其他的GTM和STM、PIT也类似。
Gpt_InitChannelPC_1数组里面有每一个GPT的初始配置信息,用来给Gpt_Init初始化的。
相关文章:
关于tresos Studio(EB)的MCAL配置之GPT
概念 GPT,全称General Purpose Timer,就是个通用定时器,取的名字奇怪了点。定时器是一定要的,要么提供给BSW去使用,要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…...
大学至今的反思与总结
现在是2025年的3月5日,我大三下学期。 自大学伊始,我便以考研作为自己的目标,有时还会做自己考研上岸头部985,211,offer如潮水般涌来的美梦。 但是我却忽略了一点,即便我早早下定了决心去考研,但并没有早…...
我们来学nginx -- 优化下游响应速度
优化下游响应速度 题记启用 Gzip 压缩优化缓冲区设置设置超时时间 题记 专家给出的配置文件真是…,信息量有点大啊! nginx:我只想作为一个简单的代理专家爸爸:都是为了你好! 这样,先从有关响应速度的角度&…...
国内外优秀AI外呼产品推荐
在数字化转型浪潮中,AI外呼系统凭借其高效率、低成本、精准交互的特点,成为企业客户触达与服务的核心工具。本文基于行业实践与技术测评,推荐国内外表现突出的AI外呼产品,重点解析国内标杆企业云蝠智能,并对比其他代表…...
观察者模式的C++实现示例
核心思想 观察者模式是一种行为型设计模式,定义了对象之间的一对多依赖关系。当一个对象(称为Subject,主题)的状态发生改变时,所有依赖于它的对象(称为Observer,观察者)都会自动收到…...
爬虫(持续更新ing)
爬虫(持续更新ing) # 网络请求 # url统一资源定位符(如:https://www.baidu.com) # 请求过程:客户端的web浏览器向服务器发起请求 # 请求又分为四部分:请求网址,请求方法(…...
AD学习-最小系统板,双层
第一章 简单电阻容模型的创建 捕捉栅格在摆放器件时,一般设置成 10mil。移动器件时一般设置成100mil。 比如绘制电容的原理图库,直接就是两根线条竖着成电容, 按Tab键进行颜色变更,按shift键拖动会复制一个出来。 …...
自动驾驶---不依赖地图的大模型轨迹预测
1 前言 早期传统自动驾驶方案通常依赖高精地图(HD Map)提供道路结构、车道线、交通规则等信息,可参考博客《自动驾驶---方案从有图迈进无图》,本质上还是存在问题: 数据依赖性高:地图构建成本昂贵…...
【五.LangChain技术与应用】【8.LangChain提示词模板基础:从入门到精通】
早上八点,你端着咖啡打开IDE,老板刚甩来需求:“做个能自动生成产品描述的AI工具”。你自信满满地打开ChatGPT的API文档,结果半小时后对着满屏的"输出结果不稳定"、"格式总出错"抓耳挠腮——这时候你真需要好好认识下LangChain里的提示词模板了。 一、…...
【AGI】智谱开源2025:一场AI技术民主化的革命正在到来
智谱开源2025:一场AI技术民主化的革命正在到来 引言:开源,一场技术平权的革命一、CogView4:中文AI生成的里程碑1. 破解汉字生成的“AI魔咒”2. 开源协议与生态赋能 二、AutoGLM:人机交互的范式跃迁1. 自然语言驱动的跨…...
Markdown HTML 图像语法
插入图片 Markdown 一般来说,直接复制粘贴过来就行了,部分网页/应用可以拖拽,没人会真敲图片的链接吧…… 示例图片: 总架构师,15年工作经验,精通Java编…...
国产化替换案例:CACTER邮件网关为Groupwise系统加固邮件安全防线
电子邮件作为企业信息流转的命脉,承载着商业机密与客户数据。然而,网络攻击手段日益复杂,钓鱼邮件等威胁正快速侵蚀企业安全防线。据《2024年第四季度企业邮箱安全性研究报告》显示,2024年Q4企业邮箱用户遭遇的钓鱼邮件数量激增至…...
Element UI-Select选择器结合树形控件终极版
Element UI Select选择器控件结合树形控件实现单选和多选,并且通过v-model的方式实现节点的双向绑定,封装成vue组件,文件名为electricity-meter-tree.vue,其代码如下: <template><div><el-select:valu…...
《底层逻辑》总结书摘
《底层逻辑》由张羽所著,聚焦于职场与个人发展,深入阐述了定位、结果、学习等十大底层逻辑,旨在帮助读者掌握思考和解决问题的有效方法,提升职场竞争力与个人成就。 核心观点:思维和行动决定命运,格局与价值…...
【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信(未成功版) 上次说基于UDP的打洞程序改了五版一直没有成功,要写一下问题所在,但是我后续又查询了一些资料,成功实现了,这次先写一下未成功的…...
【微信小程序】每日心情笔记
个人团队的比赛项目,仅供学习交流使用 一、项目基本介绍 1. 项目简介 一款基于微信小程序的轻量化笔记工具,旨在帮助用户通过记录每日心情和事件,更好地管理情绪和生活。用户可以根据日期和心情分类(如开心、平静、难过等&#…...
PMP项目管理—沟通管理篇—3.监督沟通
文章目录 基本信息4W1HITTO输入工具与技术输出 工作绩效信息和变更请求 基本信息 4W1H what: 确保满足项目及其相关方的信息需求的过程。why: 通过监督沟通过程,来确定规划的沟通工作和沟通活动是否如预期,提高或保持了相关方对项目可交付成果与预计结…...
在Linux中开发OpenGL——检查开发环境对OpenGL ES的支持
由于移动端GPU规模有限,厂商并没有实现完整的OpenGL特性,而是实现了它的子集——OpenGL ES。因此如果需要开发的程序要支持移动端平台,最好使用OpenGL ES开发。 1、 下载支持库、OpenGL ES Demo 1.1、下载PowerVRSDK支持库作为准备ÿ…...
低空经济-飞行数据平台 搭建可行方案
搭建一个飞行数据平台是低空经济中至关重要的一环,它能够实现对飞行器的实时监控、数据分析、路径优化以及安全管理。以下是搭建飞行数据平台的详细步骤和技术方案: 一、平台的核心功能 实时监控: 实时获取飞行器的位置、速度、高度、电池状态等数据。提供可视化界面,展示飞…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
