AUTOSAR_SWS_ICUDriver

AUTOSAR_SWS_ICUDriver

简介和功能概述


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

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

ICU 驱动程序提供的服务:
  • 信号边缘通知
  • 控制唤醒中断
  • 周期性信号时间测量
  • 边缘时间戳,可用于获取非周期性信号
  • 边缘计数

首字母缩略词和缩写



对其他模块的依赖


模块 DET(默认错误追踪器)

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

模块 MCU

ICU 驱动程序依赖于系统时钟、预分频器和 PLL。因此,ICU 定时器刻度的长度取决于模块 MCU 中的时钟设置。

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

OS(操作系统)

ICU 驱动程序使用中断,因此依赖于配置中断源的操作系统。它仅提供回调函数。

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

模块 Port

Port 驱动程序负责配置 ICU 用作输入的端口引脚。因此,在使用 ICU 功能之前必须初始化 Port 驱动程序。否则 ICU 功能将表现出未定义的行为。

模块 EcuM

[SWS_Icu_00244]

[ ]
  • ICU 驱动程序将向 EcuM 报告唤醒中断。

需求可追溯性



功能规格


背景与理由

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

需求

[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]

[SRS_SPAL_12067]
  • 通过服务 Icu_SetActivationCondition() 或 IcuDefaultStartEdge 配置。

[SWS_Icu_00259]

[ ]
  • 在调用 Icu_SetMode() 之前或之后由 Icu_DisableNotification() 和 Icu_EnableNotification() 服务选择。

在 ICU_MODE_SLEEP 模式:

[SWS_Icu_00012]

[SRS_SPAL_12067]
  • 仅那些配置为可唤醒、在 Icu_Init() 之后通过 Icu_EnableWakeup() 启用且通过服务 Icu_DisableWakeup() 禁用的唤醒事件可用。

[SWS_Icu_00260]

[ ]
  • 如果事件发生,该模块处理的所有其他中断均被禁用,并且不得导致 MCU 退出低功耗模式状态(例如空闲、停止)。

[SWS_Icu_00261]

[ ]
  • 除配置为可唤醒的通道以及通过调用 Icu_EnableWakeup 明确启用的通道外,所有通道均停止。

[SWS_Icu_00088]

[SRS_Icu_12425]
  • 模块 ICU 应允许每个通道配置周期开始的边缘定义。

时间单位滴答


背景与理由

要从寄存器值中获取时间,必须知道振荡器频率、预分频器等。由于这些设置是在 MCU 模块和/或其他模块中进行的,因此无法计算此类时间。因此,时间和刻度之间的转换应属于上层的一部分。

需求

ICU 驱动程序的 API 服务中使用的所有时间单位都是单位时钟滴答

错误分类


开发错误

[SWS_Icu_00382]

[ ]

运行时错误

[SWS_Icu_91004]

[ ]

API 规范


导入的类型

本章列出了以下模块包含的所有类型:

[SWS_Icu_00276]

[ ]

类型定义

Icu_ModeType

[SWS_Icu_00277]

[ ]

Icu_ChannelType

[SWS_Icu_00278]

[ ]

Icu_InputStateType

[SWS_Icu_00279]

[ ]

Icu_ConfigType

[SWS_Icu_00280]

[ ]

[SWS_Icu_00287]

[ ]
  • 如果在 Icu_ConfigType 中每个通道的定义中,该通道被配置为具有唤醒功能,则用于验证唤醒原因的函数应为 EcuM_CheckWakeup

Icu_ActivationType

[SWS_Icu_00289]

[ ]

Icu_ValueType

[SWS_Icu_00290]

[ ]

Icu_DutyCycleType

[SWS_Icu_00291]

[ ]

Icu_IndexType

[SWS_Icu_00292]

[ ]

Icu_EdgeNumberType

[SWS_Icu_00293]

[ ]

Icu_MeasurementModeType

[SWS_Icu_00294]

[ ]

Icu_SignalMeasurementPropertyType

[SWS_Icu_00295]

[ ]

Icu_TimestampBufferType

[SWS_Icu_00296]

[ ]

函数定义


Icu_Init

[SWS_Icu_00191]

[ ]

[SWS_Icu_00297]

[ ]
  • 函数 Icu_Init 应为可重入的。

[SWS_Icu_00298]

[ ]
  • 函数 Icu_Init 初始化驱动程序。

[SWS_Icu_00006]

[SRS_BSW_00344]
[SRS_BSW_00404]
[SRS_BSW_00405]
[SRS_BSW_00101]
[SRS_SPAL_12057]
[SRS_SPAL_12461]
  • 函数 Icu_Init 将使用参数 ConfigPtr 引用的结构的值初始化配置硬件的所有相关寄存器。

有关控制器寄存器初始化的以下规则应适用于此驱动程序实现:

[SWS_Icu_00051]

[SRS_SPAL_12461]
  • 如果硬件只允许使用寄存器次,则实现该功能的驱动模块负责初始化寄存器。

[SWS_Icu_00052]

[SRS_SPAL_12461]
  • 如果寄存器可以影响多个硬件模块,并且它是 I/O 寄存器,则它应由 Port 驱动程序初始化。

[SWS_Icu_00053]

[SRS_SPAL_12461]
  • 如果该寄存器可以影响硬件模块,并且它不是 I/O 寄存器,则它应由 MCU 驱动程序初始化。

[SWS_Icu_00128]

[SRS_SPAL_12461]
  • 复位后需要直接初始化的次性可写寄存器应由启动代码初始化。

[SWS_Icu_00129]

[SRS_SPAL_12461]
  • 所有其他寄存器须由启动代码初始化。

[SWS_Icu_00061]

