Files
autosar_standard_spec_v4.4/MCAL/AUTOSAR_SWS_GPTDriver.md
T

1153 lines
54 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AUTOSAR GPT 驱动规范
> **Specification of GPT Driver**
> AUTOSAR CP Release 4.4.0
## 元信息
- **文档类别**SWSSoftware 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 的正常操作模式<br>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<br>GPT_PREDEF_TIMER_1US_24BIT 0x01 - tick 持续时间 1µs 范围 24bit 的 GPT Predef Timer<br>GPT_PREDEF_TIMER_1US_32BIT 0x02 - tick 持续时间 1µs 范围 32bit 的 GPT Predef Timer<br>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 通道的数字标识符。<br>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:未检测到错误<br>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_<channel> |
| Syntax | `void Gpt_Notification_<channel>(void)` |
| Sync/Async | Synchronous |
| Reentrancy | 取决于 GPT 用户实现。 |
| Description | -- |
| Available via | Gpt.h |
⌋ (SRS_BSW_00375, SRS_SPAL_12069)
通知原型 Gpt_Notification_<channel> 用于通知回调函数,应由用户实现。
GPT 模块的环境应为每个通道声明单独的通知,以避免通知服务中的参数并提高运行时效率。
[SWS_Gpt_00086] ⌈回调通知 Gpt_Notification_<channel> 应在配置结构中可配置为指向用户定义函数的指针。⌋ ()
[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)等以英文枚举形式保留。
- 由于源文档大量使用图形和复杂表格,部分图形以简化的代码块形式展示,文字描述保持完整。