当前位置:   article > 正文

GPT模块

gpt模块

一、GPT模块简介

1.1 术语解释

GPT模块位于微控制器抽象层(MCAL),负责初始化并控制MCU内部通用定时器(General Purpose Timer)外设。

1.2 GPT模块提供的服务

  • 开启或关闭硬件定时器
  • 获取定时器值(当前计数值、剩余计数值)
  • 控制定时器触发中断通知(若硬件支持)
  • 控制定时器触发唤醒中断(若硬件支持)

1.3 模块细节

  1. 定时器计数时间取决于两方面
    • Tick值,此值由GPT模块控制,是定时器的向上计数上限或向下计数下限
    • Tick间隔,Tick间隔由GPT模块和MCU模块共同控制,其中在GPT模块中对定时器通道的时钟源进行选择,MCU模块则可以配置时钟源的时钟频率。
  2. 并非所有定时器硬件都必须被GPT模块控制,一些定时器外设可能被AUTOSAR操作系统控制或被复杂驱动控制,被GPT模块控制的定时器通道的数量取决于硬件,MCAL软件代码实现和系统配置。
  3. GPT模块除了可以配置单个定时器通道的属性外,还定义了一些自由运行的计数器 —— 预定义定时器(GPT Predef Timers)。这些定时器被预定义了Tick值和Tick间隔,即定时的物理时间。预定义定时器由Time Service模块使用。
  4. GPT驱动仅用于产生时基,定时器外设的一些更高级的功能由MCAL的其他模块控制。
    eg:
    • PWM驱动(脉宽调制 pulse width modulation)
    • ICU驱动(输入捕捉 input capture unit)
    • OCU驱动(输出比较 output compare unit)

二、GPT模块API

2.1 AUTOSAR规定API列表

API功能
Gpt_GetVersionInfo获取GPT模块版本信息
Gpt_Init初始化GPT模块
Gpt_DeInitGPT模块反初始化
Gpt_GetTimeElapsed获取当前计数值
Gpt_GetTimeRemaining获取剩余计数值
Gpt_StartTimer启动定时器通道开始计时
Gpt_StopTimer`停止定时器通道计时
Gpt_EnableNotification使能定时器通道中断通知
Gpt_DisableNotification禁用定时器通道中断通知
Gpt_SetMode设置GPT模块模式
Gpt_DisableWakeup禁用定时器通道的唤醒中断
Gpt_EnableWakeup使能定时器通道的唤醒中断
Gpt_CheckWakeup检查唤醒源
Gpt_GetPredefTimerValue获取预定义定时器当前值

2.2 API详细解读

2.2.1 Gpt_GetVersionInfo

2.2.1.1 函数基本信息表
函数声明void Gpt_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr)
描述读取模块版本信息
函数id0x00
同步\异步同步
是否可重入可重入
输入参数None
输出参数VersionInfoPtr,指向存储GPT模块版本信息的指针
返回值None
2.2.1.2 函数细节
  • 若使能开发错误检测,且当函数传入指针为空指针时,会调用DET模块函数Det_ReportError上报错误GPT_E_PARAM_POINTER

2.2.2 Gpt_Init

2.2.2.1 函数基本信息表
函数声明void Gpt_Init(const Gpt_ConfigType* ConfigPtr)
描述初始化GPT模块
函数id0x01
同步\异步同步
是否可重入不可重入
输入参数ConfigPtr,指向初始化配置结构体的指针
输出参数None
返回值None
2.2.2.2 函数细节
  • 此函数可根据ConfigPtr指向的配置集对定时器外设进行初始化
  • 此函数会禁用所有GPT模块控制的中断通知
  • 此函数会禁用所有GPT模块控制的唤醒中断
  • 此函数只初始化可配置资源,对配置文件中不可配置的资源不进行初始化
  • 若使能开发错误检测(STD_ON == GPT_DEV_ERROR_DETECT),且调用此函数时GPT模块不处于未初始化状态,会调用DET模块函数Det_ReportError上报错误GPT_E_ALREADY_INITIALIZED
  • 此函数将GPT模块运行模式置为normal mode,效果等同于调用函数Gpt_SetMode,并传参为GPT_MODE_NORMAL
  • 若想调用此函数对已完成初始化的GPT模块重新进行初始化,应先调用函数Gpt_DeInit进行反初始化
  • 此函数将开启所有已使能的预定义定时器,并使之从0开始计时

2.2.3 Gpt_DeInit

2.2.3.1 函数基本信息表
函数声明void Gpt_DeInit(void)
描述GPT模块反初始化
函数id0x02
同步\异步同步
是否可重入不可重入
输入参数None
输出参数None
返回值None
2.2.3.2 函数细节
  • 此函数对GPT模块控制所有定时器外设进行反初始化,使之恢复到上电复位状态,不可写的寄存器除外
  • 此函数会禁用所有GPT模块控制的中断通知和唤醒中断
  • 此函数只对由静态配置分配的外设起作用
  • 如果配置方式选择PB,且调用过Gpt_Init函数,此函数将会对Gpt_Init函数初始化的外设进行反初始化
  • 此函数受宏GptDeInitApi控制,仅当STD_ON == GptDeInitApi时此函数可用
  • 此函数将GPT模块运行状态置为uninitialized未初始化状态
  • 当调用此函数时,仍存在定时器通道处于running运行状态,此函数将调用DET模块函数Det_ReportRuntimeError上报运行错误GPT_E_BUSY,此种错误属于运行错误,不需要使能开发错误检测
  • 若使能开发错误检测,且调用此函数时GPT模块处于未初始化状态,会调用DET模块函数Det_ReportError上报错误GPT_E_UNINIT
  • 此函数将使所有已使能的预定义定时器停止计数

2.2.4 Gpt_GetTimeElapsed

2.2.4.1 函数基本信息表
函数声明Gpt_ValueType Gpt_GetTimeElapsed(Gpt_ChannelType Channel)
描述获取指定定时器通道当前计数值
函数id0x03
同步\异步同步
是否可重入可重入
输入参数Channel,要查询的GPT通道(即定时器通道的逻辑通道号)
输出参数None
返回值Gpt_ValueType,定时器通道的当前计数值(即以Tick为单位的计时时间)
2.2.4.2 函数细节
  • 函数返回值定时器通道的当前计数值是相对于该通道最近一次开始计时事件的当前值,无论该通道计时模式为one-shot mode单次计时模式,还是continuous mode连续计时模式(一次计时到时后,计数寄存器立即清零开启下一次计时)此规则均适用。
  • 当要查询的定时器通到处于initialized仅初始化并未开始计时状态时,函数返回值为0
  • 此函数是可重入的,并且完全可重入,即使传入参数为同一个通道
  • 此函数受宏GptTimeElapsedApi控制,仅当STD_ON == GptTimeElapsedApi时此函数可用
  • 若使能开发错误检测,且调用此函数时GPT模块处于未初始化状态,会调用DET模块函数Det_ReportError上报错误GPT_E_UNINIT
  • 若使能开发错误检测,且传入参数GPT通道无效时,会调用DET模块函数Det_ReportError上报错误GPT_E_PARAM_CHANNEL
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/382648
推荐阅读
相关标签
  

闽ICP备14008679号