# 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)等以英文枚举形式保留。 - 由于源文档大量使用图形和复杂表格,部分图形以简化的代码块形式展示,文字描述保持完整。