[SRS_SPAL_12057]
[SRS_Icu_12407]
  • 函数 Icu_Init 将禁用所有通知

[SWS_Icu_00121]

[ ]
  • 函数 Icu_Init 将禁用所有通道的唤醒功能。

[SWS_Icu_00040]

[SRS_SPAL_12057]
[SRS_Icu_12407]
  • 函数 Icu_Init 应将所有使用的 ICU 通道设置为状态 ICU_IDLE

[SWS_Icu_00060]

[SRS_SPAL_12057]
  • 函数 Icu_Init 应将模块模式设置为 ICU_MODE_NORMAL

[SWS_Icu_00054]

[SRS_SPAL_12125]
  • 函数 Icu_Init 仅应设置配置文件中配置的资源(包括清除待处理的中断标志)。
  • ICU 模块的环境不得在运行操作(例如时间戳测量或边缘计数)期间调用 Icu_Init

[SWS_Icu_00220]

[ ]
  • 如果启用了 ICU 模块的开发错误检测,并且在 ICU 驱动程序和硬件已初始化时调用函数 Icu_Init,则函数 Icu_Init 将引发开发错误 ICU_E_ALREADY_INITIALIZED 并返回而不采取任何操作。

[SWS_Icu_00138]

[ ]
  • 此模块的初始化函数应始终将指针作为参数,即使对于 Variant PC 不指定配置集也是如此。相反,应将 NULL 指针传递给初始化函数。

注意:初始化函数的参数检查在 BSW General 中指定。

Icu_DeInit

[SWS_Icu_00193]

[ ]

[SWS_Icu_00036]

[SRS_SPAL_12163]
[SRS_Icu_12429]
  • 函数 Icu_DeInit 将配置所使用的外设的状态设置为与上电复位后的状态相同。

[SWS_Icu_00300]

[ ]
  • 不可写入的寄存器值被排除在函数 Icu_DeInit 的状态设置之外。

[SWS_Icu_00091]

[ ]
  • Icu_DeInit 函数仅影响由静态配置分配的外围设备和/或上次调用 Icu_Init() 传递的运行时配置集。

[SWS_Icu_00037]

[SRS_BSW_00336]
[SRS_SPAL_12163]
  • ⌈函数 Icu_DeInit 将禁用所有使用的中断通知

[SWS_Icu_00152]

[ ]
  • ICU 模块的环境得在运行操作(例如时间戳测量或边缘计数)期间调用 Icu_DeInit

[SWS_Icu_00092]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_DeInit 应在编译前通过配置参数 IcuDeInitApi 进行配置。

[SWS_Icu_00301]

[ ]
  • Icu_DeInit 功能可通过配置参数 IcuDeInitApi 配置为 ON/OFF

[SWS_Icu_00221]

[ ]
  • 通过执行 Icu_Init() 函数重新初始化 ICU 模块之前需要执行 Icu_DeInit() 函数进行取消初始化。

[SWS_Icu_00299]

[ ]
  • Icu_DeInit 操作是可重入的。

[SWS_Icu_00385]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,调用此函数将引发开发错误 ICU_E_UNINIT

Icu_SetMode

[SWS_Icu_00194]

[ ]

[SWS_Icu_00008]

[SRS_SPAL_12067]
[SRS_SPAL_12169]
[SRS_Icu_12370]
  • 函数 Icu_SetMode 应将操作模式设置为给定的模式参数。该函数影响 ICU 通道的功能。因此,模块的模式切换应与 ECU 的整体状态兼容。

[SWS_Icu_00302]

[ ]
  • Icu_SetMode 函数应为可重入函数。该函数影响 ICU 通道的功能。因此,模块的模式切换应与 ECU 的整体状态兼容。

[SWS_Icu_00095]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_SetMode 应在编译前通过配置参数 IcuSetModeApi 进行配置。

[SWS_Icu_00303]

[ ]
  • Icu_SetMode 功能应可通过配置参数 IcuSetModeApi 配置为 ON/OFF

[SWS_Icu_00125]

[SRS_BSW_00323]
  • 如果为模块 ICU 启用了开发错误检测,则函数 Icu_SetMode 应检查参数 Mode,如果参数 Mode 不在配置中设置的允许范围内,则应引发错误 ICU_E_PARAM_MODE

[SWS_Icu_00133]

[SRS_SPAL_12064]
  • 此服务可以在运行操作期间调用。如果是这样,则在可唤醒通道上生成中断的正在进行的操作(例如时间戳边沿计数)可能会导致 ICU 模块无法正确进入睡眠模式。那么这是系统或 ECU 配置问题,而不是此规范的问题。

[SWS_Icu_00386]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT


Icu_DisableWakeup

[SWS_Icu_00195]

[ ]

[SWS_Icu_00013]

[SRS_Icu_12408]
  • 函数 Icu_DisableWakeup 将禁用单个 ICU 通道的唤醒功能。

[SWS_Icu_00305]

[ ]
  • 函数 Icu_DisableWakeup 仅对静态配置为唤醒能力为开启的 ICU 通道禁用单个 ICU 通道的唤醒功能。

[SWS_Icu_00304]

[ ]
  • 函数 Icu_DisableWakeup 应为可重入的。

[SWS_Icu_00096]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_DisableWakeup 应在编译前通过配置参数 IcuDisableWakeupApi 进行配置。

[SWS_Icu_00306]

[ ]
  • Icu_DisableWakeup 功能可通过配置参数 IcuDisableWakeupApi 配置为开启/关闭
  • 此功能所做的设置仅在设置 ICU_MODE_SLEEP 后才相关。

[SWS_Icu_00024]

