Files
autosar_standard_spec_v4.4/MCAL/AUTOSAR_SWS_GPTDriver.md
T

54 KiB
Raw Blame History

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. 介绍与功能概述
  2. 缩略语、缩写与术语
  3. 相关文档
  4. 约束与假设
  5. 对其他模块的依赖
  6. 需求可追溯性
  7. 功能规范
  8. API 规范
  9. 序列图
  10. 配置规范
  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_<channel>(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)等以英文枚举形式保留。
  • 由于源文档大量使用图形和复杂表格,部分图形以简化的代码块形式展示,文字描述保持完整。