# AUTOSAR GPT 驱动规范
> **Specification of GPT Driver**
> AUTOSAR CP Release 4.4.0
## 元信息
- **文档类别**:SWS(Software Specification,软件规范)
- **模块名称**:GPT Driver(General Purpose Timer Driver,通用定时器驱动)
- **关联层级**:MCAL(Microcontroller Abstraction Layer,微控制器抽象层)
- **AUTOSAR 版本**:Classic Platform 4.4.0
- **文档标识号**:030
## 文档标识
| 项 | 值 |
| --- | --- |
| Document Title | Specification of GPT Driver |
| Document Owner | AUTOSAR |
| Document Responsibility | AUTOSAR |
| Document Identification No | 030 |
| Document Status | Final |
| Part of AUTOSAR Standard | Classic Platform |
| Part of Standard Release | 4.4.0 |
## 文档变更历史
| 日期 | 版本 | 变更方 | 变更说明 |
| --- | --- | --- | --- |
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 集成 MCAL Multicore Distribution 概念(Draft);头文件清理 |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 确保默认错误跟踪器与开发错误之间的一致性;增加对运行时错误的支持,并变更 GPT_E_MODE 与 GPT_E_BUSY 错误的类型 |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 重做 Variant 章节;删除冗余需求 SWS_Gpt_00342;删除对 Dem 的所有引用 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | Det 重命名与扩展集成;调试支持标记为废弃;删除追溯中重复的需求 |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | Init 指针检查与 BSW_General 协调;删除冗余的 SWS_GPT_00294、SWS_GPT_00340;添加新错误代码 GPT_E_INIT_FAILED |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性修订 |
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 添加 GPT Predef Timer 功能;Gpt_GetTimeElapsed 和 Gpt_GetTimeRemaining 现在完全可重入;MemMap.h 重命名为 Gpt_MemMap.h |
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 在 ECUC_Gpt_00331 中添加范围;"module short name" 替换为 "module abbreviation";由于新的可追溯性机制,修订第 6 章并添加第 13 章 |
| 2011-04-15 | 4.0.2 | AUTOSAR Administration | 删除 GPT208、GPT376 和 GPT378;ECUC_Gpt_00312 中多重性变更(更新 10.2.6 章节);重新表述 SWS_Gpt_00256;根据 SRS_BSW_00004 的变更修改 SWS_Gpt_00256 |
| 2009-12-18 | 4.0.1 | AUTOSAR Administration | 完整修订,删除、替换、修改并添加大量 SWS 项目;Gpt_Cbk_CheckWakeup 重命名为 Gpt_CheckWakeup;API 服务的参数名称重命名;配置参数重命名、删除并添加;集成调试概念;集成 ClockReferencePoint 机制;更新可追溯性表;修订法律免责声明;修订 10.3 章 |
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 修订法律免责声明 |
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 引入唤醒概念的一致性描述(由 Startup/Wakeup Taskforce 评估)。这包括对文字描述的修改和扩展以及与唤醒相关的序列图的修改;SWS 改进:措辞改进、API 描述一致化;在模块已初始化的情况下引入额外的开发错误;扩展文档元信息;微调版面 |
| 2007-01-24 | 2.1.15 | AUTOSAR Administration | 头文件结构显著变化;Gpt_GetTimeRemaining() 和 Gpt_GetTimeElapsed() 的返回值和开发错误变化;Gpt_Init() 中 ConfigPtr 的开发错误检查变化;配置容器结构和配置参数变化;删除接口 Dem_ReportErrorEvent();修订法律免责声明;新增 Release Notes;修订"用户须知";新增"修订信息" |
| 2006-05-16 | 2.0 | AUTOSAR Administration | 文档结构适配通用 Release 2.0 SWS Template;新增唤醒功能;更多详情见第 11 章 |
| 2005-05-31 | 1.0 | AUTOSAR Administration | 首次发布 |
## 免责声明
> 本节为版权与法律声明,以英文形式发布,翻译时予以保留原文。详情请参考英文原版。
---
## 目录
1. [介绍与功能概述](#1-介绍与功能概述)
2. [缩略语、缩写与术语](#2-缩略语缩写与术语)
3. [相关文档](#3-相关文档)
4. [约束与假设](#4-约束与假设)
5. [对其他模块的依赖](#5-对其他模块的依赖)
6. [需求可追溯性](#6-需求可追溯性)
7. [功能规范](#7-功能规范)
- 7.1 [通用行为](#71-通用行为)
- 7.2 [GPT Predef Timers](#72-gpt-predef-timers)
- 7.3 [版本检查](#73-版本检查)
- 7.4 [错误分类](#74-错误分类)
- 7.5 [错误检测](#75-错误检测)
8. [API 规范](#8-api-规范)
- 8.1 [导入类型](#81-导入类型)
- 8.2 [类型定义](#82-类型定义)
- 8.3 [错误通知](#83-错误通知)
- 8.4 [函数定义](#84-函数定义)
- 8.5 [回调通知](#85-回调通知)
- 8.6 [调度函数](#86-调度函数)
- 8.7 [预期接口](#87-预期接口)
9. [序列图](#9-序列图)
10. [配置规范](#10-配置规范)
11. [不适用的需求](#11-不适用的需求)
---
## 1 介绍与功能概述
本规范定义了 AUTOSAR 基础软件模块 GPT 驱动的功能、API 和配置。
GPT 驱动是 microcontroller abstraction layer (MCAL) 的一部分。它初始化并控制微控制器内部的 General Purpose Timer (GPT)。
GPT 驱动提供以下服务和配置参数:
- 启动与停止硬件定时器
- 获取定时器值
- 控制时间触发的中断通知(如果硬件支持)
- 控制时间触发的唤醒中断(如果硬件支持)
定时器通道的 tick 持续时间取决于通道特定的设置(GPT 驱动的一部分),以及由 MCU 模块控制的系统时钟和时钟树设置。本规范不限制 tick 持续时间。
并非所有硬件定时器都必须由 GPT 模块控制。某些定时器可能直接由 AUTOSAR 操作系统或 Complex Drivers 控制。由 GPT 驱动控制的定时器通道数取决于硬件、实现和系统配置。
除了能够配置具有个别属性的单个定时器通道外,还定义了一些自由运行的递增计数器(称为 GPT Predef Timers)。这些定时器具有预定义的 tick 持续时间和预定义的位数(物理时间单位与范围)。GPT Predef Timers 被 Time Service 模块使用。
GPT 驱动仅生成时间基准。驱动层级的进一步基于时间的功能由其他 MCAL 模块覆盖:
- PWM Driver(脉宽调制驱动)
- ICU Driver(输入捕获单元驱动)
- OCU Driver(输出比较单元驱动)
---
## 2 缩略语、缩写与术语
此处仅列出有助于理解本文档或具有局部范围的少量缩略语和缩写。更多信息可在 AUTOSAR 官方术语表[13]中找到。
| 缩写 | 描述 |
| --- | --- |
| BSW | Basic Software(基础软件) |
| DET | Default Error Tracer(默认错误跟踪器) |
| ECU | Electronic Control Unit(电子控制单元) |
| GPT | General Purpose Timer(通用定时器) |
| ICU | Input Capture Unit(输入捕获单元) |
| MCU | Micro Controller Unit(微控制器单元) |
| NOP, nop | Null Operation(空操作) |
| OS | Operating System(操作系统) |
**表 1:缩略语与缩写**
下表中定义的术语在本文档中具有局部范围。
| 术语 | 描述 |
| --- | --- |
| Timer channel | 表示分配给定时器硬件的逻辑定时器实体 |
| Target time | 值达到时应发生事件的时间。行为取决于配置和启用的功能。 |
| Tick | 定义定时器分辨率,即一次定时器递增的持续时间 |
| GPT Predef Timer | GPT Predef Timer 是 GPT 驱动提供的自由运行递增计数器。哪些 GPT Predef Timer 可用取决于硬件(时钟、硬件定时器、预分频器、定时器寄存器宽度等)和配置。GPT Predef Timer 具有预定义的物理时间单位和范围。 |
**表 2:术语**
---
## 3 相关文档
### 3.1 输入文档
- [1] List of Basic Software Modules, AUTOSAR_TR_BSWModuleList.pdf
- [2] Layered Software Architecture, AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
- [3] General Requirements on Basic Software Modules, AUTOSAR_SRS_BSWGeneral.pdf
- [4] Specification of Standard Types, AUTOSAR_SWS_StandardTypes.pdf
- [5] Specification of Default Error Tracer, AUTOSAR_SWS_DefaultErrorTracer.pdf
- [6] Specification of ECU Configuration, AUTOSAR_TPS_ECUConfiguration.pdf
- [7] Specification of Diagnostic Event Manager, AUTOSAR_SWS_DiagnosticEventManager.pdf
- [8] Specification of ECU State Manager, AUTOSAR_SWS_ECUStateManager.pdf
- [9] General Requirements on SPAL, AUTOSAR_SRS_SPALGeneral.pdf
- [10] Requirements on GPT Driver, AUTOSAR_SRS_GPTDriver.pdf
- [11] Specification of ICU Driver, AUTOSAR_SWS_ICUDriver.pdf
- [12] Specification of MCU Driver, AUTOSAR_SWS_MCUDriver.pdf
- [13] Glossary, AUTOSAR_TR_Glossary.pdf
- [14] Basic Software Module Description Template, AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
- [15] General Specification of Basic Software Modules, AUTOSAR_SWS_BSWGeneral.pdf
### 3.2 相关标准与规范
- [16] IEC 7498-1 The Basic Model, IEC Norm, 1994
### 3.3 相关规范
AUTOSAR 提供了基础软件模块的通用规范[15](SWS BSW General),该规范也适用于 GPT Driver。
因此,SWS BSW General 规范应被视为 GPT Driver 的附加且必需的规范。
---
## 4 约束与假设
### 4.1 假设
无假设。
### 4.2 限制
无限制。
### 4.3 适用于汽车领域
无限制。
---
## 5 对其他模块的依赖
**Module DET [5]**
在开发模式下将调用模块 DET[5]的错误钩子函数。
**Module MCU [12]**
GPT 依赖于系统时钟、预分频器和 PLL。因此,系统时钟的变化(例如 PLL on → PLL off)也会影响 GPT 硬件的时钟设置。模块 GPT 不会在其 init 函数中处理时钟、预分频器和 PLL 的配置。这必须由 MCU 模块[12]完成。因此,时间和 ticks 之间的转换应是上层的一部分。
**Module EcuM [8]**
GPT 驱动将唤醒中断报告给 ECU State Manager 以供进一步处理。
**文件结构**
本规范未完整定义文件结构,它取决于具体实现。如果满足所描述的条件,GPT 驱动至少应提供以下文件:
[SWS_Gpt_00261] ⌈Gpt_Irq.c 应包含 Gpt.h 以声明通知函数的原型。⌋ (SRS_BSW_00164)
[SWS_Gpt_00375] ⌈Gpt.c 在任何情况下都应包含 Det.h 以便能够触发 runtime error。⌋ ()
---
## 6 需求可追溯性
本章节引用 SRS 文档(Software Requirements Specifications)中指定的输入需求,这些需求适用于本软件模块。
下表列出了 GPT 驱动 SWS 文档中满足输入需求的规范项的链接。仅引用功能性需求。
| 上层需求 | 描述(摘要) | 由以下需求满足 |
| --- | --- | --- |
| SRS_BSW_00005 | µC 抽象层(MCAL)模块不得有硬编码水平接口 | SWS_Gpt_00381 |
| SRS_BSW_00007 | 所有用 C 编写的基础 SW 模块应符合 MISRA C 2012 标准 | SWS_Gpt_00381 |
| SRS_BSW_00101 | 基础软件模块应能够在单独的初始化函数中初始化变量和硬件 | SWS_Gpt_00006, SWS_Gpt_00280 |
| SRS_BSW_00164 | 中断服务例程的实现应由操作系统、complex drivers 或模块完成 | SWS_Gpt_00261 |
| SRS_BSW_00171 | 基础 SW 模块的可选功能(在 ECU 中不需要)应在预编译时可配置 | SWS_Gpt_00194, SWS_Gpt_00195, SWS_Gpt_00196, SWS_Gpt_00199, SWS_Gpt_00200, SWS_Gpt_00201, SWS_Gpt_00202, SWS_Gpt_00203 |
| SRS_BSW_00305 | 数据类型命名约定 | SWS_Gpt_00357, SWS_Gpt_00358, SWS_Gpt_00359, SWS_Gpt_00360 |
| SRS_BSW_00323 | 所有 AUTOSAR 基础软件模块应检查传递的 API 参数的有效性 | SWS_Gpt_00218, SWS_Gpt_00338, SWS_Gpt_00399, SWS_Gpt_00403 |
| SRS_BSW_00336 | 基础 SW 模块应能关机 | SWS_Gpt_00008, SWS_Gpt_00281 |
| SRS_BSW_00375 | 基础软件模块应报告唤醒原因 | SWS_Gpt_00209, SWS_Gpt_00292 |
| SRS_BSW_00406 | 表明 BSW 模块是否已初始化的静态状态变量应在 BSW 模块的任何 API 被调用前以值 0 初始化 | SWS_Gpt_00220, SWS_Gpt_00222, SWS_Gpt_00223, SWS_Gpt_00224, SWS_Gpt_00225, SWS_Gpt_00226, SWS_Gpt_00227, SWS_Gpt_00228, SWS_Gpt_00229, SWS_Gpt_00230, SWS_Gpt_00325, SWS_Gpt_00398, SWS_Gpt_00402 |
| SRS_BSW_00407 | 每个 BSW 模块应提供函数以读取专用模块实现的版本信息 | SWS_Gpt_00279 |
| SRS_BSW_00414 | Init 函数应以指向配置结构的指针作为唯一参数 | SWS_Gpt_00280, SWS_Gpt_00357 |
| SRS_Gpt_12116 | GPT Driver 应提供将定时器通道去初始化为上电复位状态的功能 | SWS_Gpt_00008, SWS_Gpt_00162, SWS_Gpt_00281, SWS_Gpt_00308 |
| SRS_Gpt_12117 | GPT Driver 应提供同步服务读取每个定时器通道的当前定时器值 | SWS_Gpt_00010, SWS_Gpt_00083, SWS_Gpt_00282, SWS_Gpt_00283 |
| SRS_Gpt_12119 | GPT driver 应提供停止每个定时器通道的服务 | SWS_Gpt_00013, SWS_Gpt_00285 |
| SRS_Gpt_12120 | GPT Driver 应提供时间周期到期时调用的每通道通知 | SWS_Gpt_00233 |
| SRS_Gpt_12121 | GPT Driver 应提供在运行时使能每通道通知函数调用的功能 | SWS_Gpt_00014, SWS_Gpt_00286 |
| SRS_Gpt_12122 | GPT Driver 应提供在运行时禁用每通道通知函数调用的功能 | SWS_Gpt_00015, SWS_Gpt_00287 |
| SRS_Gpt_12128 | GPT driver 应提供以特定参数启动定时器的服务 | SWS_Gpt_00274, SWS_Gpt_00275, SWS_Gpt_00284 |
| SRS_Gpt_12328 | GPT driver 应对所有与 GPT 定时器通道相关的 API 使用时间单位 ticks | SWS_Gpt_00359 |
| SRS_Gpt_13601 | GPT Driver 应能够在预定义唤醒周期到期时执行唤醒事件 | SWS_Gpt_00127 |
| SRS_Gpt_13602 | GPT driver 应提供使能/禁用单个定时器通道唤醒能力的服务 | SWS_Gpt_00159, SWS_Gpt_00160, SWS_Gpt_00289, SWS_Gpt_00290 |
| SRS_Gpt_13603 | GPT driver 应提供选择 Wake-up mode 的服务 | SWS_Gpt_00151, SWS_Gpt_00152, SWS_Gpt_00153, SWS_Gpt_00288 |
| SRS_Gpt_13604 | GPT driver 应支持 GPT Predef Timers | SWS_Gpt_00382 |
| SRS_Gpt_13605 | GPT driver 应支持不同类型的 GPT Predef Timers | SWS_Gpt_00383, SWS_Gpt_00389 |
| SRS_Gpt_13606 | GPT driver 应可静态配置启用哪些 GPT Predef Timers | SWS_Gpt_00385 |
| SRS_Gpt_13607 | GPT Predef Timers 应由 GPT driver 自动启动/停止 | SWS_Gpt_00390, SWS_Gpt_00391, SWS_Gpt_00392, SWS_Gpt_00393 |
| SRS_Gpt_13608 | GPT driver 应提供同步服务读取每个 GPT Predef Timer 的当前值 | SWS_Gpt_00394, SWS_Gpt_00395, SWS_Gpt_00397 |
| SRS_SPAL_00157 | 所有 AUTOSAR 基础软件的驱动与处理程序应实现通知机制 | SWS_Gpt_00014, SWS_Gpt_00015, SWS_Gpt_00405, SWS_Gpt_00406 |
| SRS_SPAL_12057 | 所有驱动模块应实现初始化接口 | SWS_Gpt_00006, SWS_Gpt_00280 |
| SRS_SPAL_12067 | 所有驱动模块应根据所选操作模式设置其唤醒条件 | SWS_Gpt_00014, SWS_Gpt_00015, SWS_Gpt_00233 |
| SRS_SPAL_12069 | SPAL 中从唤醒中断恢复的所有驱动应报告唤醒原因 | SWS_Gpt_00209, SWS_Gpt_00292 |
| SRS_SPAL_12125 | 所有驱动模块应只初始化已配置的资源 | SWS_Gpt_00068 |
| SRS_SPAL_12129 | ISR 应负责重置中断标志并调用相应的通知函数 | SWS_Gpt_00206, SWS_Gpt_00327 |
| SRS_SPAL_12163 | 所有驱动模块应实现去初始化接口 | SWS_Gpt_00008, SWS_Gpt_00281 |
| SRS_SPAL_12169 | 提供不同操作模式的所有驱动模块应提供模式选择服务 | SWS_Gpt_00151, SWS_Gpt_00288 |
| SRS_SPAL_12263 | 所有驱动模块的实现应允许在链接时配置特定模块参数类型 | SWS_Gpt_00357 |
| SRS_SPAL_12448 | 所有驱动模块在开发错误检测后应有特定行为 | SWS_Gpt_00332 |
| SRS_SPAL_12461 | 关于控制器寄存器初始化的特定规则应适用于所有驱动实现 | SWS_Gpt_00352, SWS_Gpt_00353, SWS_Gpt_00354, SWS_Gpt_00355, SWS_Gpt_00356 |
---
## 7 功能规范
### 7.1 通用行为
GPT 驱动通过调用以下服务,提供按通道分别启动和停止定时器通道(分配给定时器硬件的逻辑定时器实例)的服务:
- `Gpt_StartTimer`
- `Gpt_StopTimer`
"target time"作为参数传递给 `Gpt_StartTimer`。因此,对于定时器通道的每次启动,目标时间都可以单独设置。
**定时器通道的状态及状态转换**(参见图 1):
```
for each timer channel
(module already initialized)
initialized
Gpt_StartTimer()
stopped Gpt_StopTimer() or Gpt_SetMode() *
Gpt_StartTimer() running
timer channel in "one-shot mode" has reached its target time
expired
Gpt_StartTimer()
* 详情请参阅 Gpt_SetMode() 规范
```
**图 1:通道状态与状态转换**
定时器通道可以配置为 "one-shot mode" 或 "continuous mode"。
[SWS_Gpt_00329] ⌈定时器通道从值零开始计数。⌋ ()
[SWS_Gpt_00185] ⌈如果定时器通道被配置为 "one-shot mode":如果定时器已达到目标时间(定时器值 = 目标时间),则定时器应自动停止并保持其定时器值不变。通道状态应从 "running" 变为 "expired"。⌋ ()
[SWS_Gpt_00186] ⌈如果定时器通道被配置为 "continuous mode":如果定时器已达到目标时间(定时器值 = 目标时间),则定时器应在下一个 tick 以值 "0" 继续运行。因此,递归的时间间隔为:目标时间 + 1。此间隔应独立于实现(例如中断延迟)。⌋ ()
[SWS_Gpt_00330] ⌈如果定时器通道被配置为 "continuous mode":如果硬件支持,应可实现自由运行的定时器。这意味着:一个由硬件自动翻转的定时器,如果目标时间被设置为定时器能够计数的最大值(max value = 2n -1,n=位数)。⌋ ()
相对的时间已过和剩余时间可以通过调用以下服务查询:
- `Gpt_GetTimeElapsed`
- `Gpt_GetTimeRemaining`
[SWS_Gpt_00331] ⌈如果硬件支持,应可将定时器通道配置为调用通知函数。如果启用,当达到目标时间(定时器值 = 目标时间)时调用该函数。⌋ ()
中断通知可在运行时按通道分别使能和禁用:
- `Gpt_EnableNotification`
- `Gpt_DisableNotification`
[SWS_Gpt_00127] ⌈如果硬件支持,应可将定时器通道配置为 ECU 的唤醒源。如果启用,当达到目标时间(定时器值 = 目标时间)时发生唤醒。⌋ (SRS_Gpt_13601)
唤醒中断可在运行时按通道分别使能和禁用:
- `Gpt_EnableWakeup`
- `Gpt_DisableWakeup`
初始化后,GPT 驱动处于 "normal mode"。只有当驱动切换到 "sleep mode" 时,才会发生唤醒中断。操作模式可通过调用以下服务设置:
- `Gpt_SetMode`
唤醒处理的详细描述请参阅 ECU State Manager 规范[8]。
**GPT 驱动模式与可能的模式转换**(参见图 5):
```
uninitialized
initial
Gpt_Init()
Gpt_DeInit()
Gpt_DeInit()
Gpt_SetMode(GPT_MODE_SLEEP)
GPT_MODE_SLEEP GPT_MODE_NORMAL
Gpt_SetMode(GPT_MODE_NORMAL)
```
**图 5:GPT 驱动模式**
### 7.2 GPT Predef Timers
除了能够配置具有个别属性的单个定时器通道外,还定义了一些 GPT Predef Timers。为 "GPT 定时器通道" 规定的 API 不能用于 GPT Predef Timers。
[SWS_Gpt_00382] ⌈GPT Predef Timer 是一个自由运行的递增计数器(用户视角)。如果定时器已达到最大值(max value = 2n -1,n=位数),则定时器应在下一个 tick 以值 "0" 继续运行。⌋ (SRS_Gpt_13604)
[SWS_Gpt_00383] ⌈**GPT Predef Timers 类型**
| GPT Predef Timer 名称 | Tick 持续时间 | 最大 tick 值 | 位数 | 最大时间跨度(约值) |
| --- | --- | --- | --- | --- |
| GPT_PREDEF_TIMER_1US_16BIT | 1 µs | 65535 | 16 bit | 65 ms |
| GPT_PREDEF_TIMER_1US_24BIT | 1 µs | 16777215 | 24 bit | 16 s |
| GPT_PREDEF_TIMER_1US_32BIT | 1 µs | 4294967295 | 32 bit | 71 minutes |
| GPT_PREDEF_TIMER_100US_32BIT | 100 µs | 4294967295 | 32 bit | 4.9 days |
⌋ (SRS_Gpt_13605)
[SWS_Gpt_00384] ⌈GPT Predef Timer 应具有 +/- 1 tick 的最大 tick 容差以确保基于时间功能的精度。⌋ ()
哪些 GPT Predef Timer 可以启用取决于时钟和可用的定时器硬件(预分频器、定时器寄存器宽度)。建议启用所有 GPT Predef Timers,以确保所有平台上基于时间功能的兼容性。
建议每个 tick 持续时间使用一个硬件定时器,并通过适当选择时钟和预分频器直接将硬件定时器与时钟源 "fclock = 1 / (tick duration)" 关联。这样,定时器计数器寄存器的值可以直接使用,而无需出于性能原因进行任何适配(计算)。可以通过简单的软件掩码操作,从较高位的定时器派生较低位的定时器。
为了实现 GPT Predef Timers,可以使用特殊的硬件特性:
- 定时器可以异步级联以将定时器用作预分频器
- 定时器可以同步级联以扩展定时器范围(位数)
- 可以使用位数大于 32 的定时器
- 如果在 GPT 内部需要,可使用汇编代码进行 64 位算术。例如,如果一个 tick 持续时间为 250 ns 或 1 µs 的 48 位定时器用于所有 GPT Predef Timers
[SWS_Gpt_00385] ⌈应可配置启用哪些 GPT Predef Timers。⌋ (SRS_Gpt_13606)
[SWS_Gpt_00386] ⌈如果启用了 GPT Predef Timer,则具有相同 tick 持续时间和较低位数的定时器也应被启用。⌋ ()
如有需要,可允许实现特定的配置参数,例如用于选择所使用的硬件单元。
所有已启用的 GPT Predef Timers 在调用以下服务后开始运行:
- Gpt_Init (SWS_Gpt_00390)
- Gpt_SetMode(GPT_MODE_NORMAL) (SWS_Gpt_00392)
所有已启用的 GPT Predef Timers 在调用以下服务时停止:
- Gpt_DeInit (SWS_Gpt_00391)
- Gpt_SetMode(GPT_MODE_SLEEP) (SWS_Gpt_00393)
GPT Predef Timers 的当前时间值可通过调用以下服务获取:
- Gpt_GetPredefTimerValue (SWS_Gpt_00394)
### 7.3 版本检查
详情请参阅 SWS_BSWGeneral 中第 5.1.8 章 "Version Check"。
### 7.4 错误分类
#### 7.4.1 开发错误
| ID | 错误类型 | 相关性 | 相关错误代码 | 值[hex] |
| --- | --- | --- | --- | --- |
| SWS_Gpt_00345 | API 服务在模块未初始化时被调用 | Development | GPT_E_UNINIT | 0x0A |
| SWS_Gpt_00347 | 已初始化时被调用初始化 API 服务 | Development | GPT_E_ALREADY_INITIALIZED | 0x0D |
| SWS_Gpt_00404 | API 错误返回代码:Init 函数失败 | Development | GPT_E_INIT_FAILED | 0x0E |
| SWS_Gpt_00348 | API 参数检查:无效通道 | Development | GPT_E_PARAM_CHANNEL | 0x14 |
| SWS_Gpt_00349 | API 参数检查:无效值 | Development | GPT_E_PARAM_VALUE | 0x15 |
| SWS_Gpt_00350 | API 参数检查:无效指针 | Development | GPT_E_PARAM_POINTER | 0x16 |
| SWS_Gpt_00388 | API 参数检查:无效 Predef Timer | Development | GPT_E_PARAM_PREDEF_TIMER | 0x17 |
| SWS_Gpt_00351 | API 参数检查:无效模式 | Development | GPT_E_PARAM_MODE | 0x1F |
**表 3:开发错误表**
#### 7.4.2 运行时错误
| ID | 错误类型 | 相关性 | 相关错误代码 | 值[hex] |
| --- | --- | --- | --- | --- |
| SWS_Gpt_00346 | 当定时器通道仍处于忙状态(运行)时调用 API 服务 | Development | GPT_E_BUSY | 0x0B |
| SWS_Gpt_00387 | 驱动处于错误模式时调用 API 服务 | Development | GPT_E_MODE | 0x0C |
**表 4:运行时错误表**
#### 7.4.3 瞬态故障
无瞬态故障。
#### 7.4.4 生产错误
无生产错误。
#### 7.4.5 扩展生产错误
无扩展生产错误。
### 7.5 错误检测
[SWS_Gpt_00332] ⌈如果启用了 GptDevErrorDetect 开关:当发生开发错误时,相应的 GPT 函数应跳过所要求的功能(在不执行任何动作的情况下离开服务)。⌋ (SRS_SPAL_12448)
---
## 8 API 规范
### 8.1 导入类型
本章列出从下列模块中导入的所有类型:
[SWS_Gpt_00278] ⌈
| 模块 | 头文件 | 导入类型 |
| --- | --- | --- |
| EcuM | EcuM.h | EcuM_WakeupSourceType |
| Std_Types | StandardTypes.h | Std_ReturnType |
| Std_Types | StandardTypes.h | Std_VersionInfoType |
⌋ (SRS_BSW_00348)
### 8.2 类型定义
### 8.3 错误通知
详情请参阅 SWS_BSWGeneral 中第 7.4 章 "Error notification"。
#### 8.3.1 Gpt_ConfigType
[SWS_Gpt_00357] ⌈
| 项 | 值 |
| --- | --- |
| Name | Gpt_ConfigType |
| Type | Structure |
| Range | -- 实现特定的配置数据结构,可配置参数参见第 10 章。 |
| Description | 包含初始化 GPT 定时器单元所需的配置集的数据结构类型。 |
| Available via | Gpt.h |
⌋ (SRS_BSW_00404, SRS_BSW_00405, SRS_BSW_00438, SRS_BSW_00305, SRS_BSW_00414, SRS_SPAL_12263)
#### 8.3.2 Gpt_ChannelType
[SWS_Gpt_00358] ⌈
| 项 | 值 |
| --- | --- |
| Name | Gpt_ChannelType |
| Type | uint |
| Range | -- 实现特定。但并非此类型内的所有值都可能有效。应选择此类型以便在特定微控制器平台上获得最高效的实现。 |
| Description | GPT 通道的数字 ID。 |
| Available via | Gpt.h |
⌋ (SRS_BSW_00305)
#### 8.3.3 Gpt_ValueType
[SWS_Gpt_00359] ⌈
| 项 | 值 |
| --- | --- |
| Name | Gpt_ValueType |
| Type | uint |
| Range | -- 此类型的范围依赖于 µC(定时器寄存器宽度),由供应商描述。 |
| Description | 用于读取和设置定时器值的类型(以 ticks 数表示)。 |
| Available via | Gpt.h |
⌋ (SRS_BSW_00305, SRS_SPAL_12063, SRS_Gpt_12328)
#### 8.3.4 Gpt_ModeType
[SWS_Gpt_00360] ⌈
| 项 | 值 |
| --- | --- |
| Name | Gpt_ModeType |
| Type | Enumeration |
| Range | GPT_MODE_NORMAL 0x00 - GPT 的正常操作模式
GPT_MODE_SLEEP 0x01 - 降功耗操作模式。在 sleep 模式下,仅具备唤醒能力的通道可用。 |
| Description | GPT 驱动的模式。 |
| Available via | Gpt.h |
⌋ (SRS_BSW_00441, SRS_BSW_00305)
#### 8.3.5 Gpt_PredefTimerType
[SWS_Gpt_00389] ⌈
| 项 | 值 |
| --- | --- |
| Name | Gpt_PredefTimerType |
| Type | Enumeration |
| Range | GPT_PREDEF_TIMER_1US_16BIT 0x00 - tick 持续时间 1µs 范围 16bit 的 GPT Predef Timer
GPT_PREDEF_TIMER_1US_24BIT 0x01 - tick 持续时间 1µs 范围 24bit 的 GPT Predef Timer
GPT_PREDEF_TIMER_1US_32BIT 0x02 - tick 持续时间 1µs 范围 32bit 的 GPT Predef Timer
GPT_PREDEF_TIMER_100US_32BIT 0x03 - tick 持续时间 100µs 范围 32bit 的 GPT Predef Timer |
| Description | GPT Predef Timers 的类型 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_13605)
### 8.4 函数定义
这是为上层模块提供的函数列表。
#### 8.4.1 Gpt_GetVersionInfo
[SWS_Gpt_00279] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_GetVersionInfo |
| Syntax | `void Gpt_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr)` |
| Service ID[hex] | 0x00 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | None |
| Parameters (inout) | None |
| Parameters (out) | VersionInfoPtr - 用于存储此模块版本信息的指针。 |
| Return value | None |
| Description | 返回此模块的版本信息。 |
| Available via | Gpt.h |
⌋ (SRS_BSW_00407)
[SWS_Gpt_00338] ⌈如果为 GPT 模块启用了开发错误检测:如果参数 VersionInfoPtr 为空指针,则函数 Gpt_GetVersionInfo 应触发错误 GPT_E_PARAM_POINTER。⌋ (SRS_BSW_00323)
#### 8.4.2 Gpt_Init
[SWS_Gpt_00280] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_Init |
| Syntax | `void Gpt_Init(const Gpt_ConfigType* ConfigPtr)` |
| Service ID[hex] | 0x01 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| Parameters (in) | ConfigPtr - 指向所选配置结构的指针 |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | None |
| Description | 初始化 GPT 驱动。 |
| Available via | Gpt.h |
⌋ (SRS_BSW_00404, SRS_BSW_00405, SRS_BSW_00438, SRS_BSW_00101, SRS_BSW_00358, SRS_BSW_00414, SRS_SPAL_12057)
[SWS_Gpt_00006] ⌈函数 Gpt_Init 应根据由 ConfigPtr 引用的配置集初始化硬件定时器模块。⌋ (SRS_BSW_00101, SRS_SPAL_12057)
[SWS_Gpt_00107] ⌈函数 Gpt_Init 应禁用由 GPT 驱动控制的所有中断通知。⌋ ()
[SWS_Gpt_00068] ⌈函数 Gpt_Init 应仅初始化已配置的资源。配置文件中未配置的资源不应被触及。⌋ (SRS_SPAL_12125)
以下关于控制器寄存器初始化的规则应适用于该驱动实现:
- [SWS_Gpt_00352] ⌈如果硬件只允许该寄存器的一次使用,实现该功能的驱动模块负责初始化该寄存器。⌋ (SRS_SPAL_12461)
- [SWS_Gpt_00353] ⌈如果该寄存器可影响多个硬件模块且为 I/O 寄存器,应由 PORT 驱动初始化。⌋ (SRS_SPAL_12461)
- [SWS_Gpt_00354] ⌈如果该寄存器可影响多个硬件模块且非 I/O 寄存器,应由 MCU 驱动初始化。⌋ (SRS_SPAL_12461)
- [SWS_Gpt_00355] ⌈在复位后需立即初始化的一次性可写寄存器应由启动代码初始化。⌋ (SRS_SPAL_12461)
- [SWS_Gpt_00356] ⌈所有其他寄存器应由启动代码初始化。⌋ (SRS_SPAL_12461)
[SWS_Gpt_00307] ⌈如果为 GPT 模块启用了开发错误检测:如果 GPT 驱动不在 "uninitialized" 操作模式,则函数 Gpt_Init 应触发错误 GPT_E_ALREADY_INITIALIZED。⌋ ()
[SWS_Gpt_00258] ⌈函数 Gpt_Init 应禁用由 GPT 驱动控制的所有唤醒中断。⌋ ()
[SWS_Gpt_00339] ⌈函数 Gpt_Init 应将 GPT 驱动的操作模式设置为 "normal mode"。这导致的行为类似于调用 Gpt_SetMode 时参数为 GPT_MODE_NORMAL。⌋ ()
[SWS_Gpt_00309] ⌈通过执行 Gpt_Init 函数重新初始化 GPT 驱动,要求事先通过执行 Gpt_DeInit 进行去初始化。⌋ ()
[SWS_Gpt_00390] ⌈函数 Gpt_Init 应在值 "0" 启动所有已启用的 GPT Predef Timers。⌋ (SRS_Gpt_13607)
#### 8.4.3 Gpt_DeInit
[SWS_Gpt_00281] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_DeInit |
| Syntax | `void Gpt_DeInit(void)` |
| Service ID[hex] | 0x02 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| Parameters (in) | None |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | None |
| Description | 去初始化 GPT 驱动。 |
| Available via | Gpt.h |
⌋ (SRS_BSW_00336, SRS_SPAL_12163, SRS_Gpt_12116)
[SWS_Gpt_00008] ⌈函数 Gpt_DeInit 应将 GPT 驱动使用的硬件(根据配置)去初始化为上电复位状态。不可写寄存器的值除外。硬件设计有责任确保该状态不会导致 µC 中的未定义活动。⌋ (SRS_BSW_00336, SRS_SPAL_12163, SRS_Gpt_12116)
[SWS_Gpt_00105] ⌈函数 Gpt_DeInit 应禁用由 GPT 驱动控制的所有中断通知和唤醒中断。⌋ ()
[SWS_Gpt_00162] ⌈函数 Gpt_DeInit 应仅影响由静态配置分配的外设。⌋ (SRS_Gpt_12116)
[SWS_Gpt_00308] ⌈如果使用了 postbuild multiple selectable 配置变体,函数 Gpt_DeInit 应进一步仅影响由之前调用函数 Gpt_Init 传递的运行时配置集分配的外设。⌋ (SRS_Gpt_12116)
[SWS_Gpt_00194] ⌈函数 Gpt_DeInit 应通过配置参数 GptDeInitApi 在预编译时可配置开/关。⌋ (SRS_BSW_00171)
[SWS_Gpt_00363] ⌈函数 Gpt_DeInit 应将 GPT 驱动的操作模式设置为 "uninitialized"。⌋ ()
[SWS_Gpt_00234] ⌈如果任何定时器通道处于 "running" 状态,函数 Gpt_DeInit 应触发运行时错误 GPT_E_BUSY。⌋ ()
[SWS_Gpt_00220] ⌈如果为 GPT 模块启用了开发错误检测:如果驱动未初始化,函数 Gpt_DeInit 应触发错误 GPT_E_UNINIT。⌋ (SRS_BSW_00406)
[SWS_Gpt_00391] ⌈函数 Gpt_DeInit 应停止所有已启用的 GPT Predef Timers。⌋ (SRS_Gpt_13607)
#### 8.4.4 Gpt_GetTimeElapsed
[SWS_Gpt_00282] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_GetTimeElapsed |
| Syntax | `Gpt_ValueType Gpt_GetTimeElapsed(Gpt_ChannelType Channel)` |
| Service ID[hex] | 0x03 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | Channel - GPT 通道的数字标识符。 |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | Gpt_ValueType - 已过的定时器值(以 ticks 数表示) |
| Description | 返回已过的时间。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_12117)
[SWS_Gpt_00010] ⌈函数 Gpt_GetTimeElapsed 应返回已过的时间。当通道处于 "one-shot mode" 时,这是相对于通道启动时间点的值。⌋ (SRS_Gpt_12117)
[SWS_Gpt_00361] ⌈当通道处于 "continuous mode" 时,Gpt_GetTimeElapsed 的返回值是相对于上次递归(达到目标时间)或在第一次递归发生前相对于通道启动时间点的值。⌋ ()
[SWS_Gpt_00295] ⌈如果对处于 "initialized" 状态(通道从未启动过)的定时器通道调用函数 Gpt_GetTimeElapsed,该函数应返回值 "0"。⌋ ()
[SWS_Gpt_00297] ⌈如果对处于 "stopped" 状态的定时器通道调用函数 Gpt_GetTimeElapsed,该函数应返回停止时刻的时间值。⌋ ()
[SWS_Gpt_00299] ⌈如果对配置为 "one-shot mode" 且处于 "expired" 状态(定时器已达到目标时间)的通道调用函数 Gpt_GetTimeElapsed,该函数应返回目标时间。⌋ ()
[SWS_Gpt_00113] ⌈函数 Gpt_GetTimeElapsed 应完全可重入,即使针对同一定时器通道也可重入。⌋ ()
[SWS_Gpt_00195] ⌈函数 Gpt_GetTimeElapsed 应通过配置参数 GptTimeElapsedApi 在预编译时可配置开/关。⌋ (SRS_BSW_00171)
**Gpt_GetTimeElapsed 返回值与 DET 错误总结**
| 状态/情况 | 定时器通道状态 | 返回值 | 开发错误(如启用) |
| --- | --- | --- | --- |
| 驱动未初始化 | - | 0 | GPT_E_UNINIT |
| 驱动已初始化 | initialized | 0 | - |
| 驱动已初始化 | running | 已过时间 | - |
| 驱动已初始化 | stopped | 停止时刻的已过时间 | - |
| 驱动已初始化 | expired(仅 one-shot 模式) | 目标时间 | - |
| 无效参数 "Channel" | all | 0 | GPT_E_PARAM_CHANNEL |
#### 8.4.5 Gpt_GetTimeRemaining
[SWS_Gpt_00283] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_GetTimeRemaining |
| Syntax | `Gpt_ValueType Gpt_GetTimeRemaining(Gpt_ChannelType Channel)` |
| Service ID[hex] | 0x04 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | Channel - GPT 通道的数字标识符。 |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | Gpt_ValueType - 剩余的定时器值(以 ticks 数表示) |
| Description | 返回到目标时间到达之前的剩余时间。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_12117)
[SWS_Gpt_00083] ⌈函数 Gpt_GetTimeRemaining 应返回到下次达到目标时间之前剩余的定时器值。剩余时间是 "target time" 减去已过的时间。⌋ (SRS_Gpt_12117)
#### 8.4.6 Gpt_StartTimer
[SWS_Gpt_00284] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_StartTimer |
| Syntax | `void Gpt_StartTimer(Gpt_ChannelType Channel, Gpt_ValueType Value)` |
| Service ID[hex] | 0x05 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant(但同一定时器通道不可重入) |
| Parameters (in) | Channel - GPT 通道的数字标识符。
Value - 目标时间(以 ticks 数表示)。 |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | None |
| Description | 启动一个定时器通道。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_12128)
[SWS_Gpt_00274] ⌈函数 Gpt_StartTimer 应以已定义的目标时间启动所选定时器通道。⌋ (SRS_Gpt_12128)
[SWS_Gpt_00275] ⌈如果已配置并启用,当达到目标时间时会发生中断通知或唤醒中断。⌋ (SRS_Gpt_12128)
[SWS_Gpt_00115] ⌈函数 Gpt_StartTimer 应可重入,如果在并发调用中使用的定时器通道不同。⌋ ()
[SWS_Gpt_00364] ⌈如果调用了 Gpt_StartTimer,所选定时器通道的状态应变为 "running"。⌋ ()
[SWS_Gpt_00218] ⌈如果为 GPT 模块启用了开发错误检测:如果参数 Value 为 "0" 或不在允许范围内(超过最大定时器分辨率),函数 Gpt_StartTimer 应触发错误 GPT_E_PARAM_VALUE。⌋ (SRS_BSW_00323)
[SWS_Gpt_00084] ⌈如果对处于 "running" 状态的通道调用函数 Gpt_StartTimer,该函数应触发运行时错误 GPT_E_BUSY。⌋ ()
#### 8.4.7 Gpt_StopTimer
[SWS_Gpt_00285] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_StopTimer |
| Syntax | `void Gpt_StopTimer(Gpt_ChannelType Channel)` |
| Service ID[hex] | 0x06 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant(但同一定时器通道不可重入) |
| Parameters (in) | Channel - GPT 通道的数字标识符。 |
| Description | 停止一个定时器通道。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_12119)
[SWS_Gpt_00013] ⌈函数 Gpt_StopTimer 应停止所选定时器通道。⌋ (SRS_Gpt_12119)
[SWS_Gpt_00343] ⌈如果调用了 Gpt_StopTimer,所选定时器通道的状态应变为 "stopped"。⌋ ()
[SWS_Gpt_00344] ⌈如果对处于 "initialized"、"stopped" 或 "expired" 状态的通道调用函数 Gpt_StopTimer,该函数应在不执行任何动作的情况下离开(通道状态不变)。⌋ ()
#### 8.4.8 Gpt_EnableNotification
[SWS_Gpt_00286] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_EnableNotification |
| Syntax | `void Gpt_EnableNotification(Gpt_ChannelType Channel)` |
| Service ID[hex] | 0x07 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant(但同一定时器通道不可重入) |
| Parameters (in) | Channel - GPT 通道的数字标识符。 |
| Description | 使能通道的中断通知(在 normal mode 下相关)。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_12121)
[SWS_Gpt_00014] ⌈函数 Gpt_EnableNotification 应使能为通知配置的所参考通道的中断通知(另见 SWS_Gpt_00233)。该函数应保存通道的属性 "notification enabled"。⌋ (SRS_SPAL_00157, SRS_SPAL_12067, SRS_Gpt_12121)
注释:当驱动处于 "normal mode" 时,此属性始终影响中断通知。在 "sleep mode" 下,此属性无影响。
#### 8.4.9 Gpt_DisableNotification
[SWS_Gpt_00287] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_DisableNotification |
| Syntax | `void Gpt_DisableNotification(Gpt_ChannelType Channel)` |
| Service ID[hex] | 0x08 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant(但同一定时器通道不可重入) |
| Parameters (in) | Channel - GPT 通道的数字标识符。 |
| Description | 禁用通道的中断通知(在 normal mode 下相关)。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_12122)
[SWS_Gpt_00015] ⌈函数 Gpt_DisableNotification 应禁用为通知配置的所参考通道的中断通知(另见 SWS_Gpt_00233)。该函数应保存通道的属性 "notification disabled"。⌋ (SRS_SPAL_00157, SRS_Gpt_12122, SRS_SPAL_12067)
#### 8.4.10 Gpt_SetMode
[SWS_Gpt_00288] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_SetMode |
| Syntax | `void Gpt_SetMode(Gpt_ModeType Mode)` |
| Service ID[hex] | 0x09 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| Parameters (in) | Mode - GPT_MODE_NORMAL:GPT 驱动正常操作模式。GPT_MODE_SLEEP:GPT 驱动 Sleep 模式(可唤醒)。参见 Gpt_ModeType。 |
| Description | 设置 GPT 的操作模式。 |
| Available via | Gpt.h |
⌋ (SRS_SPAL_12169, SRS_Gpt_13603)
[SWS_Gpt_00151] ⌈函数 Gpt_SetMode 应将 GPT 驱动的操作模式设置为给定的 mode 参数。⌋ (SRS_SPAL_12169, SRS_Gpt_13603)
[SWS_Gpt_00152] ⌈如果参数 Mode 的值为 GPT_MODE_NORMAL:函数 Gpt_SetMode 应使能为通知配置且事先通过函数 Gpt_EnableNotification 启用通知(已存储属性)的所有通道的中断通知。所有其他中断通知应被禁用。⌋ (SRS_Gpt_13603)
[SWS_Gpt_00153] ⌈如果参数 Mode 的值为 GPT_MODE_SLEEP:函数 Gpt_SetMode 应使能为唤醒配置且事先通过函数 Gpt_EnableWakeup 启用唤醒(已存储属性)的所有通道的唤醒中断。所有其他唤醒中断应被禁用。⌋ (SRS_Gpt_13603)
[SWS_Gpt_00164] ⌈如果调用 Gpt_SetMode 且参数 Mode 的值为 GPT_MODE_SLEEP:所有处于 "running" 状态且未配置为唤醒或未通过 Gpt_EnableWakeup 启用唤醒中断(已存储属性)的定时器通道应被停止,其状态应变为 "stopped"。⌋ ()
[SWS_Gpt_00392] ⌈如果参数 Mode 的值为 GPT_MODE_NORMAL:如果驱动处于 "sleep mode",函数 Gpt_SetMode 应在值 "0" 重新启动所有已启用的 GPT Predef Timers。⌋ (SRS_Gpt_13607)
[SWS_Gpt_00393] ⌈如果参数 Mode 的值为 GPT_MODE_SLEEP:函数 Gpt_SetMode 应停止所有已启用的 GPT Predef Timers。⌋ (SRS_Gpt_13607)
#### 8.4.11 Gpt_DisableWakeup
[SWS_Gpt_00289] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_DisableWakeup |
| Syntax | `void Gpt_DisableWakeup(Gpt_ChannelType Channel)` |
| Service ID[hex] | 0x0a |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant(但同一定时器通道不可重入) |
| Parameters (in) | Channel - GPT 通道的数字标识符。 |
| Description | 禁用通道的唤醒中断(在 sleep mode 下相关)。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_13602)
[SWS_Gpt_00159] ⌈函数 Gpt_DisableWakeup 应禁用为唤醒配置的所参考通道的唤醒中断。该函数应保存通道的属性 "wakeup disabled"。⌋ (SRS_Gpt_13602)
#### 8.4.12 Gpt_EnableWakeup
[SWS_Gpt_00290] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_EnableWakeup |
| Syntax | `void Gpt_EnableWakeup(Gpt_ChannelType Channel)` |
| Service ID[hex] | 0x0b |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant(但同一定时器通道不可重入) |
| Parameters (in) | Channel - GPT 通道的数字标识符。 |
| Description | 使能通道的唤醒中断(在 sleep mode 下相关)。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_13602)
[SWS_Gpt_00160] ⌈函数 Gpt_EnableWakeup 应使能为唤醒配置的所参考通道的唤醒中断。该函数应保存通道的属性 "wakeup enabled"。⌋ (SRS_Gpt_13602)
#### 8.4.13 Gpt_CheckWakeup
[SWS_Gpt_00328] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_CheckWakeup |
| Syntax | `void Gpt_CheckWakeup(EcuM_WakeupSourceType WakeupSource)` |
| Service ID[hex] | 0x0c |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | WakeupSource - 要检查的唤醒源信息。关联的 GPT 通道可从配置数据中确定。 |
| Description | 检查具有唤醒能力的 GPT 通道是否是唤醒事件源,并在有效 GPT 通道唤醒事件的情况下调用 ECU 状态管理器服务 EcuM_SetWakeupEvent。 |
| Available via | Gpt.h |
⌋ ()
#### 8.4.14 Gpt_GetPredefTimerValue
[SWS_Gpt_00394] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_GetPredefTimerValue |
| Syntax | `Std_ReturnType Gpt_GetPredefTimerValue(Gpt_PredefTimerType PredefTimer, uint32* TimeValuePtr)` |
| Service ID[hex] | 0x0d |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | PredefTimer - GPT Predef Timer |
| Parameters (out) | TimeValuePtr - 指向 RAM 中时间值目标数据的指针 |
| Return value | Std_ReturnType - E_OK:未检测到错误
E_NOT_OK:由于错误中止 |
| Description | 提供所需 GPT Predef Timer 的当前值。 |
| Available via | Gpt.h |
⌋ (SRS_Gpt_13608)
**注:**强烈建议在用户软件级别检查函数 Gpt_GetPredefTimerValue 的返回值。当返回 E_NOT_OK 时,由 TimeValuePtr 指向的时间值可能无效,不得使用。
[SWS_Gpt_00395] ⌈函数 Gpt_GetPredefTimerValue 应返回由 PredefTimer 传递的 GPT Predef Timer 的当前值。⌋ (SRS_Gpt_13608)
[SWS_Gpt_00396] ⌈如果函数 Gpt_GetPredefTimerValue 的定时器值小于 32 位(16bit 或 24bit 定时器),应以零填充高位。⌋ ()
[SWS_Gpt_00397] ⌈函数 Gpt_GetPredefTimerValue 应完全可重入,即使针对同一 GPT Predef Timer 也可重入。⌋ (SRS_Gpt_13608)
[SWS_Gpt_00402] ⌈如果 GPT 驱动未初始化、处于 "sleep mode" 或 GPT Predef Timer 未启用,函数 Gpt_GetPredefTimerValue 应返回 E_NOT_OK。⌋ (SRS_BSW_00406)
[SWS_Gpt_00401] ⌈如果驱动处于 "sleep mode",函数 Gpt_GetPredefTimerValue 应触发运行时错误 GPT_E_MODE。⌋ ()
### 8.5 回调通知
由于 GPT 是驱动模块,它不提供任何用于较低层模块的回调函数。
### 8.6 调度函数
无。
### 8.7 预期接口
本章列出从其他模块所需的所有接口。
#### 8.7.1 强制接口
本章定义了实现模块核心功能所需的所有接口。
[SWS_Gpt_00405] ⌈
| API 函数 | 描述 |
| --- | --- |
| Det_ReportRuntimeError | 报告运行时错误的服务。 |
⌋ (SRS_SPAL_00157, SRS_SPAL_12064)
#### 8.7.2 可选接口
本章定义了实现模块可选功能所需的所有接口。
[SWS_Gpt_00406] ⌈
| API 函数 | 头文件 | 描述 |
| --- | --- | --- |
| Det_ReportError | Det.h | 报告开发错误的服务。 |
| EcuM_CheckWakeup | EcuM_Externals.h | 此 callout 由 EcuM 调用以轮询唤醒源。它也应由唤醒源的 ISR 调用以设置 PLL 并检查可能连接到同一中断的其他唤醒源。 |
| EcuM_SetWakeupEvent | EcuM.h | 设置唤醒事件。 |
⌋ (SRS_SPAL_00157)
[SWS_Gpt_00326] ⌈EcuM_CheckWakeup 应在为具有唤醒能力的通道服务 GPT 通道唤醒事件的 ISR 内调用。⌋ ()
[SWS_Gpt_00327] ⌈提供唤醒事件的 ISR 应负责重置中断标志(如硬件需要)。⌋ (SRS_SPAL_12129)
#### 8.7.3 可配置接口
本章列出目标函数可配置的所有接口。目标函数通常为回调函数。这些接口的名称未固定,因为它们是可配置的。
##### 8.7.3.1 GPT Notification
[SWS_Gpt_00292] ⌈
| 项 | 值 |
| --- | --- |
| Service name | Gpt_Notification_ |
| Syntax | `void Gpt_Notification_(void)` |
| Sync/Async | Synchronous |
| Reentrancy | 取决于 GPT 用户实现。 |
| Description | -- |
| Available via | Gpt.h |
⌋ (SRS_BSW_00375, SRS_SPAL_12069)
通知原型 Gpt_Notification_ 用于通知回调函数,应由用户实现。
GPT 模块的环境应为每个通道声明单独的通知,以避免通知服务中的参数并提高运行时效率。
[SWS_Gpt_00086] ⌈回调通知 Gpt_Notification_ 应在配置结构中可配置为指向用户定义函数的指针。⌋ ()
[SWS_Gpt_00209] ⌈如果配置,每个通道应提供自己的通知。⌋ (SRS_BSW_00375, SRS_SPAL_12069)
[SWS_Gpt_00233] ⌈当达到通道定义的目标时间时,GPT 驱动应调用通知。⌋ (SRS_SPAL_12067, SRS_Gpt_12120)
---
## 9 序列图
除 Gpt_Init、Gpt_DeInit、Gpt_GetVersionInfo 和 Gpt_SetMode 之外的所有函数都是同步且可重入的。
### 9.1 Gpt_Init
ECU State Manager (EcuM) 负责调用 init 函数。
```
«module» «module»
EcuM Gpt
Gpt_Init(const
Gpt_ConfigType*)
Gpt_Init()
```
**图 6:序列图 - Gpt_Init**
### 9.2 GPT continuous mode
Channel 2 配置为 "Continuous Mode"。该序列展示了启动定时器、接收周期性通知,以及最终停止定时器的流程。
### 9.3 GPT one-shot mode
Channel 1 配置为 "One-shot Mode"。当达到目标时间时,定时器自动停止,触发通知。
### 9.4 Disable/Enable Notifications
本章节中的序列图解释了在定时器以 continuous mode 仍在运行时禁用通知时,驱动的行为。如果禁用了通知,则当定时器第 2 次达到目标时间(period 2)时,用户将不会被告知。此通知被丢弃,在重新启用通知后也不会补做。
### 9.5 Wakeup
注:定时器唤醒的序列图可在 ECU 状态管理器规范[8]中找到。
---
## 10 配置规范
本章定义配置参数及其在容器中的聚类。
### 10.1 如何阅读本章
详情请参阅 SWS_BSWGeneral 中第 10.1 章 "Introduction to configuration specification"。
### 10.2 容器与配置参数
以下章节总结所有配置参数。参数的详细含义在第 7 章和第 8 章中描述。
[SWS_Gpt_00407] DRAFT ⌈GPT 模块应拒绝具有实现不支持的分区映射的配置。⌋ ()
#### 10.2.1 变体
[SWS_Gpt_00270] ⌈在一个容器内不应可能混合分配给不同配置类的参数。⌋ ()
#### 10.2.2 Gpt
| 项 | 值 |
| --- | --- |
| SWS Item | ECUC_Gpt_00336 |
| Module Name | Gpt |
| Module Description | Gpt (General Purpose Timer) 模块的配置。 |
| Post-Build Variant Support | true |
| Supported Config Variants | VARIANT-POST-BUILD, VARIANT-PRE-COMPILE |
**包含的容器**
| 容器名称 | 多重性 | 范围/依赖 |
| --- | --- | --- |
| GptChannelConfigSet | 1 | 此容器是 Configuration Set 的基础,包含已配置的 GPT 通道。这样可以为 post-build 过程定义不同的配置集。 |
| GptConfigurationOfOptApiServices | 1 | 此容器包含 GPT 驱动可选 API 服务的所有配置开关。 |
| GptDriverConfiguration | 1 | 此容器包含 GPT 驱动的模块范围配置(参数)。 |
#### 10.2.3 GptDriverConfiguration
| 项 | 值 |
| --- | --- |
| SWS Item | ECUC_Gpt_00183 |
| Container Name | GptDriverConfiguration |
| Description | 此容器包含 GPT 驱动的模块范围配置(参数) |
**主要配置参数**:
- **GptDevErrorDetect** (ECUC_Gpt_00321):开关开发错误检测和通知的开/关
- **GptPredefTimer100us32bitEnable** (ECUC_Gpt_00335):启用/禁用 GPT Predef Timer 100µs32bit
- **GptPredefTimer1usEnablingGrade** (ECUC_Gpt_00334):指定启用 1µs tick 持续时间的 GPT Predef Timers 的等级
- GPT_PREDEF_TIMER_1US_16BIT_ENABLED:启用 16bit 定时器
- GPT_PREDEF_TIMER_1US_16_24BIT_ENABLED:启用 16 和 24bit 定时器
- GPT_PREDEF_TIMER_1US_16_24_32BIT_ENABLED:启用 16、24 和 32bit 定时器
- GPT_PREDEF_TIMER_1US_DISABLED:禁用
- **GptReportWakeupSource** (ECUC_Gpt_00322):启用/禁用唤醒源报告
- **GptEcucPartitionRef** (ECUC_Gpt_00337):将 GPT 驱动映射到零个或多个 ECUC partitions(可选,Draft)
- **GptKernelEcucPartitionRef** (ECUC_Gpt_00338):将 GPT 内核映射到零个或一个 ECUC partition(Draft)
#### 10.2.4 GptClockReferencePoint
| 项 | 值 |
| --- | --- |
| SWS Item | ECUC_Gpt_00329 |
| Container Name | GptClockReferencePoint |
| Description | 此容器包含一个参数,该参数表示对 McuClockReferencePoint 类型容器(在 MCU 模块中定义)的引用。需要一个容器以支持多个时钟引用(硬件相关)。 |
**主要参数**:
- **GptClockReference** (ECUC_Gpt_00330):对 McuClockReferencePoint 类型容器的引用,以选择输入时钟。
#### 10.2.5 GptChannelConfigSet
| 项 | 值 |
| --- | --- |
| SWS Item | ECUC_Gpt_00269 |
| Container Name | GptChannelConfigSet |
| Description | 此容器是 Configuration Set 的基础,包含已配置的 GPT 通道。 |
**包含的容器**:
- **GptChannelConfiguration** (1..*):此容器包含 GPT 驱动的通道特定配置。
#### 10.2.6 GptChannelConfiguration
| 项 | 值 |
| --- | --- |
| SWS Item | ECUC_Gpt_00184 |
| Container Name | GptChannelConfiguration |
| Description | 单个 GPT 通道的配置 |
**主要配置参数**:
- **GptChannelId** (ECUC_Gpt_00308):GPT 通道的通道 ID。此值将分配给从 GptChannelConfiguration 容器短名称派生的符号名称。
- **GptChannelMode** (ECUC_Gpt_00309):指定定时器通道在达到目标时间后的行为
- GPT_CH_MODE_CONTINUOUS:达到目标时间后,定时器以值 "zero" 继续运行
- GPT_CH_MODE_ONESHOT:达到目标时间后,定时器自动停止(timer expired)
- **GptChannelTickFrequency** (ECUC_Gpt_00331):指定定时器通道的 tick 频率(以 Hz 表示)
- **GptChannelTickValueMax** (ECUC_Gpt_00332):定时器通道能够计数的最大 tick 值。在下一个 tick 时,定时器翻转到零
- **GptEnableWakeup** (ECUC_Gpt_00311):为通道启用 MCU 的唤醒能力
- **GptNotification** (ECUC_Gpt_00312):指向回调函数的函数指针(用于非唤醒通知)
- **GptChannelClkSrcRef** (ECUC_Gpt_00333):对 GptClockReferencePoint 的引用,通道时钟从中派生
- **GptChannelEcucPartitionRef** (ECUC_Gpt_00339):将 GPT 通道映射到零个或多个 ECUC partitions(Draft)
**包含的容器**:
- **GptWakeupConfiguration** (0..1):指向回调函数的函数指针(用于唤醒通知)
#### 10.2.7 GptWakeupConfiguration
| 项 | 值 |
| --- | --- |
| SWS Item | ECUC_Gpt_00235 |
| Container Name | GptWakeupConfiguration |
| Description | 指向回调函数的函数指针(用于唤醒通知) |
**主要参数**:
- **GptWakeupSourceRef** (ECUC_Gpt_00313):如果具有唤醒能力为 true,则此值传输给 ECU State Manager。实现类型:对 EcuM_WakeupSourceType 的引用。
#### 10.2.8 GptConfigurationOfOptApiServices
| 项 | 值 |
| --- | --- |
| SWS Item | ECUC_Gpt_00193 |
| Container Name | GptConfigurationOfOptApiServices |
| Description | 此容器包含 GPT 驱动可选 API 服务的所有配置开关 |
**主要配置参数**:
- **GptDeinitApi** (ECUC_Gpt_00314):从代码中添加/移除服务 Gpt_DeInit()
- **GptEnableDisableNotificationApi** (ECUC_Gpt_00315):从代码中添加/移除服务 Gpt_EnableNotification() 和 Gpt_DisableNotification
- **GptTimeElapsedApi** (ECUC_Gpt_00317):从代码中添加/移除服务 Gpt_GetTimeElapsed()
- **GptTimeRemainingApi** (ECUC_Gpt_00318):从代码中添加/移除服务 Gpt_GetTimeRemaining()
- **GptVersionInfoApi** (ECUC_Gpt_00319):从代码中添加/移除服务 Gpt_GetVersionInfo()
- **GptWakeupFunctionalityApi** (ECUC_Gpt_00320):从代码中添加/移除服务 Gpt_SetMode()、Gpt_EnableWakeup()、Gpt_DisableWakeup() 和 Gpt_CheckWakeup()
### 10.3 已发布信息
[SWS_Gpt_00380] ⌈SRS General on Basic Software Modules [3]中 SRS_BSW_00402 所要求的标准化公共已发布参数应在该模块的头文件中发布,并需在 BSW Module Description 中提供。相应的模块缩写可在 List of Basic Software Modules [1]中找到。⌋ ()
如适用,下面列出额外的模块特定已发布参数。
---
## 11 不适用的需求
[SWS_Gpt_00381] ⌈以下需求不适用于本规范。⌋ (SRS_BSW_00344, SRS_BSW_00159, SRS_BSW_00167, SRS_BSW_00170, SRS_BSW_00398, SRS_BSW_00416, SRS_BSW_00437, SRS_BSW_00168, SRS_BSW_00423, SRS_BSW_00424, SRS_BSW_00425, SRS_BSW_00426, SRS_BSW_00427, SRS_BSW_00428, SRS_BSW_00429, SRS_BSW_00432, SRS_BSW_00433, SRS_BSW_00422, SRS_BSW_00417, SRS_BSW_00161, SRS_BSW_00162, SRS_BSW_00005, SRS_BSW_00415, SRS_BSW_00325, SRS_BSW_00342, SRS_BSW_00160, SRS_BSW_00007, SRS_BSW_00413, SRS_BSW_00347, SRS_BSW_00307, SRS_BSW_00373, SRS_BSW_00335, SRS_BSW_00348, SRS_BSW_00353, SRS_BSW_00361, SRS_BSW_00328, SRS_BSW_00006, SRS_BSW_00439, SRS_BSW_00357, SRS_BSW_00377, SRS_BSW_00378, SRS_BSW_00306, SRS_BSW_00308, SRS_BSW_00309, SRS_BSW_00359, SRS_BSW_00360, SRS_BSW_00440, SRS_BSW_00330, SRS_BSW_00331, SRS_BSW_00009, SRS_BSW_00172, SRS_BSW_00010, SRS_BSW_00333, SRS_BSW_00321, SRS_BSW_00341, SRS_BSW_00334, SRS_SPAL_12462, SRS_SPAL_12463, SRS_SPAL_12068, SRS_SPAL_12075, SRS_SPAL_12064, SRS_SPAL_12077, SRS_SPAL_12078, SRS_SPAL_12092, SRS_SPAL_12265)
---
## 翻译说明
- 本文档由 AUTOSAR CP 4.4.0 英文原文翻译。
- 模块缩写(GPT、MCAL、MCU、PLL、PWM、ICU、OCU、SPAL、DET、DEM、EcuM、BSW 等)保留原文。
- API 标识符(Gpt_Init、Gpt_DeInit、Gpt_StartTimer 等)保留原文。
- 需求 ID(SWS_Gpt_xxxxx、SRS_Gpt_xxxxx、SRS_BSW_xxxxx、SRS_SPAL_xxxxx、ECUC_Gpt_xxxxx)保留原文。
- AUTOSAR 方括号符 `⌈ ⌋` 保留原貌,以保持需求结构的可追溯性。
- 版权声明保持英文原文。
- 跨文档引用以英文文件名形式保留。
- 错误代码(GPT_E_UNINIT、GPT_E_BUSY 等)、操作模式(GPT_MODE_NORMAL、GPT_MODE_SLEEP)等以英文枚举形式保留。
- 由于源文档大量使用图形和复杂表格,部分图形以简化的代码块形式展示,文字描述保持完整。