[SRS_BSW_00323]
  • 如果启用了开发错误检测:函数 Icu_DisableWakeup 将检查参数 Channel,如果 Channel 不在配置中设置的允许范围内,则将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00059]

[ ]
  • 如果启用了开发错误检测:函数 Icu_DisableWakeup 将检查参数 Channel。如果 Channel 正在索引静态配置为唤醒功能的 ICU 通道,函数 Icu_DisableWakeup 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00387]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_EnableWakeup

[SWS_Icu_00196]

[ ]

[SWS_Icu_00307]

[ ]
  • 函数 Icu_EnableWakeup 应为可重入的。

[SWS_Icu_00014]

[SRS_Icu_12408]
  • 函数 Icu_EnableWakeup 将重新启用单个 ICU 通道的唤醒功能,以进行以下 ICU 模式选择。此服务仅适用于配置为唤醒功能为真的 ICU 通道。
  • 为了使选择有效,需要调用函数 Icu_SetMode,请求模式 ICU_MODE_SLEEP

[SWS_Icu_00097]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_EnableWakeup 应在编译前通过配置参数 IcuEnableWakeupApi 进行配置。

[SWS_Icu_00308]

[ ]
  • Icu_EnableWakeup 功能可通过配置参数 IcuEnableWakeupApi 配置为 ON/OFF

[SWS_Icu_00155]

[ ]
  • 如果启用了开发错误检测:函数 Icu_EnableWakeup 应检查参数 Channel,如果 Channel 无效,则应引发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00156]

[ ]
  • 如果启用了开发错误检测:函数 Icu_EnableWakeup 将检查参数 Channel。如果 Channel 正在索引静态未配置为唤醒功能的 ICU 通道,函数 Icu_EnableWakeup 将引发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00388]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_CheckWakeup

[SWS_Icu_00358]

[ ]


[SWS_Icu_00359]

[ ]
  • 函数 Icu_CheckWakeup 应检查具有唤醒功能的 ICU 通道是否是唤醒事件的来源,并调用 EcuM_SetWakeupEventECU 状态管理器指示有效的计时器唤醒事件。

[SWS_Icu_00360]

[ ]
  • 仅当 IcuReportWakeupSource 静态配置为可用时,函数 Icu_CheckWakeup 才可行。

[SWS_Icu_00361]

[ ]
  • 如果 ICU 模块环境不会同时使用同一通道,则 ICU 模块环境应仅使用函数 Icu_CheckWakeup 的可重入功能。

[SWS_Icu_00362]

[ ]
  • 函数 Icu_CheckWakeup 应在编译时通过配置参数 IcuWakeupFunctionalityApi 配置为开启/关闭

[SWS_Icu_00363]

[ ]
  • 如果启用了 ICU 模块的开发错误检测:如果在 ICU 模块初始化之前调用函数 Icu_CheckWakeup,则函数 Icu_CheckWakeup 将引发开发错误 ICU_E_UNINIT

Icu_SetActivationCondition

[SWS_Icu_00197]

[ ]

[SWS_Icu_00090]

[SRS_BSW_00410]
  • 函数 Icu_SetActivationCondition 应根据给定通道的激活参数设置激活边缘。此服务应支持为以下 IcuMeasurementMode 配置的通道(详情请参阅 8.2.10)
  • ICU_MODE_SIGNAL_EDGE_DETECT
  • ICU_MODE_TIMESTAMP
  • ICU_MODE_EDGE_COUNTER

[SWS_Icu_00139]

[ ]
  • 函数 Icu_SetActivationCondition 将把给定通道的状态重置为 ICU_IDLE


[SWS_Icu_00309]

[ ]
  • 函数 Icu_SetActivationCondition 应为可重入的。

[SWS_Icu_00159]

[ ]
  • 如果启用了开发错误检测,函数 Icu_SetActivationCondition 将检查参数 Channel,如果 Channel 不在配置中设置的范围内,则将引发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00043]

[SRS_BSW_00323]
  • 如果启用了开发错误检测,函数 Icu_SetActivationCondition 将检查参数 Activation。如果 Activation 无效,函数 Icu_SetActivationCondition 将引发错误 ICU_E_PARAM_ACTIVATION,但仅限于请求的 ICU 通道。

Icu_DisableNotification

[SWS_Icu_00198]

[ ]

[SWS_Icu_00009]

[SRS_Icu_12305]
  • 函数 Icu_DisableNotification 将禁用给定通道上的通知。

[SWS_Icu_00310]

[ ]
  • 函数 Icu_DisableNotification 应为可重入的。

[SWS_Icu_00160]

[ ]
  • 如果启用了开发错误检测,函数 Icu_DisableNotification 将检查参数 Channel,如果 Channel 无效(无效标识符),则将引发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00389]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_EnableNotification

[SWS_Icu_00199]

[ ]

[SWS_Icu_00010]

[SRS_Icu_12305]
  • 函数 Icu_EnableNotification 应在给定通道上启用通知。

[SWS_Icu_00311]

[ ]
  • 函数 Icu_EnableNotification 应为可重入的。

[SWS_Icu_00161]

[ ]
  • 如果启用了开发错误检测,函数 Icu_EnableNotification 将检查参数 Channel,如果 Channel 无效(无效标识符),则将引发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00390]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_GetInputState

[SWS_Icu_00200]

[ ]

[SWS_Icu_00313]

[ ]
  • Icu_GetInputState 应返回 Icu_InputStateType,当自上次调用 Icu_GetInputState() 或 Icu_Init() 以来未检测到激活边缘时,其值将为 ICU_IDLE

[SWS_Icu_00030]

