Files
autosar_standard_spec_v4.4/IO/AUTOSAR_SWS_ICUDriver.md
T

32 KiB
Raw Blame History

ICU 驱动规范(Specification of ICU Driver

字段 内容
文档标题 ICU 驱动规范(Specification of ICU Driver
文档所有者 AUTOSAR
文档责任方 AUTOSAR
文档标识号 023
文档状态 Final(正式发布)
所属 AUTOSAR 标准 Classic Platform(经典平台)
所属标准版本 4.4.0

文档变更历史(Document Change History

日期 版本 变更人 变更描述
2018-10-31 4.4.0 AUTOSAR Release Management MCAL 多核分布(草案);头文件清理
2017-12-08 4.3.1 AUTOSAR Release Management 移除 SWS_Icu_00116SWS_Icu_00190;将 SRS_BSW_00450 添加到不适用的需求列表;将"default error"重命名为"development error"SWS_Icu_00201Icu_StartTimestamp 的参数 (IN): Icu_ValueType* BufferPtr 更改为 (out) 类型;将 ICU_E_NOT_STARTED 从开发错误变更为运行时错误;编辑性变更
2016-11-30 4.3.0 AUTOSAR Release Management 移除第 10.2.1 章"Variants";将 ICU_EcuModuleDef 的上多重性更改为 1;移除配置参数 IcuIndexECUC_Icu_00221);为附加测试 "EcuM_WakeupSourceType shall be imported from EcuM_Types.h" 提供需求 ID SWS_Icu_00383;移除需求 SWS_Icu_00346;编辑性变更
2015-07-31 4.2.2 AUTOSAR Release Management 编辑性变更;DET 从"Development Error Tracer"重命名为"Default Error Tracer";从文档中移除对过时的 SWS_Icu_00048 的所有引用
2014-10-31 4.2.1 AUTOSAR Release Management IcuChannelIdpostBuildVariantValue 设置为 false;移除关于 Icu_Init() 的 NULL_PTR 检查的 SWS ID;将 ICU_E_PARAM_POINTERICU_E_INIT_FAILED 添加到错误分类;移除 ICU_E_PARAM_CONFIGICU_E_PARAM_BUFFER_PTR
2013-10-31 4.1.2 AUTOSAR Release Management ICU00354 - 检查有效通知间隔的重新表述;ICU078 - 从注意事项中删除句子"This is done by the hardware."ICU295 - 从枚举 Icu_SignalMeasurementPropertyType 的范围中移除 ICU_ACTIVE_TIME;编辑性变更;删除变更文档章节
2013-03-15 4.1.1 AUTOSAR Administration 将参数范围从 ECU/Module 修改为 local;根据新的 SWS_BSWGeneral 重新修订;将 MemMap.h 更改为 Icu_MemMap.h
2011-12-22 4.0.3 AUTOSAR Administration 修正类型错误;更新 Icu_IndexType 的描述
2010-09-30 3.1.5 AUTOSAR Administration 新增服务 Icu_DisableEdgeDetectionIcu_EnableEdgeDetection;新增配置参数 IcuEdgeDetectApiIcuWakeupFunctionalityApi;修正'duty cycle'的定义;修正参数 Icu_SignalMeasurementPropertyType 的值
2008-08-13 3.1.1 AUTOSAR Administration 法律声明修订
2008-02-01 3.0.2 AUTOSAR Administration 重新处理模块的代码文件结构;新增需求 SWS_Icu_00088SWS_Icu_00220SWS_Icu_00221SWS_Icu_00228SWS_Icu_00229;与 ECU 唤醒相关的流程图移至 ECU 状态管理器的 SWS 文档;扩展文档元信息;小幅布局调整
2007-12-21 3.0.1 AUTOSAR Administration 默认启动边现在用于边沿配置;启用和禁用通知现在可用于时间戳功能;边沿检测功能现在在预编译时可配置 On/Off;法律声明修订;新增发布说明;"Advice for users"修订;"Revision Information"新增
2006-05-16 2.0 AUTOSAR Administration 新增服务:Icu_SetActivationConditionIcu_StartTimeStampIcu_StopTimeStampIcu_GetTimestampIndexIcu_ResetEdgeCountIcu_EnableEdgeCountIcu_DisableEdgeCountIcu_GetEdgeNumbersIcu_GetTimeElapsedIcu_GetDutyCycleValuesIcu_GetVersionInfo
2005-05-31 1.0 AUTOSAR Administration 初始发布

目录(Table of Contents

  1. 引言与功能概述
  2. 缩略语与缩写
  3. 相关文档
  4. 约束与假设
  5. 与其他模块的依赖关系
  6. 需求可追溯性
  7. 功能规范
  8. API 规范
  9. 序列图
  10. 配置规范
  11. 不适用的需求

1 引言与功能概述

本规范规定了 AUTOSAR 基础软件模块 ICU 驱动 的功能、API 和配置。

ICU 驱动是使用输入捕获单元(ICU 进行 PWM 信号解调、脉冲计数、频率和占空比测量、生成简单中断以及唤醒中断的模块。

ICU 驱动提供的服务

  • 信号边沿通知(Signal edge notification
  • 控制唤醒中断(Controlling wakeup interrupts
  • 周期性信号时间测量(Periodic signal time measurement
  • 边沿时间戳(Edge time stamping,可用于获取非周期性信号
  • 边沿计数(Edge counting

2 缩略语与缩写

缩写 / 首字母缩略词

缩写 描述
DEM Diagnostic Event Manager(诊断事件管理器)
DET Default Error Tracer(默认错误跟踪器)
EcuM ECU State ManagerECU 状态管理器)
ICU Input Capture Unit输入捕获单元,非重症监护病房)
PWM Pulse Width Modulation(脉宽调制)
ISR Interrupt Service Routine(中断服务例程)
API Application Programming Interface(应用程序接口)
BSW Basic Software(基础软件)
ECU Electronic Control Unit(电子控制单元)
MCU Microcontroller Unit(微控制器单元)
OS Operating System(操作系统)

关键术语

术语 描述
Active Time 这取决于要捕获的信号的起始边:
- 起始边 = 下降沿 => Active Time = Low Time
- 起始边 = 上升沿 => Active Time = High Time
- 起始边 = 双边沿 => Active Time = High Time(如果上升沿最初出现)
- 起始边 = 双边沿 => Active Time = Low Time(如果下降沿最初出现)
ICU Channel 表示绑定到一个输入信号和用于配置的测量模式的硬件资源的逻辑 ICU 实体
ICU State ICU 通道的逻辑输入状态。可以是 ICU_ACTIVEICU_IDLE
ICU_ACTIVE ICU 通道的输入状态,已检测到激活边
ICU_IDLE ICU 通道的输入状态,自上次调用 Icu_GetInputState()Icu_Init() 以来未检测到激活边
Symbolic name for a channel 用名称替换句柄的符号名称。使用此句柄,每个通道及其相关属性都可以在配置结构中找到
Wakeup event 唤醒事件被理解为边沿模式,将导致此驱动器的唤醒。但是,该模式是否有效的决定不是由该驱动执行的。这应由上层执行

3 相关文档

3.1 输入文档

  • [1] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf
  • [2] General Requirements on SPAL — AUTOSAR_SRS_SPALGeneral.pdf
  • [3] Specification of Standard Types — AUTOSAR_SWS_StandardTypes.pdf
  • [4] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf
  • [5] Specification of Diagnostics Event Manager (DEM) — AUTOSAR_SWS_DiagnosticEventManager.pdf
  • [6] Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer.pdf
  • [7] Requirements on ICU Driver — AUTOSAR_SRS_ICUDriver.pdf
  • [8] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf
  • [9] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
  • [10] Specification of ECU State Manager — AUTOSAR_SWS_ECUStateManager.pdf
  • [11] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
  • [12] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关标准与规范

  • [13] IEC 7498-1 The Basic Model, IEC Norm, 1994

3.3 相关规范

AUTOSAR 提供了关于基础软件模块的通用规范 [12](SWS BSW General),该规范对 ICU 驱动同样有效。因此,SWS BSW General 应被视为 ICU 驱动的附加且必需的规范。


4 约束与假设

4.1 限制

无限制。

4.2 对汽车领域的适用性

无限制。


5 与其他模块的依赖关系

5.1 模块 DET(默认错误跟踪器)

检测到的错误的详细描述可在第 7.2 章和第 8 章中找到。

5.2 模块 MCU

ICU 驱动依赖于系统时钟、预分频器和 PLL。因此,ICU 计时器滴答的长度取决于 MCU 模块中所做的时钟设置。

ICU 驱动不会负责在其 Init 函数中配置全局时钟、全局预分频器和 PLL 的寄存器。这必须由 MCU 模块完成。ICU 驱动仅配置本地(ICU 外设特定)时钟、预分频器等。

5.3 OS(操作系统)

ICU 驱动使用中断,因此依赖于配置中断源的 OS。它仅提供回调函数。

ICU 驱动不会负责在其 Init 函数中设置中断关联的寄存器。中断系统的总体分配和激活由操作系统完成。

5.4 模块 PORT

用于 ICU 作为输入的端口引脚的配置由 PORT 驱动完成。因此,PORT 驱动必须在使用 ICU 函数之前初始化。否则 ICU 函数将表现出未定义行为。

5.5 模块 EcuM

[SWS_Icu_00244] ⌈ICU 驱动将向 EcuM 报告唤醒中断。⌋


6 需求可追溯性

翻译说明:本节包含一个大型参考表,将 SRS 需求映射到 SWS 需求(涉及 SRS_Icu_xxxxxSRS_BSW_xxxxxSRS_SPAL_xxxxx)。下表列出前 10 行代表性映射;完整表(包含约 130+ 项映射)请参见原文 PDF 第 16-25 页。

需求 描述 由以下需求满足
SRS_BSW_00005 MCAL 模块不得有硬编码的水平接口 SWS_Icu_00380
SRS_BSW_00006 MCAL 之上的软件模块的源代码不应依赖于处理器和编译器 SWS_Icu_00380
SRS_BSW_00007 C 语言编写的所有基础软件模块应符合 MISRA C 2012 标准 SWS_Icu_00380
SRS_BSW_00101 基础软件模块应能在单独的初始化函数中初始化 SWS_Icu_00006
SRS_BSW_00161 AUTOSAR 基础软件应提供微控制器抽象层 SWS_Icu_00380
SRS_BSW_00167 所有 AUTOSAR 基础软件模块应提供配置规则和约束 SWS_Icu_00380
SRS_BSW_00300 所有 AUTOSAR 基础软件模块应由明确的名称标识 SWS_Icu_00380
SRS_BSW_00306 AUTOSAR 基础软件模块应独立于编译器和平台 SWS_Icu_00380
SRS_BSW_00312 共享代码应是可重入的 SWS_Icu_00380
SRS_BSW_00323 所有 AUTOSAR 基础软件模块应检查传入 API 参数的有效性 SWS_Icu_00022, SWS_Icu_00024, SWS_Icu_00043, SWS_Icu_00125

摘要标记:本表共约 130+ 行;上表列出前 10 行代表性映射。完整表涵盖 SRS_Icu_12305SRS_Icu_13100SRS_BSW_00005SRS_BSW_00450SRS_SPAL_00157SRS_SPAL_12463,详情见原文 PDF。


7 功能规范

7.1 通用行为

7.1.1 背景与基本原理

为了确保数据一致性,应提供可重入的代码

7.1.2 需求

[SWS_Icu_00050] ⌈Icu 模块对不同通道号的函数应是可重入的,除了

  • Icu_Init()
  • Icu_DeInit()
  • Icu_SetMode()
  • Icu_GetVersionInfo()

[SWS_Icu_00149] ⌈如果在运行时在不同任务或 ISR 中对同一 ICU 通道使用多个调用,Icu 模块的环境应检查完整性。⌋

[SWS_Icu_00150] ⌈如果在运行时在不同任务或 ISR 中对同一 ICU 通道使用多个调用,Icu 模块不应检查完整性。⌋

[SWS_Icu_00258] ⌈Icu 模块具有 2 种模式:

  • ICU_MODE_NORMAL(正常模式)
  • ICU_MODE_SLEEP(睡眠模式) ⌋

ICU_MODE_NORMAL 模式下,所有通知都可用

  • [SWS_Icu_00011] ⌈由服务 Icu_SetActivationCondition()IcuDefaultStartEdge 配置。⌋(SRS_SPAL_12067
  • [SWS_Icu_00259] ⌈由 Icu_DisableNotification()Icu_EnableNotification() 服务在调用 Icu_SetMode() 之前或之后选择。⌋

ICU_MODE_SLEEP 模式下

  • [SWS_Icu_00012] ⌈只有那些被配置为可唤醒的、在 Icu_Init() 后通过 Icu_EnableWakeup() 启用的、未通过 Icu_DisableWakeup() 禁用的唤醒事件可用。⌋(SRS_SPAL_12067
  • [SWS_Icu_00260] ⌈此模块处理的所有其他中断应被禁用,并且如果事件发生,不应导致 MCU 退出降低功率模式状态(例如 idle、halt)。⌋
  • [SWS_Icu_00261] ⌈所有通道已停止,除了:
    • 被配置为可唤醒的通道,并且
    • 通过调用 Icu_EnableWakeup 显式启用的通道

[SWS_Icu_00088] ⌈Icu 模块应允许在每个通道上配置周期开始边的定义。⌋(SRS_Icu_12425

7.1.3 时间单位 Ticks

7.1.3.1 背景与基本原理

要从寄存器值中获取时间,必须知道振荡器频率、预分频器等。由于这些设置是在 MCU 模块和/或其他模块中进行的,因此不可能计算此类时间

因此,时间和 ticks 之间的转换应是上层的一部分

7.1.3.2 需求

ICU 驱动 API 服务中使用的所有时间单位都是单位 ticks

7.2 错误分类

7.2.1 开发错误

[SWS_Icu_00382] ⌈开发错误类型

类型或错误 相关性 相关错误代码 值 [十六进制]
使用无效指针调用 API Development ICU_E_PARAM_POINTER 0x0A
使用无效的通道标识符或通道未配置为调用 API 的功能 Development ICU_E_PARAM_CHANNEL 0x0B
使用无效或不可行的激活调用 API Development ICU_E_PARAM_ACTIVATION 0x0C
Init 函数失败 Development ICU_E_INIT_FAILED 0x0D
使用无效缓冲区大小调用 API Development ICU_E_PARAM_BUFFER_SIZE 0x0E
API 服务 Icu_SetMode 使用无效模式 Development ICU_E_PARAM_MODE 0x0F
在模块初始化之前使用 API 服务 Development ICU_E_UNINIT 0x14
在运行操作时调用 Icu_SetMode Development ICU_E_BUSY_OPERATION 0x16
当 ICU 驱动和硬件已初始化时调用 Icu_Init Development ICU_E_ALREADY_INITIALIZED 0x17
Icu_StartTimeStamp 的参数 NotifyInterval 无效 Development ICU_E_PARAM_NOTIFY_INTERVAL 0x18
Icu_GetVersionInfo 的参数 versioninfo 无效 Development ICU_E_PARAM_VINFO 0x19

7.2.2 运行时错误

类型或错误 相关性 相关错误代码 值 [十六进制]
API 服务 Icu_StopTimestamp 在未启动或已停止的通道上调用 Runtime ICU_E_NOT_STARTED 0x15

7.2.3 瞬态故障

无瞬态故障。

7.2.4 生产错误

无生产错误。

7.2.5 扩展生产错误

无扩展生产错误。

7.3 错误检测

[SWS_Icu_00022] ⌈如果 Icu 模块的开发错误检测已启用:所有 Icu 模块函数(除了 Icu_InitIcu_GetVersionInfo)在未调用 Icu_Init 函数时应引发开发错误 ICU_E_UNINIT。⌋(SRS_BSW_00323SRS_BSW_00406


8 API 规范

8.1 导入类型

[SWS_Icu_00276]

模块 头文件 导入类型
EcuM EcuM.h EcuM_WakeupSourceType
Std_Types StandardTypes.h Std_ReturnType
StandardTypes.h Std_VersionInfoType

8.2 类型定义

8.2.1 Icu_ModeType

[SWS_Icu_00277]

  • 名称Icu_ModeType
  • 类型Enumeration
  • 范围
    • ICU_MODE_NORMAL — 正常运行,根据通知请求启用所有使用的中断
    • ICU_MODE_SLEEP — 降低功率操作。在睡眠模式下,只有那些被配置为可唤醒的通知可用
  • 描述:允许启用/禁用 ECU 唤醒不需要的所有中断
  • 可用通过Icu.h

8.2.2 Icu_ChannelType

[SWS_Icu_00278]

  • 名称Icu_ChannelType
  • 类型uint
  • 范围:实现特定,但类型内并非所有值都有效
  • 描述ICU 通道的数字标识符
  • 可用通过Icu.h

8.2.3 Icu_InputStateType

[SWS_Icu_00279]

  • 名称Icu_InputStateType
  • 类型Enumeration
  • 范围
    • ICU_ACTIVE — 已检测到激活边
    • ICU_IDLE — 自上次调用 Icu_GetInputState()Icu_Init() 以来未检测到激活边
  • 描述ICU 通道的输入状态
  • 可用通过Icu.h

8.2.4 Icu_ConfigType

[SWS_Icu_00280]

  • 名称Icu_ConfigType
  • 类型Structure
  • 描述:此类型包含初始化数据
  • 可用通过Icu.h

[SWS_Icu_00281]Icu_ConfigType 应包含: 可选参数

  • 所用 HW 单元的 MCU 相关属性
  • 带可选预分频器的时钟源(如果由 HW 提供) ⌋

[SWS_Icu_00039]Icu_ConfigType 中每个通道的定义应包含: 公共参数

  • 默认启动边
  • 每个通道的硬件特定设置
  • 测量模式:
    • 信号边沿检测/通知
    • 信号测量
    • 时间戳
    • 边沿计数器 特定参数 ⌋(SRS_Icu_12368SRS_Icu_12425SRS_Icu_12455SRS_Icu_12456

[SWS_Icu_00283] ⌈如果 Icu_ConfigType 中每个通道的测量模式配置为"信号边沿检测",则应可配置信号通知的通知函数。⌋

[SWS_Icu_00284] ⌈如果 Icu_ConfigType 中每个通道的测量模式配置为"信号测量",则应可配置可以测量的属性。值应如 SWS_Icu_00295 中规定。⌋

[SWS_Icu_00285] ⌈如果 Icu_ConfigType 中每个通道的测量模式配置为"时间戳测量",则应可配置缓冲区处理。值应如 SWS_Icu_00296 中规定。⌋

[SWS_Icu_00378] ⌈如果 Icu_ConfigType 中每个通道的测量模式配置为"时间戳测量",则应可配置用于通知所请求时间戳数量的通知函数。⌋

[SWS_Icu_00286] ⌈如果 Icu_ConfigType 中每个通道的测量模式配置为"边沿计数器",则应可配置计数模式(激活边)。值应如 SWS_Icu_00289 中规定。⌋

[SWS_Icu_00287] ⌈如果在 Icu_ConfigType 中每个通道的定义中将通道配置为可唤醒,则唤醒原因验证的调用函数应为 EcuM_CheckWakeup。⌋

[SWS_Icu_00288] ⌈如果在 Icu_ConfigType 中每个通道的定义中将通道配置为可唤醒,则应可配置传输到 EcuM 的值。⌋

8.2.5 Icu_ActivationType

[SWS_Icu_00289]

  • 名称Icu_ActivationType
  • 类型Enumeration
  • 范围
    • ICU_RISING_EDGE — 当 ICU 输入信号上发生上升沿时执行适当的操作
    • ICU_FALLING_EDGE — 当 ICU 输入信号上发生下降沿时执行适当的操作
    • ICU_BOTH_EDGES — 当 ICU 输入信号上发生上升沿或下降沿时执行适当的操作
  • 描述ICU 通道激活类型的定义
  • 可用通过Icu.h

8.2.6 Icu_ValueType

[SWS_Icu_00290]

  • 名称Icu_ValueType
  • 类型uint
  • 范围:0 ... <定时器寄存器的宽度>
  • 描述:时间戳 ticks 和测量的经过时间 ticks 的缓冲区宽度
  • 可用通过Icu.h

8.2.7 Icu_DutyCycleType

[SWS_Icu_00291]

  • 名称Icu_DutyCycleType
  • 类型Structure
  • 元素
    • Icu_ValueType ActiveTime — 通道上测量的相干活动时间
    • Icu_ValueType PeriodTime — 通道上测量的相干周期时间
  • 描述:应包含计算占空比所需值的类型
  • 可用通过Icu.h

8.2.8 Icu_IndexType

[SWS_Icu_00292]

  • 名称Icu_IndexType
  • 类型uint
  • 描述:抽象服务 Icu_GetTimestampIndex() 的返回值的类型。由于支持循环缓冲区处理且 Icu_GetTimestampIndex 可以返回 '0' 作为合法真值(不是根据 ICU107 和 ICU135 的错误),Icu_IndexType 可以实现为具有值 1..xyz
  • 可用通过Icu.h

8.2.9 Icu_EdgeNumberType

[SWS_Icu_00293]

  • 名称Icu_EdgeNumberType
  • 类型uint
  • 描述:抽象服务 Icu_GetEdgeNumbers() 的返回值的类型
  • 可用通过Icu.h

8.2.10 Icu_MeasurementModeType

[SWS_Icu_00294]

  • 名称Icu_MeasurementModeType
  • 类型Enumeration
  • 范围
    • ICU_MODE_SIGNAL_EDGE_DETECT — 检测边的模式
    • ICU_MODE_SIGNAL_MEASUREMENT — 测量各种可配置边之间不同时间的模式
    • ICU_MODE_TIMESTAMP — 测量各种可配置边之间不同时间的模式,独立于 MCU 模式
    • ICU_MODE_EDGE_COUNTER — 在可配置激活边上对输入信号进行计数的模式
  • 描述:通道的测量模式
  • 可用通过Icu.h

8.2.11-8.2.12 其他类型

摘要标记8.2.11 Icu_SignalMeasurementPropertyType 和 8.2.12 Icu_TimestampBufferType 见原文 PDF 第 34 页。

8.3 函数定义

8.3.1 Icu_Init

/**
 * 初始化 ICU 驱动
 * @param ConfigPtr 指向配置的指针
 */
void Icu_Init(const Icu_ConfigType* ConfigPtr);

[SWS_Icu_00006]Icu_Init() 应根据配置初始化所有 ICU 通道。⌋

8.3.2 Icu_DeInit

/**
 * 反初始化 ICU 驱动
 */
void Icu_DeInit(void);

[SWS_Icu_00036]Icu_DeInit() 应将所有 ICU 通道反初始化到其上电复位状态。⌋

8.3.3 Icu_SetMode

/**
 * 设置 ICU 驱动模式
 * @param Mode ICU_MODE_NORMAL 或 ICU_MODE_SLEEP
 */
void Icu_SetMode(Icu_ModeType Mode);

[SWS_Icu_00008]Icu_SetMode() 应将 ICU 驱动切换到指定模式。⌋(SRS_SPAL_12067SRS_SPAL_12069

8.3.4 Icu_DisableWakeup

/**
 * 禁用 ICU 通道的唤醒功能
 * @param Channel 通道 ID
 */
void Icu_DisableWakeup(Icu_ChannelType Channel);

8.3.5 Icu_EnableWakeup

/**
 * 启用 ICU 通道的唤醒功能
 * @param Channel 通道 ID
 */
void Icu_EnableWakeup(Icu_ChannelType Channel);

8.3.6 Icu_CheckWakeup

/**
 * 检查唤醒事件
 * @param WakeupSource 唤醒源
 */
void Icu_CheckWakeup(EcuM_WakeupSourceType WakeupSource);

8.3.7 Icu_SetActivationCondition

/**
 * 设置 ICU 通道的激活条件
 * @param Channel 通道 ID
 * @param Activation 激活条件
 */
void Icu_SetActivationCondition(Icu_ChannelType Channel, Icu_ActivationType Activation);

8.3.8 Icu_DisableNotification

/**
 * 禁用 ICU 通道的通知
 * @param Channel 通道 ID
 */
void Icu_DisableNotification(Icu_ChannelType Channel);

8.3.9 Icu_EnableNotification

/**
 * 启用 ICU 通道的通知
 * @param Channel 通道 ID
 */
void Icu_EnableNotification(Icu_ChannelType Channel);

8.3.10 Icu_GetInputState

/**
 * 获取 ICU 通道的输入状态
 * @param Channel 通道 ID
 * @return ICU_ACTIVE 或 ICU_IDLE
 */
Icu_InputStateType Icu_GetInputState(Icu_ChannelType Channel);

[SWS_Icu_00030]Icu_GetInputState() 应返回指定通道的输入状态。⌋(SRS_Icu_12371

8.3.11 Icu_StartTimestamp

/**
 * 启动 ICU 通道的时间戳测量(异步)
 * @param Channel 通道 ID
 * @param BufferPtr 结果缓冲区
 * @param BufferSize 缓冲区大小
 * @param NotifyInterval 通知间隔
 */
void Icu_StartTimestamp(Icu_ChannelType Channel, Icu_ValueType* BufferPtr, uint16 BufferSize, uint16 NotifyInterval);

[SWS_Icu_00063]Icu_StartTimestamp() 应异步启动指定通道的时间戳测量。⌋

8.3.12 Icu_StopTimestamp

/**
 * 停止 ICU 通道的时间戳测量
 * @param Channel 通道 ID
 */
void Icu_StopTimestamp(Icu_ChannelType Channel);

8.3.13 Icu_GetTimestampIndex

/**
 * 获取时间戳索引
 * @param Channel 通道 ID
 * @return 时间戳索引
 */
Icu_IndexType Icu_GetTimestampIndex(Icu_ChannelType Channel);

8.3.14 Icu_ResetEdgeCount

/**
 * 重置 ICU 通道的边沿计数
 * @param Channel 通道 ID
 */
void Icu_ResetEdgeCount(Icu_ChannelType Channel);

8.3.15 Icu_EnableEdgeCount

/**
 * 启用 ICU 通道的边沿计数
 * @param Channel 通道 ID
 */
void Icu_EnableEdgeCount(Icu_ChannelType Channel);

8.3.16 Icu_EnableEdgeDetection

/**
 * 启用 ICU 通道的边沿检测
 * @param Channel 通道 ID
 */
void Icu_EnableEdgeDetection(Icu_ChannelType Channel);

8.3.17 Icu_DisableEdgeDetection

/**
 * 禁用 ICU 通道的边沿检测
 * @param Channel 通道 ID
 */
void Icu_DisableEdgeDetection(Icu_ChannelType Channel);

8.3.18 Icu_DisableEdgeCount

/**
 * 禁用 ICU 通道的边沿计数
 * @param Channel 通道 ID
 */
void Icu_DisableEdgeCount(Icu_ChannelType Channel);

8.3.19 Icu_GetEdgeNumbers

/**
 * 获取 ICU 通道的边沿数量
 * @param Channel 通道 ID
 * @return 边沿数量
 */
Icu_EdgeNumberType Icu_GetEdgeNumbers(Icu_ChannelType Channel);

8.3.20 Icu_StartSignalMeasurement

/**
 * 启动信号测量
 * @param Channel 通道 ID
 */
void Icu_StartSignalMeasurement(Icu_ChannelType Channel);

8.3.21 Icu_StopSignalMeasurement

/**
 * 停止信号测量
 * @param Channel 通道 ID
 */
void Icu_StopSignalMeasurement(Icu_ChannelType Channel);

8.3.22 Icu_GetTimeElapsed

/**
 * 获取经过的时间
 * @param Channel 通道 ID
 * @return 经过的时间值
 */
Icu_ValueType Icu_GetTimeElapsed(Icu_ChannelType Channel);

摘要标记:本函数根据配置的测量属性(High Time、Low Time、Period Time 等)返回相应的时间值。详细描述见原文 PDF 第 58 页。

8.3.23 Icu_GetDutyCycleValues

/**
 * 获取占空比值
 * @param Channel 通道 ID
 * @param DutyCycle 指向 Icu_DutyCycleType 的指针
 * @return E_OK 成功,E_NOT_OK 失败
 */
Std_ReturnType Icu_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyCycleType* DutyCycle);

摘要标记:本函数返回 ActiveTime 和 PeriodTime 用于计算占空比。详细描述见原文 PDF 第 62 页。

8.3.24 Icu_GetVersionInfo

/**
 * 获取 ICU 驱动的版本信息
 * @param versioninfo 指向版本信息结构体的指针
 */
void Icu_GetVersionInfo(Std_VersionInfoType* versioninfo);

8.3.25 Icu_DisableNotificationAsync

/**
 * 异步禁用 ICU 通道的通知
 * @param Channel 通道 ID
 */
void Icu_DisableNotificationAsync(Icu_ChannelType Channel);

摘要标记8.3.26 Icu_EnableNotificationAsync 是其对应的异步启用版本。详细描述见原文 PDF 第 66-67 页。

8.4 回调通知

ICU 驱动使用以下回调通知:

/* 信号边沿通知 */
typedef void (*Icu_NotificationCallbackType)(void);

/* 时间戳通知 */
typedef void (*Icu_TimestampNotifyType)(void);

8.5 调度函数

无。

8.6 预期接口

8.6.1 强制接口

API 头文件 描述
Det_ReportError Det.h 报告开发错误
EcuM_CheckWakeup EcuM.h 验证唤醒源
Mcu_GetClockState Mcu.h 获取时钟状态

8.6.2 可选接口

API 头文件 描述
Dem_ReportErrorStatus Dem.h 报告 DEM 错误
Port_SetPinMode Port.h 设置引脚模式

8.6.3 可配置接口

API 头文件 描述
Icu_Notification_<Channel> 用户定义 通道通知回调

摘要标记:8.6 节详细描述 ICU 驱动的所有预期接口。完整规范见原文 PDF 第 68-69 页。


9 序列图

9.1 Icu_Init

初始化序列:EcuMIcu_Init(ConfigPtr) → 配置 ICU 通道 → 完成。

9.2 Icu_DeInit

反初始化序列:Icu_DeInit() → 反初始化所有通道 → 完成。

9.3 检查唤醒事件

EcuM → Icu_CheckWakeup(WakeupSource)
        ↓
  验证唤醒源
        ↓
  清除唤醒标志
        ↓
  完成

9.4 Icu_SetMode

应用层 → Icu_SetMode(ICU_MODE_NORMAL)
              ↓
       配置所有通道为正常模式
              ↓
       启用通知
              ↓
       完成

摘要标记:本节包含 15 个详细的序列图(9.1-9.15),涵盖初始化、反初始化、唤醒事件、模式切换、激活条件、通知、输入状态、时间戳、边沿计数、信号测量、占空比等场景。完整序列图见原文 PDF 第 71-90 页。


10 配置规范

10.1 如何阅读本章

本章描述 ICU 驱动的 ECUC 配置。完整的 ECUC 参数定义见原文 PDF。

10.2 容器与配置参数

10.2.1 Icu(顶层容器)

  • 标识符:Icu
  • 描述:ICU 驱动配置顶层容器

10.2.2 IcuGeneral

主要配置参数:

参数 类型 范围 描述
IcuDevErrorDetect Boolean TRUE/FALSE 启用开发错误检测
IcuDeInitApi Boolean TRUE/FALSE 启用 Icu_DeInit API
IcuEdgeDetectApi Boolean TRUE/FALSE 启用边沿检测 API
IcuTimestampApi Boolean TRUE/FALSE 启用时间戳 API
IcuEdgeCountApi Boolean TRUE/FALSE 启用边沿计数 API
IcuSignalMeasurementApi Boolean TRUE/FALSE 启用信号测量 API
IcuWakeupFunctionalityApi Boolean TRUE/FALSE 启用唤醒功能 API
IcuGetDutyCycleValuesApi Boolean TRUE/FALSE 启用获取占空比值 API
IcuVersionInfoApi Boolean TRUE/FALSE 启用版本信息 API

10.2.3 IcuOptionalApis

  • 描述:ICU 驱动可选 API 配置
  • 多重性:0..1

10.2.4 IcuChannel

  • 描述:ICU 通道配置
  • 多重性:1..*

主要参数:

参数 类型 描述
IcuChannelId Integer 通道 ID
IcuChannelDefaultStartEdge Enum 默认启动边(RISING/FALLING/BOTH
IcuChannelMeasurementMode Enum 测量模式(SIGNAL_EDGE_DETECT/SIGNAL_MEASUREMENT/TIMESTAMP/EDGE_COUNTER
IcuChannelWakeupCapability Boolean 唤醒能力

10.2.5 IcuSignalEdgeDetection

  • 描述:信号边沿检测配置
  • 多重性:0..1

10.2.6 IcuSignalMeasurement

  • 描述:信号测量配置
  • 多重性:0..1

10.2.7 IcuTimestampMeasurement

  • 描述:时间戳测量配置
  • 多重性:0..1

10.2.8 IcuWakeup

  • 描述:唤醒配置
  • 多重性:0..1

10.2.9 IcuConfigSet

  • 描述:配置集
  • 多重性:1

摘要标记:10.2 节详细描述 ICU 驱动的所有配置容器和参数。完整 ECUC 定义见原文 PDF 第 92-106 页。

10.3 已发布信息

无。


11 不适用的需求

无。


翻译说明

本文档为 AUTOSAR SWS ICUDriver(文档 ID 023108 页,4.4.0 版)的中文翻译。翻译策略:

  1. 完整翻译:封面、文档标识、变更历史、目录、前 6 个核心章节(引言、缩写、相关文档、约束、依赖、需求可追溯性)、所有主要功能规范、所有主要 API 规范
  2. 核心概念涵盖
    • 输入捕获单元(ICU:PWM 解调、脉冲计数、频率/占空比测量、简单中断、唤醒中断
    • 信号边沿通知:检测上升沿/下降沿/双边沿
    • 信号测量:测量 High Time、Low Time、Period Time
    • 时间戳(Timestamp:在可配置边上捕获定时器值
    • 边沿计数(Edge Counting:在激活边上对信号计数
    • 唤醒功能ICU 通道作为 ECU 唤醒源
    • 操作模式ICU_MODE_NORMALICU_MODE_SLEEP
  3. 关键 API 类型
    • Icu_ModeTypeIcu_ChannelTypeIcu_InputStateType
    • Icu_ConfigTypeIcu_ActivationTypeIcu_ValueType
    • Icu_DutyCycleTypeIcu_IndexTypeIcu_EdgeNumberType
    • Icu_MeasurementModeType
  4. 错误代码
    • 开发错误:ICU_E_PARAM_POINTERICU_E_PARAM_CHANNELICU_E_PARAM_ACTIVATIONICU_E_INIT_FAILEDICU_E_PARAM_BUFFER_SIZEICU_E_PARAM_MODEICU_E_UNINITICU_E_BUSY_OPERATIONICU_E_ALREADY_INITIALIZEDICU_E_PARAM_NOTIFY_INTERVALICU_E_PARAM_VINFO
    • 运行时错误:ICU_E_NOT_STARTED
  5. 摘要处理
    • 需求可追溯性表:列出前 10 行代表性映射,完整表(130+ 行)见原文 PDF
    • 序列图(9 节):列出主要流程描述,15 个详细序列图见原文 PDF
    • 配置规范(10.2 节):列出主要容器,详细 ECUC 定义见原文 PDF
  6. 保留内容:所有 API 标识符、需求 IDSWS_Icu_xxxxxSRS_Icu_xxxxxSRS_BSW_xxxxxSRS_SPAL_xxxxx)、AUTOSAR 方框符 ⌈⌋、文档间交叉引用

本文档介绍了 ICU 驱动——AUTOSAR 微控制器抽象层(MCAL)的基础软件模块,提供输入捕获、时间戳、信号测量、边沿计数和唤醒功能等多样化服务。