[SRS_SPAL_00157]
[SRS_Icu_12371]
  • 函数 Icu_GetInputState 应返回 ICU 输入的状态。仅支持为以下 IcuMeasurementMode 配置的通道:
    • ICU_MODE_SIGNAL_EDGE_DETECT
    • ICU_MODE_SIGNAL_MEASUREMENT

[SWS_Icu_00312]

[ ]
  • 函数 Icu_GetInputState 应为可重入的。

[SWS_Icu_00031]

[SRS_Icu_12371]
  • 如果检测到激活边缘,函数 Icu_GetInputState 将为边缘检测通道返回 ICU_ACTIVE

[SWS_Icu_00314]

[ ]
  • 对于信号测量,应将通道设置为 ICU_ACTIVE,直到此测量完成并且驱动程序能够提供有关输入信号的有用信息

[SWS_Icu_00032]

[SRS_Icu_12371]
  • 一旦函数 Icu_GetInputState 返回了一个状态 ICU_ACTIVE,函数 Icu_GetInputState 应将存储的状态设置为 ICU_IDLE,直到检测到下一个边沿。

[SWS_Icu_00122]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_GetInputState 应在编译前通过配置参数 IcuGetInputStateApi 进行配置。

[SWS_Icu_00315]

[ ]
  • Icu_GetInputState 函数可通过配置参数 IcuGetInputStateApi 配置为 ON/OFF

[SWS_Icu_00162]

[ ]
  • 如果启用了开发错误检测,则函数 Icu_GetInputState 应检查参数通道,如果通道无效(无效标识符或被配置为模式 ICU_MODE_SIGNAL_EDGE_DETECT 或 ICU_MODE_SIGNAL_MEASUREMENT 模式),则应引发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00049]

[SRS_SPAL_12448]
[SRS_BSW_00369]
  • 如果启用了开发错误检测,则函数 Icu_GetInputState 将在检测到错误时返回 ICU_IDLE

[SWS_Icu_00391]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_StartTimestamp

[SWS_Icu_00201]

[ ]

[SWS_Icu_00317]

[ ]
  • 函数 Icu_StartTimestamp 应启动捕获边缘上的计时器数值到外部缓冲区的开始处。

[SWS_Icu_00063]

[SRS_BSW_00410]
[SRS_SPAL_12063]
[SRS_SPAL_12075]
[SRS_Icu_12430]
[SRS_Icu_12438]
  • 函数 Icu_StartTimestamp 应开始在服务 Icu_SetActivationCondition() 激活的边沿(上升沿 / 下降沿 / 双边沿)上捕获计时器值。

[SWS_Icu_00316]

[ ]
  • 函数 Icu_StartTimestamp 应为可重入的。

[SWS_Icu_00064]

[ ]
  • 如果配置了循环缓冲区处理(对于给定的通道),当捕获功能到达缓冲区的末尾时,ICU 模块应从缓冲区的开头启动。

[SWS_Icu_00065]

[SRS_Icu_12456]
  • 如果配置了线性缓冲区处理,则当捕获功能到达缓冲区的末尾时,ICU 模块应停止捕获计时器值。

[SWS_Icu_00134]

[ ]
  • 如果配置了通知功能,ICU 模块才应调用通知功能。

[SWS_Icu_00318]

[ ]
  • 仅当通过调用 Icu_EnableNotification() 启用通知时,ICU 模块会调用通知函数。

[SWS_Icu_00319]

[ ]
  • 如果 NotifyInterval 大于“0”,ICU 模块会调用通知函数。

[SWS_Icu_00320]

[ ]
  • 仅当捕获了 NotifyInterval 指定的事件数量时,ICU 模块会调用通知函数。

[SWS_Icu_00066]

[SRS_Icu_12430]
  • Icu_StartTimestamp 函数仅在测量模式“ICU_MODE_TIMESTAMP”下可用。

[SWS_Icu_00098]

[SRS_BSW_00171]
  • 函数 Icu_StartTimestamp 应由配置参数 ICU_TIMESTAMP_API 配置预编译时间。

[SWS_Icu_00321]

[ ]
  • Icu_StartTimestamp 函数可通过配置参数 ICU_TIMESTAMP_API 配置为 ON/OFF

[SWS_Icu_00163]

[ ]
  • 如果启用了开发错误检测,函数 Icu_StartTimestamp 将检查参数 Channel,如果 Channel 无效(无效标识符或未为模式 ICU_MODE_TIMESTAMP 配置通道),则将引发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00354]

[ ]
  • 如果启用了开发错误检测并且为寻址通道配置了通知功能,则函数 Icu_StartTimestamp 应检查参数 NotifyInterval 的有效性,如果参数 NotifyInterval 为“0”,则引发错误 ICU_E_PARAM_NOTIFY_INTERVAL

[SWS_Icu_00108]

[SRS_SPAL_12448]
  • 如果启用了开发错误检测,函数 Icu_StartTimestamp 将检查参数 BufferSize(检查大小是否 > 0)。如果 BufferSize 无效(例如“0”),函数 Icu_StartTimestamp 将引发错误 ICU_E_PARAM_BUFFER_SIZE

[SWS_Icu_00392]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_StopTimestamp

[SWS_Icu_00202]

[ ]

[SWS_Icu_00067]

[SRS_Icu_12431]
  • 函数 Icu_StopTimestamp 将停止给定通道的时间戳测量。

[SWS_Icu_00322]

[ ]
  • Icu_StopTimestamp 操作是可重入的。在生产模式下,当通道不活动(未启动或已停止)时,函数 Icu_StopTimestamp 不得返回错误。

[SWS_Icu_00165]

[ ]
  • Icu_StopTimestamp 函数仅在测量模式下可用:ICU_MODE_TIMESTAMP

[SWS_Icu_00099]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_StopTimestamp 应由配置参数 IcuTimestampApi预编译时进行配置(另请参阅第 10.2.4 章可选 API 服务的配置)

[SWS_Icu_00164]

[ ]
  • 如果启用了开发错误检测,则函数 Icu_StopTimestamp 将检查参数 Channel,如果 Channel 无效(无效标识符或未为模式 ICU_MODE_TIMESTAMP 配置通道),则将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00323]

[ ]
  • Icu_StopTimestamp 功能可通过配置参数 IcuTimestampApi 配置为开启/关闭

[SWS_Icu_00166]

[ ]
  • 如果通道未处于活动状态(未启动或已停止),则函数 Icu_StopTimestamp 将引发运行时错误 ICU_E_NOT_STARTED

[SWS_Icu_00393]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_GetTimestampIndex

[SWS_Icu_00203]

[ ]

[SWS_Icu_00071]

[SRS_Icu_12453]
  • 函数 Icu_GetTimestampIndex 将读取下一个要写入的给定通道的时间戳索引。

[SWS_Icu_00324]

[ ]
  • 函数 Icu_GetTimestampIndex 应为可重入的。

[SWS_Icu_00135]

[ ]
  • 如果在 Icu_StartTimestamp() 之前调用该服务,则函数 Icu_GetTimestampIndex 将返回“0”(在这种情况下没有定义缓冲区)。

[SWS_Icu_00170]

[ ]
  • 函数 Icu_GetTimestampIndex 仅在测量模式 ICU_MODE_TIMESTAMP 下可用。

[SWS_Icu_00100]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_GetTimestampIndex 应在编译时通过配置参数 IcuTimestampApi 进行配置。

[SWS_Icu_00325]

[ ]
  • Icu_GetTimestampIndex 函数可通过配置参数 IcuTimestampApi 配置为 ON/OFF

[SWS_Icu_00169]

[ ]
  • 如果启用了开发错误检测,函数 Icu_GetTimestampIndex 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_TIMESTAMP 配置通道),函数 Icu_GetTimestampIndex 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00107]

[SRS_SPAL_12448]
  • 如果启用了开发错误检测,则函数 Icu_GetTimestampIndex 将在检测到错误时返回“0”。

[SWS_Icu_00394]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_ResetEdgeCount

[SWS_Icu_00204]

[ ]

[SWS_Icu_00072]

[SRS_Icu_12439]
[SRS_Icu_13100]
  • 函数 Icu_ResetEdgeCount 将把计数边缘的值重置为

[SWS_Icu_00326]

[ ]
  • 函数 Icu_ResetEdgeCount 应为可重入的。

[SWS_Icu_00101]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_ResetEdgeCount 应在编译前通过配置参数 ICU_EDGE_COUNT_API 进行配置。

[SWS_Icu_00327]

[ ]
  • Icu_ResetEdgeCount 功能可通过配置参数 ICU_EDGE_COUNT_API 配置为 ON/OFF

[SWS_Icu_00171]

[ ]
  • 如果启用了开发错误检测,则函数 Icu_ResetEdgeCount 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_EDGE_COUNTER 配置通道),则 Icu_ResetEdgeCount 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00395]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_EnableEdgeCount

[SWS_Icu_00205]

[ ]

[SWS_Icu_00078]

[SRS_Icu_12432]
  • 函数 Icu_EnableEdgeCount 将启用给定通道的边沿计数。

注意:此服务本身并进行真正的计数。

[SWS_Icu_00073]

[SRS_Icu_12439]
  • 函数 Icu_EnableEdgeCount 应仅计算配置的边沿(上升沿/下降沿/两个边沿)。

[SWS_Icu_00074]

[SRS_Icu_12439]
  • 在“边沿计数器”测量模式下,每个 ICU 通道都应具有 Icu_EnableEdgeCount 函数。

[SWS_Icu_00328]

[ ]
  • 函数 Icu_EnableEdgeCount 须为可重入的。

[SWS_Icu_00102]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_EnableEdgeCount 应在编译前通过配置参数 ICU_EDGE_COUNT_API 进行配置

[SWS_Icu_00329]

[ ]
  • Icu_EnableEdgeCount 功能可通过配置参数 ICU_EDGE_COUNT_API 配置为开启/关闭

[SWS_Icu_00172]

[ ]
  • 如果启用了开发错误检测,函数 Icu_EnableEdgeCount 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_EDGE_COUNTER 配置通道),则函数 Icu_EnableEdgeCount 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00396]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_EnableEdgeDetection

[SWS_Icu_00364]

[ ]

[SWS_Icu_00365]

[ ]
  • 函数 Icu_EnableEdgeDetection 将启用给定通道的边缘检测。

[SWS_Icu_00366]

[ ]
  • 函数 Icu_EnableEdgeDetection 仅检测配置的边缘(上升沿/下降沿/两个边缘)。

[SWS_Icu_00367]

[ ]
  • 在“边缘检测”测量模式下,每个 ICU 通道都应具有 Icu_EnableEdgeDetection 函数。

[SWS_Icu_00368]

[ ]
  • 函数 Icu_EnableEdgeDetection 须为可重入的。

[SWS_Icu_00369]

[ ]
  • 函数 Icu_EnableEdgeDetection 应在编译前通过配置参数 IcuEdgeDetectApi 进行配置。

[SWS_Icu_00370]

[ ]
  • Icu_EnableEdgeDetection 函数可通过配置参数 IcuEdgeDetectApi 配置为 ON/OFF

[SWS_Icu_00371]

[ ]
  • 如果启用了开发错误检测,函数 Icu_EnableEdgeDetection 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_SIGNAL_EDGE_DETECT 配置通道),则函数 Icu_EnableEdgeDetection 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00397]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_DisableEdgeDetection

[SWS_Icu_00377]

[ ]

[SWS_Icu_00372]

[ ]
  • 函数 Icu_DisableEdgeDetection 将禁用给定通道的边缘检测。

[SWS_Icu_00373]

[ ]
  • 函数 Icu_DisableEdgeDetection 须为可重入的。

[SWS_Icu_00374]

[ ]
  • 函数 Icu_DisableEdgeDetection 应在编译前通过配置参数 IcuEdgeDetectApi 进行配置。

[SWS_Icu_00375]

[ ]
  • Icu_DisableEdgeDetection 函数可通过配置参数 IcuEdgeDetectApi 配置为 ON/OFF

[SWS_Icu_00376]

[ ]
  • 如果启用了开发错误检测,则函数 Icu_DisableEdgeDetection 将检查参数 Channel。如果 Channel 无效(标识符无效或未为模式 ICU_MODE_SIGNAL_EDGE_DETECT 配置通道),则函数 Icu_DisableEdgeDetection 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00398]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_DisableEdgeCount

[SWS_Icu_00206]

[ ]

[SWS_Icu_00079]

[SRS_Icu_12433]
  • 函数 Icu_DisableEdgeCount 将禁用给定通道的边沿计数。

[SWS_Icu_00330]

[ ]
  • 函数 Icu_DisableEdgeCount 应可重入。要重置边缘计数器,可以使用服务 Icu_ResetEdgeCount()。

[SWS_Icu_00103]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_DisableEdgeCount 应在编译前通过配置参数 IcuEdgeCountApi 进行配置。

[SWS_Icu_00331]

[ ]
  • Icu_DisableEdgeCount 功能可通过配置参数 IcuEdgeCountApi 配置为开启/关闭。

[SWS_Icu_00173]

[ ]
  • 如果启用了开发错误检测,函数 Icu_DisableEdgeCount 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_EDGE_COUNTER 配置通道),函数 Icu_DisableEdgeCount 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00399]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_GetEdgeNumbers

[SWS_Icu_00207]

[ ]

[SWS_Icu_00080]

[SRS_Icu_12434]
  • 函数 Icu_GetEdgeNumbers 应在最后一次调用 Icu_ResetEdgeCount() 之后读取已计数边的数量。

[SWS_Icu_00332]

[ ]
  • 函数 Icu_GetEdgeNumbers 应为可重入的。

[SWS_Icu_00104]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_GetEdgeNumbers 应在编译时通过配置参数 ICU_EDGE_COUNT_API 进行配置。

[SWS_Icu_00333]

[ ]
  • Icu_GetEdgeNumbers 函数可通过配置参数 ICU_EDGE_COUNT_API 配置为开启/关闭

[SWS_Icu_00174]

[ ]
  • 如果启用了开发错误检测,函数 Icu_GetEdgeNumbers 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_EDGE_COUNTER 配置通道),函数 Icu_GetEdgeNumbers 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00175]

[ ]
  • 如果启用了开发错误检测,则函数 Icu_GetEdgeNumbers 将在检测到错误时返回“0”。

[SWS_Icu_00400]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_StartSignalMeasurement

[SWS_Icu_00208]

[ ]

[SWS_Icu_00334]

[ ]
  • 函数 Icu_StartSignalMeasurement 应为可重入的。

[SWS_Icu_00140]

[ ]
  • 函数 Icu_StartSignalMeasurement 将从配置的默认起始边沿开始启动信号的测量,该起始边沿在调用此服务后首次出现。

[SWS_Icu_00141]

[ ]
  • Icu_StartSignalMeasurement 函数仅在测量模式“ICU_MODE_SIGNAL_MEASUREMENT”下可用。

[SWS_Icu_00146]

[ ]
  • 函数 Icu_StartSignalMeasurement 将把给定通道的状态重置为 ICU_IDLE

[SWS_Icu_00142]

[ ]
  • 函数 Icu_StartSignalMeasurement 应在编译前通过配置参数 IcuSignalMeasurementApi 进行配置。

[SWS_Icu_00335]

[ ]
  • Icu_StartSignalMeasurement 函数可通过配置参数 IcuSignalMeasurementApi 配置为 ON/OFF

[SWS_Icu_00176]

[ ]
  • 如果启用了开发错误检测,函数 Icu_StartSignalMeasurement 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_SIGNAL_MEASUREMENT 配置通道),函数 Icu_StartSignalMeasurement 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00401]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_StopSignalMeasurement

[SWS_Icu_00209]

[ ]

[SWS_Icu_00336]

[ ]
  • 函数 Icu_StopSignalMeasurement 须为可重入的。

[SWS_Icu_00143]

[ ]
  • 函数 Icu_StopSignalMeasurement 将停止给定通道的信号测量。

[SWS_Icu_00144]

[ ]
  • Icu_StopSignalMeasurement 函数仅在测量模式“ICU_MODE_SIGNAL_MEASUREMENT”下可用。

[SWS_Icu_00145]

[ ]
  • 函数 Icu_StopSignalMeasurement 应在编译前通过配置参数 IcuSignalMeasurementApi 进行配置。

[SWS_Icu_00337]

[ ]
  • Icu_StopSignalMeasurement 功能可通过配置参数 IcuSignalMeasurementApi 配置为开启/关闭

[SWS_Icu_00177]

[ ]
  • 如果启用了开发错误检测,函数 Icu_StopSignalMeasurement 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_SIGNAL_MEASUREMENT 配置通道),函数 Icu_StopSignalMeasurement 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00402]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_GetTimeElapsed

[SWS_Icu_00210]

[ ]

[SWS_Icu_00338]

[ ]
  • 函数 Icu_GetTimeElapsed 应为可重入的。

[SWS_Icu_00081]

[SRS_SPAL_12063]
[SRS_Icu_12442]
  • 函数 Icu_GetTimeElapsed 将读取在测量模式“信号测量,信号电平时间”中配置的给定通道的连续信号电平时间。连续时间是在通道的下降沿和随后的上升沿之间测量的。

[SWS_Icu_00082]

[SRS_SPAL_12063]
[SRS_Icu_12435]
  • 函数 Icu_GetTimeElapsed 将读取在测量模式“信号测量,信号电平时间”中配置的给定通道的连续信号电平时间。连续时间是在通道的上升沿和随后的下降沿之间测量的。

[SWS_Icu_00083]

[SRS_SPAL_12063]
[SRS_Icu_12443]
  • 函数 Icu_GetTimeElapsed 将读取在测量模式“信号测量,信号周期时间”中配置的给定通道的连续信号周期时间。连续时间是在通道的连续上升沿(或下降沿)之间测量的。周期起始沿是可配置的。

[SWS_Icu_00136]

[ ]
  • 如果没有捕获请求的时间,函数 Icu_GetTimeElapsed 将返回“0”(见图 9.19,字母“A”)。

[SWS_Icu_00339]

[ ]
  • 如果请求的时间捕获正在进行且尚未完成,函数 Icu_GetTimeElapsed 将返回“0”(见图 9.19,字母“B”)。

[SWS_Icu_00340]

[ ]
  • 如果此服务已经返回过一次捕获的时间,并且再次调用此服务,则函数 Icu_GetTimeElapsed 将返回“0”(参见图 9.19,字母“D”)。

[SWS_Icu_00105]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_GetTimeElapsed 应在编译前通过配置参数 IcuGetTimeElapsedApi 进行配置。

[SWS_Icu_00341]

[ ]
  • Icu_GetTimeElapsed 函数可通过配置参数 IcuGetTimeElapsedApi 配置为开启/关闭

[SWS_Icu_00178]

[ ]
  • 如果启用了开发错误检测,则此服务应检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_SIGNAL_MEASUREMENT 配置通道),则应向默认错误跟踪器报告错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00179]

[ ]
  • 如果启用了开发错误检测并且检测到错误,该服务将返回“0”。

[SWS_Icu_00403]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_GetDutyCycleValues

[SWS_Icu_00211]

[ ]

[SWS_Icu_00342]

[ ]
  • 函数 Icu_GetDutyCycleValues 应为可重入的。

[SWS_Icu_00084]

[SRS_Icu_12436]
  • 如果在测量模式“信号测量、占空比值”中配置,函数 Icu_GetDutyCycleValues 将读取给定 ICU 通道的连贯活动时间和周期时间。

[SWS_Icu_00137]

[ ]
  • 如果没有捕获到连贯的活动时间和周期时间,函数 Icu_GetDutyCycleValues 将返回“0”(类似于图 9.19,字母“A”)。

[SWS_Icu_00343]

[ ]
  • 如果请求的电平和周期时间的捕获正在进行且完成,则函数 Icu_GetDutyCycleValues 应返回“0”(意味着:该函数应返回“0”,直到捕获到第一个有效值,并且应存储捕获的值,直到捕获到新值)(类似于图 9.19,字母“B”)。

[SWS_Icu_00344]

[ ]
  • 如果此服务已经返回过一次捕获的占空比值,并且再次调用此服务,则函数 Icu_GetDutyCycleValues 将返回“0”(类似于图 9.19,字母“D”)。

[SWS_Icu_00106]

[SRS_BSW_00410]
[SRS_BSW_00171]
  • 函数 Icu_GetDutyCycleValues 应在编译前通过配置参数 IcuGetDutyCycleValuesApi 进行配置。

[SWS_Icu_00345]

[ ]
  • Icu_GetDutyCycleValues 函数可通过配置参数 IcuGetDutyCycleValuesApi 配置为 ON/OFF

[SWS_Icu_00180]

[ ]
  • 如果启用了开发错误检测:函数 Icu_GetDutyCycleValues 将检查参数 Channel。如果 Channel 无效(无效标识符或未为模式 ICU_MODE_SIGNAL_MEASUREMENT、占空比值配置通道),函数 Icu_GetDutyCycleValues 将引发开发错误 ICU_E_PARAM_CHANNEL

[SWS_Icu_00181]

[ ]
  • 如果启用了开发错误检测,函数 Icu_GetDutyCycleValues 应检查参数 DutyCycleValues。如果 DutyCycleValues 无效,函数 Icu_GetDutyCycleValues 应引发开发错误 ICU_E_PARAM_POINTER

[SWS_Icu_00404]

[SRS_BSW_00323]
[SRS_BSW_00406]
  • 如果启用了 ICU 模块的开发错误检测:当尚未调用函数 Icu_Init 时,此函数将引发开发错误 ICU_E_UNINIT

Icu_GetVersionInfo

[SWS_Icu_00212]

[ ]

[SWS_Icu_00356]

[ ]
  • 如果启用了 ICU 模块的开发错误检测:函数 Icu_GetVersionInfo 应检查参数 versioninfo 是否为 NULL,如果检查失败,则应引发开发错误代码 ICU_E_PARAM_VINFO

Icu_DisableNotificationAsync

[SWS_Icu_91002]

[ ]

Icu_EnableNotificationAsync

[SWS_Icu_91003]

[ ]

预期接口


强制接口

本章定义了实现模块核心功能所需的所有接口。

[SWS_Icu_91001]

[ ]

可选接口

本章定义了实现模块可选功能所需的所有接口。

[SWS_Icu_00213]
[ ]

如果以下所有条件都为真,则将调用服务 EcuM_CheckWakeup

[SWS_Icu_00055]

[SRS_SPAL_12069]
[SRS_BSW_00410]
  • 静态配置参数 IcuReportWakeupSource 设置为“ON”。

[SWS_Icu_00056]

[SRS_SPAL_12069]
  • 模块处于 ICU_MODE_SLEEP 模式。

[SWS_Icu_00057]

[SRS_SPAL_12069]
  • 唤醒事件发生在具有唤醒功能的 ICU 通道上。

[SWS_Icu_00228]

[ ]
  • EcuM_CheckWakeup 应在中断服务程序中调用,该服务程序为具有唤醒功能的通道上的 ICU 通道唤醒事件提供服务。

[SWS_Icu_00229]

[ ]
  • 如果硬件上有要求,则提供唤醒事件的 ISR 应负责重置中断标志。

可配置接口

本章列出了所有可以配置目标函数的接口。目标函数通常是一个回调函数。这类接口的名称并不固定,因为它们是可配置的。

[SWS_Icu_00119]

[SRS_SPAL_12129]
  • ISR 应重置中断标志(如果硬件需要)并调用相应的通知函数。

[SWS_Icu_00018]

[SRS_SPAL_12056]
  • ICU 通知函数应可配置为初始化数据结构 (Icu_ConfigType) 内的函数指针。

[SWS_Icu_00187]

[SRS_BSW_00359]
  • ICU 模块的通知函数应当没有参数,也没有返回值。

[SWS_Icu_00214]

[ ]

[SWS_Icu_00348]

[ ]
  • Icu_SignalNotification_<Channel> 操作的可重入性与该模块无关(一般在这种情况下它是不可重入的)。

[SWS_Icu_00021]

[SRS_SPAL_00157]
[SRS_Icu_12369]
  • 根据 Icu_EnableNotification() 的最后一次调用,如果请求的信号边沿(上升/下降/双沿)发生(每个边沿一次),ICU 模块应调用通知函数 Icu_SignalNotification_<Channel>。

[SWS_Icu_00044]

[SRS_Icu_12305]
  • 仅应提供硬件支持的边缘通知。

[SWS_Icu_00042]

[SRS_Icu_12305]
  • 调用 Icu_DisableNotification 之后,ICU 模块不得调用通知函数 Icu_SignalNotification_<Channel>。

[SWS_Icu_00215]

[SRS_Icu_12444]

[SWS_Icu_00349]

[ ]
  • Icu_TimestampNotification_<Channel> 的重新进入与该模块无关(一般在这种情况下它是不可重新进入的)。

[SWS_Icu_00216]

[ ]
  • 如果获取了请求的时间戳数量(通知间隔 > 0),并且已通过调用 Icu_EnableNotification() 启用通知,则 ICU 模块应调用通知 Icu_TimestampNotification_<Channel>。

[SWS_Icu_00217]

[ ]
  • 调用 Icu_DisableNotification 后,ICU 模块不得调用通知 Icu_TimestampNotification_<Channel>。

[SWS_Icu_00218]

[ ]
  • ICU 模块的通知 Icu_TimestampNotification_<Channel> 依赖于预处理器开关IcuTimestampApi

序列图


Icu_Init



Icu_DeInit



Icu_SetMode






Icu_DisableWakeup



Icu_EnableWakeup



Icu_SetActivationCondition



Icu_DisableNotification



Icu_EnableNotification




Icu_GetInputState



Icu Timestamping



时间戳一般如下图所示:


Icu Edge Counting



Icu_GetTimeElapsed




以下示例展示了捕获信号“高电平时间”之前、期间和之后的典型行为:


Icu_GetDutyCycleValues



Icu_DisableNotificationAsync



Icu_SignalNotification and Icu_GetInputState



Icu_EnableNotificationAsync



配置规范


总体而言,本章定义了配置参数及其在容器中的聚类。

容器和配置参数

[SWS_Icu_00384]

[ ]
  • ICU 模块应拒绝实现不支持的分区映射配置。

Icu





IcuGeneral








[SWS_Icu_CONSTR_00001]

[ ]
  • IcuKernelEcucPartitionRef 引用的 ECUC 分区应为 IcuEcucPartitionRef 引用的 ECUC 分区的子集。

[SWS_Icu_CONSTR_00003]

[ ]
  • 如果 IcuEcucPartitionRef 引用个或ECUC 分区,则 IcuKernelEcucPartitionRef 的多重性应为 1,并且也引用其中一个 ECUC 分区。

IcuOptionalApis

















IcuChannel










[SWS_Icu_CONSTR_00002]

[ ]
  • IcuChannelEcucPartitionRef 引用的 ECUC 分区应为 IcuEcucPartitionRef 引用的 ECUC 分区的子集。

[SWS_Icu_CONSTR_00004]

[ ]
  • 如果 IcuEcucPartitionRef 引用个或ECUC 分区,则 IcuChannelEcucPartitionRef 应具有大于的多重性,并且也引用其中个或ECUC 分区。

IcuSignalEdgeDetection




IcuSignalMeasurement




IcuTimestampMeasurement





IcuWakeup




IcuConfigSet





评论

此博客中的热门博文

ISO 14229-1-2020

AUTOSAR_SWS_CANDriver

Linux Driver Char Device 笔记

AUTOSAR_SWS_PWMDriver

AUTOSAR_SWS_PortDriver

AUTOSAR_SWS_ECUStateManager

EB - MCAL - MCU

EB - MCAL - PWM