跳转至

Icu

1. 简介和功能概述

本文介绍了AUTOSAR基础软件模块ICU驱动程序的功能、API和配置。

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

ICU驱动提供以下服务:

  • 信号边沿通知(signal edge notification)
  • 控制唤醒中断(controlling wakeup interrupts)
  • 周期信号时间测量(periodic signal time measurement)
  • 边沿时间戳(edge time stamping),可用于采集非周期信号
  • 边沿计数(edge counting)

2. 缩略语

Active Time

取决于被捕获信号的起始边沿:起始边沿为下降沿时,Active Time = Low Time;起始边沿为上升沿时,Active Time = High Time;起始边沿为双边沿时,若先出现上升沿则 Active Time = High Time,若先出现下降沿则 Active Time = Low Time。

DEM

诊断事件管理器(Diagnostic Event Manager)。

DET

默认错误跟踪器(Default Error Tracer)。

EcuM

ECU状态管理器(ECU State Manager)。

Enumeration

枚举。在C语言中可以是enum或#define。

ICU

输入捕获单元(Input Capture Unit),而非重症监护室(Intensive Care Unit)。

ICU Channel

表示绑定到一个输入信号、并为所配置测量模式提供硬件资源的逻辑ICU实体。

ICU State

ICU通道的逻辑输入状态,可以是ICU_ACTIVE或ICU_IDLE。

ICU_ACTIVE

ICU通道的输入状态,表示已检测到激活边沿。

ICU_IDLE

ICU通道的输入状态,表示自上次调用Icu_GetInputState()或Icu_Init()以来未检测到激活边沿。

Symbolic name for a channel

通道的符号名,是用名称对句柄的替代。通过该句柄可以在配置结构中找到每个通道及其相关属性。在C语言中可通过#define和enum实现。

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 Diagnostic Event Manager

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(默认错误跟踪器)

检测到的错误的详细描述见第 6.2 章错误分类及第 7 章API规范中各函数的说明。

5.2. MCU 模块

ICU驱动依赖系统时钟、预分频器(prescaler)和PLL。因此ICU定时器tick的时长取决于MCU模块中所做的时钟设置。

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

5.3. OS(操作系统)

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

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

5.4. PORT 模块

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

5.5. EcuM 模块

ICU驱动负责向EcuM上报唤醒中断。

6. 功能规格

6.1. 一般行为

6.1.1. 重入性

为确保数据一致性,Icu模块应提供可重入代码。除以下函数外,不同通道号的Icu模块函数应为可重入的:

6.1.2. 模块模式

Icu模块有 2 种模式:

  • ICU_MODE_NORMAL:正常运行,所有已用中断按通知请求使能。通知可由服务Icu_SetActivationCondition()或IcuDefaultStartEdge配置,并可在调用Icu_SetMode()之前或之后由Icu_DisableNotification()和Icu_EnableNotification()服务选择。
  • ICU_MODE_SLEEP:降功耗运行。睡眠模式下仅提供配置为唤醒能力(wakeup capable)、且在Icu_Init()后通过Icu_EnableWakeup()使能、且未被Icu_DisableWakeup()禁用的唤醒事件。其他所有由本模块处理的中断均被禁用,事件发生时不得导致MCU退出降功耗模式状态(如 idle、halt)。除配置为唤醒能力并经Icu_EnableWakeup显式使能的通道外,所有通道均停止。

6.1.3. 时间单位(Tick)

由于振荡器频率、预分频器等设置由MCU模块和/或其他模块完成,无法据此计算时间。因此时间与tick之间的转换应由上层完成。ICU驱动API服务中使用的所有时间单位均为tick。

6.2. 错误分类

基础软件模块通用规范 [12] 第 7.x 章"错误处理"详细描述了基础软件的错误处理,并给出由五种错误类型组成的分类方案。在此基础上,本节规定ICU驱动在各子类中的具体错误。

6.2.1. 开发错误

错误类型 相关错误代码 错误值
API调用时传入了无效指针 ICU_E_PARAM_POINTER 0x0A
API使用了无效的通道标识符,或通道未针对调用API的功能进行配置 ICU_E_PARAM_CHANNEL 0x0B
API使用了无效或不可行的激活条件 ICU_E_PARAM_ACTIVATION 0x0C
初始化函数失败 ICU_E_INIT_FAILED 0x0D
API使用了无效的缓冲区大小 ICU_E_PARAM_BUFFER_SIZE 0x0E
API Icu_SetMode 使用了无效的模式 ICU_E_PARAM_MODE 0x0F
API在模块未初始化时被调用 ICU_E_UNINIT 0x14
运行操作进行中调用 Icu_SetMode ICU_E_BUSY_OPERATION 0x16
ICU驱动与硬件已初始化时调用 Icu_Init ICU_E_ALREADY_INITIALIZED 0x17
调用 Icu_StartTimestamp 时 NotifyInterval 参数无效(如 "0",即 NotifyInterval < 1) ICU_E_PARAM_NOTIFY_INTERVAL 0x18
调用 Icu_GetVersionInfo 时 versioninfo 参数无效(如 NULL) ICU_E_PARAM_VINFO 0x19

6.2.2. 运行时错误

错误类型 相关错误代码 错误值
在未启动或已停止的通道上调用 Icu_StopTimestamp ICU_E_NOT_STARTED 0x15

6.2.3. 瞬态故障

无瞬态故障。

6.2.4. 生产错误

无生产错误。

6.2.5. 扩展生产错误

无扩展生产错误。

7. API规范

7.1. 导入的类型

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

7.2. 类型定义

7.2.1. Icu_ModeType

枚举类型,取值范围:

  • ICU_MODE_NORMAL(0x00):正常运行,所有已用中断按通知请求使能。
  • ICU_MODE_SLEEP(0x01):降功耗运行,睡眠模式下仅提供配置为唤醒能力的通知。

用于使能/禁用ECU唤醒所不需要的所有中断。可通过Icu.h使用。

7.2.2. Icu_ChannelType

类型,派生自uint。取值范围为实现相关,但并非所有值在该类型内都有效;应选择在特定微控制器平台上最高效的实现。ICU通道的数字标识符。可通过Icu.h使用。

7.2.3. Icu_InputStateType

枚举类型,取值范围:

  • ICU_ACTIVE(0x00):已检测到激活边沿。
  • ICU_IDLE(0x01):自上次调用Icu_GetInputState()或Icu_Init()以来未检测到激活边沿。

ICU通道的输入状态。可通过Icu.h使用。

7.2.4. Icu_ConfigType

结构类型。硬件和实现相关的结构,初始化数据结构的内容与微控制器相关。该类型包含初始化数据。可通过Icu.h使用。

若Icu_ConfigType中每个通道定义为唤醒能力(wakeup capable),则用于校验唤醒原因的函数应为EcuM_CheckWakeup。

7.2.5. Icu_ActivationType

枚举类型,取值范围:

  • ICU_RISING_EDGE(0x00):ICU输入信号出现上升沿时执行相应动作。
  • ICU_FALLING_EDGE(0x01):ICU输入信号出现下降沿时执行相应动作。
  • ICU_BOTH_EDGES(0x02):ICU输入信号出现上升沿或下降沿时执行相应动作。

定义ICU通道的激活类型。可通过Icu.h使用。

7.2.6. Icu_ValueType

类型,派生自uint。取值范围为 0 至定时器寄存器宽度,实现相关;应选择在特定微控制器平台上最高效的实现。时间戳tick和所测经过时间tick的缓冲区宽度。可通过Icu.h使用。

7.2.7. Icu_DutyCycleType

结构类型,元素:

  • ActiveTime:类型Icu_ValueType,通道上测得的一致性有效时间(coherent active-time)。
  • PeriodTime:类型Icu_ValueType,通道上测得的一致性周期时间(coherent period-time)。

包含计算占空比所需值的类型。可通过Icu.h使用。

7.2.8. Icu_IndexType

类型,派生自uint。取值范围为实现相关;应选择在特定微控制器平台上最高效的实现。用于抽象服务Icu_GetTimestampIndex()的返回值。由于支持环形缓冲区处理,且Icu_GetTimestampIndex可返回"0"作为合法真值(而非错误),Icu_IndexType可实现为取值 1..xyz。可通过Icu.h使用。

7.2.9. Icu_EdgeNumberType

类型,派生自uint。取值范围为实现相关;应选择在特定微控制器平台上最高效的实现。用于抽象服务Icu_GetEdgeNumbers()的返回值。可通过Icu.h使用。

7.2.10. Icu_MeasurementModeType

枚举类型,取值范围:

  • ICU_MODE_SIGNAL_EDGE_DETECT(0x00):边沿检测模式。
  • ICU_MODE_SIGNAL_MEASUREMENT(0x01):测量各种可配置边沿之间不同时间的模式。
  • ICU_MODE_TIMESTAMP(0x02):在可配置边沿捕获定时器值的模式。
  • ICU_MODE_EDGE_COUNTER(0x03):在可配置边沿计数的模式。

定义测量模式类型。可通过Icu.h使用。

7.2.11. Icu_SignalMeasurementPropertyType

枚举类型,取值范围:

  • ICU_LOW_TIME(0x00):通道配置为读取经过的信号低电平时间。
  • ICU_HIGH_TIME(0x01):通道配置为读取经过的信号高电平时间。
  • ICU_PERIOD_TIME(0x02):通道配置为读取经过的信号周期时间。
  • ICU_DUTY_CYCLE(0x03):通道配置为读取计算占空比所需的值(一致的有效时间与周期时间)。

定义测量属性类型。可通过Icu.h使用。

7.2.12. Icu_TimestampBufferType

枚举类型,取值范围:

  • ICU_LINEAR_BUFFER(0x00):缓冲区仅填充一次。
  • ICU_CIRCULAR_BUFFER(0x01):到达缓冲区末尾后,驱动从缓冲区起始处重新开始。

定义时间戳测量属性类型。可通过Icu.h使用。

7.3. 函数定义

以下为提供给上层模块的函数列表。

7.3.1. Icu_Init

说明: 初始化驱动。用ConfigPtr参数所引用结构中的值初始化已配置硬件的所有相关寄存器(含清除挂起的中断标志)。初始化后:所有通知被禁用、所有通道的唤醒能力被禁用、所有已用ICU通道状态置为ICU_IDLE、模块模式置为ICU_MODE_NORMAL。若开发错误检测使能且驱动与硬件已初始化时调用本函数,则上报开发错误ICU_E_ALREADY_INITIALIZED并不做任何动作返回。本函数不可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_Init ( const Icu_ConfigType* ConfigPtr )

7.3.2. Icu_DeInit

说明: 将ICU模块去初始化:把配置使用的外设状态设置为与上电复位后相同(只读寄存器除外),仅影响静态配置和/或上次Icu_Init()传入的运行时配置所分配的外设;禁用所有已用中断和通知。重新初始化ICU模块需先执行Icu_DeInit()再执行Icu_Init()。本函数可通过配置参数IcuDeInitApi进行编译期/运行期ON/OFF配置,不可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_DeInit ( void )

7.3.3. Icu_SetMode

说明: 将ICU模块设置为给定模式(ICU_MODE_NORMAL或ICU_MODE_SLEEP),影响各ICU通道的功能,因此模块模式切换必须与ECU整体状态兼容。本函数可通过配置参数IcuSetModeApi进行编译期ON/OFF配置,不可重入。若开发错误检测使能且Mode参数超出配置允许范围,则上报ICU_E_PARAM_MODE。本服务为同步调用,可通过Icu.h获得。

void Icu_SetMode ( Icu_ModeType Mode )

7.3.4. Icu_DisableWakeup

说明: 禁用单个ICU通道的唤醒能力,仅对静态配置为唤醒能力(wakeup capable)为真的通道有效。本函数所做设置仅在设置ICU_MODE_SLEEP后相关。可通过配置参数IcuDisableWakeupApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_DisableWakeup ( Icu_ChannelType Channel )

7.3.5. Icu_EnableWakeup

说明: 重新使能给定ICU通道的唤醒能力,仅对静态配置为唤醒能力为真的通道可行;需再调用请求ICU_MODE_SLEEP的Icu_SetMode方使选择生效。可通过配置参数IcuEnableWakeupApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_EnableWakeup ( Icu_ChannelType Channel )

7.3.6. Icu_CheckWakeup

说明: 检查某个唤醒能力ICU通道是否为唤醒事件的源,若为有效的ICU通道唤醒事件,则调用ECU状态管理器服务EcuM_SetWakeupEvent。仅当IcuReportWakeupSource静态配置为可用时本函数才可行。可通过配置参数IcuWakeupFunctionalityApi进行编译期ON/OFF配置,可重入(限于ICU050)。本服务为同步调用,可通过Icu.h获得。

void Icu_CheckWakeup ( EcuM_WakeupSourceType WakeupSource )

7.3.7. Icu_SetActivationCondition

说明: 为给定通道设置激活边沿(ICU_RISING_EDGE/ICU_FALLING_EDGE/ICU_BOTH_EDGES,若硬件支持),支持配置为ICU_MODE_SIGNAL_EDGE_DETECT、ICU_MODE_TIMESTAMP、ICU_MODE_EDGE_COUNTER测量模式的通道,并将给定通道状态复位为ICU_IDLE。可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_SetActivationCondition ( 
    Icu_ChannelType Channel, Icu_ActivationType Activation )

7.3.8. Icu_DisableNotification

说明: 禁用给定通道的通知。可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_DisableNotification ( Icu_ChannelType Channel )

7.3.9. Icu_EnableNotification

说明: 使能给定通道的通知。可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_EnableNotification ( Icu_ChannelType Channel )

7.3.10. Icu_GetInputState

说明: 返回ICU输入的状态。仅支持配置为ICU_MODE_SIGNAL_EDGE_DETECT或ICU_MODE_SIGNAL_MEASUREMENT测量模式的通道。检测到激活边沿时对边沿检测通道返回ICU_ACTIVE;对于信号测量,通道应直到测量完成且驱动能提供输入信号有用信息时才置为ICU_ACTIVE。一旦返回ICU_ACTIVE,存储的状态即置为ICU_IDLE直至检测到下一个边沿。可通过配置参数IcuGetInputStateApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

Icu_InputStateType Icu_GetInputState ( Icu_ChannelType Channel )

7.3.11. Icu_StartTimestamp

说明: 从缓冲区起始处开始在边沿上捕获定时器值到外部缓冲区。捕获边沿由服务Icu_SetActivationCondition()激活(上升/下降/双边沿)。若配置环形缓冲区处理,到达缓冲区末尾时从起始处重新开始;若配置线性缓冲区处理,到达末尾时停止捕获。仅在配置了通知函数、通知已通过Icu_EnableNotification()使能、NotifyInterval大于"0"且已捕获NotifyInterval指定数量的事件时,才调用通知函数。本函数仅在ICU_MODE_TIMESTAMP测量模式下可用,可通过配置参数ICU_TIMESTAMP_API进行编译期ON/OFF配置,可重入。本服务为异步调用,可通过Icu.h获得。

void Icu_StartTimestamp ( 
    Icu_ChannelType Channel, Icu_ValueType* BufferPtr, 
    uint16 BufferSize, uint16 NotifyInterval )

7.3.12. Icu_StopTimestamp

说明: 停止给定通道的时间戳测量。仅在ICU_MODE_TIMESTAMP测量模式下可用,可通过配置参数IcuTimestampApi进行编译期ON/OFF配置。生产模式下通道未激活(未启动或已停止)时不返回错误。可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_StopTimestamp ( Icu_ChannelType Channel )

7.3.13. Icu_GetTimestampIndex

说明: 读取给定通道的时间戳索引,即下一个待写入位置的索引。在调用Icu_StartTimestamp()之前(无缓冲区定义)调用本服务返回"0"。仅在ICU_MODE_TIMESTAMP测量模式下可用,可通过配置参数IcuTimestampApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

Icu_IndexType Icu_GetTimestampIndex ( Icu_ChannelType Channel )

7.3.14. Icu_ResetEdgeCount

说明: 将计得的边沿数值复位为零。可通过配置参数ICU_EDGE_COUNT_API进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_ResetEdgeCount ( Icu_ChannelType Channel )

7.3.15. Icu_EnableEdgeCount

说明: 使能给定通道的边沿计数(本服务自身不做实际计数),仅计数配置的边沿(上升/下降/双边沿,即Icu_Init()后的默认边沿或Icu_SetActivationCondition()设置的边沿)。对Edge Counter测量模式下的每个ICU通道可用,可通过配置参数ICU_EDGE_COUNT_API进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_EnableEdgeCount ( Icu_ChannelType Channel )

7.3.16. Icu_EnableEdgeDetection

说明: 使能/重新使能给定通道的边沿检测,仅检测配置的边沿(上升/下降/双边沿)。对Edge Detection测量模式下的每个ICU通道可用,可通过配置参数IcuEdgeDetectApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_EnableEdgeDetection ( Icu_ChannelType Channel )

7.3.17. Icu_DisableEdgeDetection

说明: 禁用给定通道的边沿检测。可通过配置参数IcuEdgeDetectApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_DisableEdgeDetection ( Icu_ChannelType Channel )

7.3.18. Icu_DisableEdgeCount

说明: 禁用给定通道的边沿计数(复位边沿计数器请使用服务Icu_ResetEdgeCount())。可通过配置参数IcuEdgeCountApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_DisableEdgeCount ( Icu_ChannelType Channel )

7.3.19. Icu_GetEdgeNumbers

说明: 读取自上次调用Icu_ResetEdgeCount()以来计得的边沿数量。可通过配置参数ICU_EDGE_COUNT_API进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

Icu_EdgeNumberType Icu_GetEdgeNumbers ( Icu_ChannelType Channel )

7.3.20. Icu_StartSignalMeasurement

说明: 从调用本服务后最先出现的配置默认起始边沿开始,启动信号测量,并将给定通道状态复位为ICU_IDLE。仅在ICU_MODE_SIGNAL_MEASUREMENT测量模式下可用,可通过配置参数IcuSignalMeasurementApi进行编译期ON/OFF配置,可重入。本服务为异步调用,可通过Icu.h获得。

void Icu_StartSignalMeasurement ( Icu_ChannelType Channel )

7.3.21. Icu_StopSignalMeasurement

说明: 停止给定通道的信号测量。仅在ICU_MODE_SIGNAL_MEASUREMENT测量模式下可用,可通过配置参数IcuSignalMeasurementApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_StopSignalMeasurement ( Icu_ChannelType Channel )

7.3.22. Icu_GetTimeElapsed

说明: 读取给定通道经过的时间,具体取决于通道所配置的测量模式与测量属性:低电平时间(下降沿与相邻上升沿之间)、高电平时间(上升沿与相邻下降沿之间)或周期时间(相邻上升沿或下降沿之间,周期起始边沿可配置)。尚未捕获到请求的时间、捕获正在进行未完成、或已返回过的捕获值被再次读取时返回"0"。可通过配置参数IcuGetTimeElapsedApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

Icu_ValueType Icu_GetTimeElapsed ( Icu_ChannelType Channel )

7.3.23. Icu_GetDutyCycleValues

说明: 为给定ICU通道读取一致的有效时间与周期时间(配置为"Signal Measurement, Duty Cycle Values"测量模式时),结果(高电平时间与周期时间)写入DutyCycleValues指向的缓冲区。尚未捕获到一致的有效/周期时间、捕获正在进行未完成、或已返回过的值被再次读取时返回"0"。可通过配置参数IcuGetDutyCycleValuesApi进行编译期ON/OFF配置,可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_GetDutyCycleValues ( 
    Icu_ChannelType Channel, Icu_DutyCycleType* DutyCycleValues )

7.3.24. Icu_GetVersionInfo

说明: 返回本模块的版本信息(写入versioninfo指向的位置)。若开发错误检测使能且versioninfo参数为NULL,则上报开发错误ICU_E_PARAM_VINFO。可重入。本服务为同步调用,可通过Icu.h获得。

void Icu_GetVersionInfo ( Std_VersionInfoType* versioninfo )

7.3.25. Icu_DisableNotificationAsync

说明: 禁用给定通道的通知。可重入(限于ICU050)。本服务为异步调用,可通过Icu.h获得。

void Icu_DisableNotificationAsync ( Icu_ChannelType Channel )

7.3.26. Icu_EnableNotificationAsync

说明: 使能给定通道的通知。可重入(限于ICU050)。本服务为异步调用,可通过Icu.h获得。

void Icu_EnableNotificationAsync ( Icu_ChannelType Channel )

7.4. 回调通知

由于ICU是驱动模块,不向下层模块提供任何回调函数。

7.5. 预期接口

7.5.1. 必需接口

API 函数 头文件 描述
Det_ReportRuntimeError Det.h 上报运行时错误的服务。若配置了回调(callout),则调用该回调。

7.5.2. 可选接口

API 函数 头文件 描述
Det_ReportError Det.h 上报开发错误的服务。
EcuM_CheckWakeup EcuM.h 检查给定唤醒源,将参数传给集成函数EcuM_CheckWakeupHook;也可由唤醒源的中断服务程序调用以建立PLL并检查可能连接到同一中断的其他唤醒源。
EcuM_SetWakeupEvent EcuM.h 设置唤醒事件。

当以下条件全部满足时,将调用服务EcuM_CheckWakeup:

  • 静态配置参数IcuReportWakeupSource设置为"ON";
  • 模块处于ICU_MODE_SLEEP模式;
  • 唤醒能力ICU通道上发生唤醒事件。

EcuM_CheckWakeup应在唤醒能力通道的唤醒事件所对应的中断服务程序内被调用。提供唤醒事件的中断服务程序应在硬件需要时负责清除中断标志。

7.5.3. 可配置接口

以下接口的目标函数可配置(通常为回调函数),名称不固定。中断服务程序应在硬件需要时清除中断标志,并调用相应的通知函数。Icu通知函数可在初始化数据结构(Icu_ConfigType)中配置为函数指针,且应无参数、无返回值。

Icu_SignalNotification_\<Channel>

说明: 根据最近一次Icu_EnableNotification的调用,当请求的信号边沿(上升/下降/双边沿)出现时(每个边沿一次)调用此通知函数。可通过Icu_Externals.h获得。本服务为同步调用。

void Icu_SignalNotification_<Channel> ( void )

Icu_TimestampNotification_\<Channel>

说明: 当已获取到请求数量的时间戳(Notification interval > 0)且通知已通过Icu_EnableNotification()使能时,调用此通知函数。该通知依赖预处理开关IcuTimestampApi。可通过Icu_Externals.h获得。本服务为同步调用。

void Icu_TimestampNotification_<Channel> ( void )

8. 时序图

以下时序图按 AUTOSAR_SWS_ICUDriver(R22-11)第 9 章绘制,参与方包括ICU用户(如软件组件)、Icu驱动、EcuM(ECU状态管理器)、ICU输入通道、硬件/应用缓冲区及中断服务程序(ISR)。

8.1. Icu_Init

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    U->>D: Icu_Init(ConfigPtr)
    Note over D: 所用硬件按引用配置结构配置
    Note over D: 模块工作于 ICU_MODE_NORMAL
    Note over D: a) 所有通知被禁用
    Note over D: b) 所有已用中断被禁用
    D-->>U: return()

8.2. Icu_DeInit

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    U->>D: Icu_DeInit()
    Note over D: 所用硬件按引用配置结构配置
    Note over D: a) 所有通知被禁用
    Note over D: b) 所有已用中断被禁用
    D-->>U: return()

8.3. 检查唤醒事件(Check Wakeup Events)

ICU的唤醒事件检查时序图见ECU状态管理器规范 [10](AUTOSAR_SWS_ECUStateManager.pdf),本文档不重复给出。

8.4. Icu_SetMode

初始条件:ICU驱动已初始化——a) 模块工作于ICU_MODE_NORMAL;b) 通知禁用;c) 通道 #1 非唤醒能力;d) 通道 #2 唤醒能力;e) 见各图。通道 #1 与 #2 输入信号均为低电平。

8.4.1. SLEEP 模式下通知使能(IcuReportWakeupSource = ON)

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant E as EcuM
    participant C1 as Channel #1
    participant C2 as Channel #2
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_FALLING_EDGE)
    U->>D: Icu_EnableNotification(Channel #1)
    U->>D: Icu_SetActivationCondition(Channel #2, ICU_RISING_EDGE)
    U->>D: Icu_EnableWakeup(Channel #2)
    U->>D: Icu_EnableNotification(Channel #2)
    U->>D: Icu_SetMode(ICU_MODE_SLEEP)
    Note over D: 模块进入 Sleep 模式
    C1-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel1(void)
    C2-->>D: 检测到唤醒事件
    D->>E: EcuM_CheckWakeup(Channel #2)
    D->>D: Icu_CheckWakeup(Channel #2)
    D->>E: EcuM_SetWakeupEvent(Channel #2)
    C2-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel2(void)
    U->>D: Icu_SetMode(Mode := ICU_MODE_NORMAL)
    D->>E: EcuM_CheckWakeup(Channel #2)
    D-->>U: return()

8.4.2. SLEEP 模式下不报告唤醒源(IcuReportWakeupSource = OFF)

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C1 as Channel #1
    participant C2 as Channel #2
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_FALLING_EDGE)
    U->>D: Icu_EnableNotification(Channel #1)
    U->>D: Icu_SetActivationCondition(Channel #2, ICU_RISING_EDGE)
    U->>D: Icu_EnableWakeup(Channel #2)
    U->>D: Icu_EnableNotification(Channel #2)
    U->>D: Icu_SetMode(ICU_MODE_SLEEP)
    C1-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel1(void)
    C2-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel2(void)
    Note over D: 因 ICU_REPORT_WAKEUP_SOURCE == OFF,不调用 EcuM_CheckWakeup
    D-->>U: return()

8.4.3. SLEEP 模式下边沿通知被禁用(IcuReportWakeupSource = ON)

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant E as EcuM
    participant C1 as Channel #1
    participant C2 as Channel #2
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_FALLING_EDGE)
    U->>D: Icu_EnableNotification(Channel #1)
    U->>D: Icu_SetActivationCondition(Channel #2, ICU_RISING_EDGE)
    U->>D: Icu_EnableWakeup(Channel #2)
    U->>D: Icu_DisableNotification(Channel #2)
    U->>D: Icu_SetMode(ICU_MODE_SLEEP)
    C1-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel1(void)
    C2-->>D: 检测到有效唤醒事件
    D->>E: EcuM_CheckWakeup(Channel #2)
    D->>D: Icu_CheckWakeup(Channel #2)
    D->>E: EcuM_SetWakeupEvent(Channel #2)
    Note over D: 通道 #2 上升沿通知已禁用,故不调用其通知
    D-->>U: return()

8.4.4. SLEEP 模式下通知未使能(IcuReportWakeupSource = ON)

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant E as EcuM
    participant C1 as Channel #1
    participant C2 as Channel #2
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_FALLING_EDGE)
    U->>D: Icu_EnableNotification(Channel #1)
    U->>D: Icu_SetActivationCondition(Channel #2, ICU_RISING_EDGE)
    U->>D: Icu_EnableWakeup(Channel #2)
    U->>D: Icu_SetMode(ICU_MODE_SLEEP)
    C1-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel1(void)
    C2-->>D: 检测到有效唤醒事件
    D->>E: EcuM_CheckWakeup(Channel #2)
    D->>D: Icu_CheckWakeup(Channel #2)
    D->>E: EcuM_SetWakeupEvent(Channel #2)
    Note over D: 通道 #2 通知未使能,故不调用其上升沿通知
    D-->>U: return()

8.5. Icu_DisableWakeup

初始条件:ICU驱动已初始化——a) 模块工作于ICU_MODE_NORMAL;b) 通道 #1 唤醒能力,默认起始边沿 = ICU_RISING_EDGE;c) 通道 #2 唤醒能力,默认起始边沿 = ICU_RISING_EDGE;d) 通道 #1 唤醒通知禁用;e) 通道 #2 唤醒通知禁用;f) ICU_NOTIFY_WAKEUP_REASON = ON。两通道输入信号均为低电平。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant E as Ecu State Manager
    participant C1 as Channel #1
    participant C2 as Channel #2
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_EnableWakeup(Channel #1)
    U->>D: Icu_EnableNotification(Channel #1)
    U->>D: Icu_EnableNotification(Channel #2)
    U->>D: Icu_SetMode(ICU_MODE_SLEEP)
    U->>D: Icu_DisableWakeup(Channel #1)
    Note over D: 禁用通道 #1 唤醒能力的请求已存储
    Note over D: 通道 #1 唤醒能力将被禁用
    C2-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel2(void)
    D->>E: EcuM_CheckWakeup(WakeupSource)
    Note over D: 调用唤醒通知
    D-->>U: return()

8.6. Icu_EnableWakeup

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant E as Ecu State Manager
    participant C1 as Channel #1
    participant C2 as Channel #2
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_EnableWakeup(Channel #1)
    U->>D: Icu_EnableNotification(Channel #1)
    U->>D: Icu_EnableNotification(Channel #2)
    U->>D: Icu_SetMode(ICU_MODE_SLEEP)
    C1-->>D: 上升沿通知
    D->>E: EcuM_CheckWakeup(WakeupSource)
    Note over D: 调用唤醒通知
    Note over D: 先前有效唤醒后,驱动在 ICU_MODE_NORMAL 下工作一段时间
    U->>D: Icu_EnableWakeup(Channel #2)
    Note over D: 使能通道 #2 唤醒能力的请求已存储
    Note over D: 重新使能通道 #1 的唤醒能力
    C2-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel2(void)
    U->>D: Icu_SetMode(ICU_MODE_SLEEP)
    D-->>U: return()

8.7. Icu_SetActivationCondition

初始条件:ICU驱动已初始化,通道 #1 唤醒能力,默认起始边沿 = ICU_BOTH_EDGES。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C1 as Channel #1
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_EnableNotification(Channel #1)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_FALLING_EDGE)
    C1-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel1(void)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_RISING_EDGE)
    C1-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel1(void)
    D-->>U: return()

8.8. Icu_DisableNotification

初始条件:ICU驱动已初始化,通道 #1 唤醒能力,默认起始边沿 = ICU_BOTH_EDGES。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C1 as Channel #1
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_EnableNotification(Channel #1)
    C1-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel1()
    C1-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel1()
    U->>D: Icu_DisableNotification(Channel #1)
    Note over D: 禁用此通道的所有通知
    Note over C1: 不再调用任何通知
    D-->>U: return()

8.9. Icu_EnableNotification

8.9.1. 使能通道的边沿通知

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel, ICU_RISING_EDGE)
    U->>D: Icu_EnableNotification(Channel)
    C-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    U->>D: Icu_SetActivationCondition(Channel, ICU_FALLING_EDGE)
    C-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    U->>D: Icu_SetActivationCondition(Channel, ICU_BOTH_EDGES)
    C-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    C-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    D-->>U: return()

8.9.2. 重新使能通道的通知

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel, ICU_BOTH_EDGES)
    U->>D: Icu_EnableNotification(Channel)
    C-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    C-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    U->>D: Icu_DisableNotification(Channel)
    C-->>D: 下降沿通知
    C-->>D: 上升沿通知
    Note over D: 禁用期间发生的 2 个边沿不通知用户
    Note over D: 该通知被丢弃,重新使能时不补发
    U->>D: Icu_EnableNotification(Channel)
    C-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    D-->>U: return()

8.10. Icu_GetInputState

初始条件:ICU驱动已初始化——a) 模块工作于ICU_MODE_NORMAL;b) 通知函数配置为NULL指针。输入信号为高电平。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel, ICU_FALLING_EDGE)
    U->>D: Icu_EnableNotification(Channel)
    U->>D: Icu_GetInputState(Channel)
    D-->>U: return(ICU_IDLE)
    C-->>D: 下降沿(NULL 指针配置,不调用通知)
    U->>D: Icu_GetInputState(Channel)
    D-->>U: return(ICU_ACTIVE)
    D-->>U: return()

8.11. Icu 时间戳

8.11.1. 时间戳功能概览

初始条件:ICU驱动已初始化——a) 所有通知禁用;b) 所有已用中断禁用。输入信号为高电平。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant H as Hardware
    participant B as Application Buffer
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_FALLING_EDGE)
    U->>D: Icu_StartTimestamp(Channel #1, *BufferPtr, BufferSize, NotifyInterval)
    H-->>D: Interrupt()
    D->>H: capture value()
    H-->>D: Interrupt()
    D->>H: capture value()
    H-->>D: Interrupt()
    D->>H: capture value()
    U->>D: Icu_GetTimestampIndex(Channel #1)
    D-->>U: return(3)
    U->>D: Icu_StopTimestamp(Channel #1)
    D-->>U: return()

8.11.2. 时间戳波形说明

下图示意定时器值与输入信号边沿的对应关系:定时器从 0 起计数,输入信号高低电平交替,在每个配置边沿捕获定时器值(如 5461、10922、22937、32767、43690、49151、58981 等,达 0xFFFF 后回绕)。上层据此结合MCU时钟设置将tick转换为时间。

捕获点 定时器值
边沿 1 5461
边沿 2 10922
边沿 3 22937
边沿 4 32767
边沿 5 43690
边沿 6 49151
边沿 7 58981
回绕后 6553

8.12. Icu 边沿计数

初始条件:ICU驱动已初始化——a) 所有通知禁用;b) 所有已用中断禁用。输入信号为高电平。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant H as Hardware
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel #1, ICU_RISING_EDGE)
    U->>D: Icu_ResetEdgeCount(Channel #1)
    U->>D: Icu_EnableEdgeCount(Channel #1)
    H-->>D: Interrupt()
    D->>H: count edge()
    H-->>D: Interrupt()
    D->>H: count edge()
    H-->>D: Interrupt()
    D->>H: count edge()
    U->>D: Icu_GetEdgeNumbers(Channel #1)
    D-->>U: return(3)
    U->>D: Icu_DisableEdgeCount(Channel #1)
    D-->>U: return()

若未调用Icu_ResetEdgeCount则计数器不复位,Icu_GetEdgeNumbers直接返回当前计数值(如 3)。

8.13. Icu_GetTimeElapsed

8.13.1. 低电平时间测量

初始条件:ICU驱动已初始化,通道 #1 配置为:a) 驱动配置中的测量模式 = SignalMeasurement;b) 信号测量属性 = LowTime。信号仍为低电平。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel #1
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(0)
    Note over D: 信号仍为低电平且未检测到后续上升沿
    C-->>D: 上升沿(低电平 150 ticks)
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(150)

8.13.2. 周期时间测量

初始条件:通道 #1 配置为:a) 测量模式 = SignalMeasurement;b) 信号测量属性 = PeriodTime;c) 默认周期起始边沿 = ICU_FALLING_EDGE。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel #1
    U->>D: Icu_Init(ConfigPtr)
    C-->>D: 下降沿启动周期(210 ticks)
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(210)
    C-->>D: 下降沿启动周期(100 ticks)
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(100)
    D-->>U: return()

8.13.3. 高电平时间测量(A/B/C/D 示例)

初始条件:通道 #1 配置为:a) 测量模式 = SignalMeasurement;b) 信号测量属性 = HighTime。该行为同样适用于Icu_GetDutyCycleValues()。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel #1
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(0)
    Note over D: A:尚未捕获到有效高电平时间
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(0)
    Note over D: B:捕获正在进行未完成
    C-->>D: 高电平 200 ticks
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(200)
    U->>D: Icu_GetTimeElapsed(Channel #1)
    D-->>U: return(0)
    Note over D: D:该捕获值已返回过一次
    D-->>U: return()

8.14. Icu_GetDutyCycleValues

初始条件:通道 #1 配置为:a) 测量模式 = SignalMeasurement;b) 信号测量属性 = DutyCycle;c) 默认周期起始边沿 = ICU_RISING_EDGE。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant B as DCValueBuffer
    participant C as Channel #1
    U->>D: Icu_Init(ConfigPtr)
    C-->>D: 高电平 40 ticks / 周期 110 ticks
    U->>D: Icu_GetDutyCycleValues(Channel #1, DCValueBuffer_p)
    D->>B: write to buffer(ActiveTime = 40, PeriodTime = 110)
    C-->>D: 高电平 50 ticks / 周期 110 ticks
    U->>D: Icu_GetDutyCycleValues(Channel #1, DCValueBuffer_p)
    D->>B: write to buffer(ActiveTime = 50, PeriodTime = 110)

8.15. Icu_DisableNotificationAsync

初始条件:ICU驱动已初始化,通道 #1 唤醒能力,默认起始边沿 = ICU_BOTH_EDGES。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel #1
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_EnableNotification(Channel #1)
    C-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel1()
    C-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel1()
    U->>D: Icu_DisableNotificationAsync(Channel #1)
    Note over D: 异步禁用此通道的所有通知
    Note over C: 不再调用任何通知
    D-->>U: return()

8.16. Icu_SignalNotification 与 Icu_GetInputState 的协同使用

初始条件:ICU驱动已初始化,所用硬件按引用配置结构配置,输入信号为高电平。

sequenceDiagram
    participant U as Icu User
    participant H as ICU Hardware
    participant I as ISR
    participant D as Icu Driver
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel, Activation)
    U->>D: Icu_EnableNotification(Channel)
    U->>D: Icu_GetInputState(return, Channel)
    D-->>U: Icu_GetInputState = ICU_IDLE()
    H-->>I: 输入信号变为低电平
    I->>I: Set Flag()
    I->>D: Interrupt()
    D->>I: check and reset Flag()
    I->>D: Icu_SignalNotification_Channel()
    D->>U: Icu_SignalNotification_Channel()
    I-->>I: return from ISR()
    U->>D: Icu_GetInputState(return, Channel)
    D-->>U: Icu_GetInputState = ICU_ACTIVE()

8.17. Icu_EnableNotificationAsync

初始条件:ICU驱动已初始化,所用硬件按引用配置结构配置,所有通知禁用。

sequenceDiagram
    participant U as ICU User
    participant D as Icu Driver
    participant C as Channel
    U->>D: Icu_Init(ConfigPtr)
    U->>D: Icu_SetActivationCondition(Channel, ICU_RISING_EDGE)
    U->>D: Icu_EnableNotificationAsync(Channel)
    C-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    U->>D: Icu_SetActivationCondition(Channel, ICU_FALLING_EDGE)
    C-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    U->>D: Icu_SetActivationCondition(Channel, ICU_BOTH_EDGES)
    C-->>D: 上升沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    C-->>D: 下降沿通知
    D-->>U: Icu_SignalNotification_Channel(void)
    D-->>U: return()

9. 配置规范

总体而言,本章定义配置参数及其到容器(container)的聚类组织。为支持本规范,第 9.1 章描述相关基础知识,并规定参数规范所应使用的模板(表格)。我们有意将第 9.1 章保留在规范中,以保证可理解性。

第 9.2 章规定ICU模块的结构(容器)与参数。

第 9.3 章规定ICU模块的发布信息。

9.1. 如何阅读本章

详情请参阅 SWS_BSWGeneral 中的第 10.1 章 "Introduction to configuration specification"(配置规范导论)。

9.2. 容器与配置参数

以下各节汇总所有配置参数。各参数的详细含义见第 6 章和第 7 章。

ICU 模块应拒绝实现所不支持的、带有分区映射的配置。

9.2.1. Icu

SWS 条目
模块名称 Icu
描述 Icu(Input Capture Unit,输入捕获单元)模块的配置。
Post-Build 变体支持 true
支持的配置变体 VARIANT-POST-BUILD, VARIANT-PRE-COMPILE
容器名称 多重性 作用域/依赖
IcuConfigSet 1 此容器包含 AUTOSAR Icu 模块的配置参数与子容器。
IcuGeneral 1 常规 ICU 参数的配置。
IcuOptionalApis 1 此容器包含用于配置 ICU 驱动可选 API 服务的所有配置开关。

9.2.2. IcuGeneral

SWS 条目
容器名称 IcuGeneral
父容器 Icu
描述 常规 ICU 参数的配置。
配置参数 见下方参数表
SWS 条目
参数名称 IcuDevErrorDetect
父容器 IcuGeneral
描述 开启或关闭开发错误检测与通知(true:启用检测与通知;false:禁用检测与通知)。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuReportWakeupSource
父容器 IcuGeneral
描述 唤醒源上报开关(true:上报唤醒源;false:不上报唤醒源)。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuEcucPartitionRef
父容器 IcuGeneral
描述 将 ICU 驱动映射到零个或多个 ECUC 分区,以使驱动 API 在相应分区中可用。
多重性 0..*
类型 对 EcucPartition 的引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x;Link time:-;Post-build time:-
值配置类 Pre-compile time:x;Link time:-;Post-build time:-
作用域/依赖 scope: ECU
SWS 条目
参数名称 IcuKernelEcucPartitionRef
父容器 IcuGeneral
描述 将 ICU 内核映射到零个或一个 ECUC 分区,以将驱动内核分配到某个特定内核。所引用的 ECUC 分区是 ICU 驱动所映射到的 ECUC 分区的子集。
多重性 0..1
类型 对 EcucPartition 的引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: ECU

无包含的容器。

IcuKernelEcucPartitionRef 所引用的 ECUC 分区应是 IcuEcucPartitionRef 所引用的 ECUC 分区的子集。

若 IcuEcucPartitionRef 引用一个或多个 ECUC 分区,则 IcuKernelEcucPartitionRef 的多重性应为一,并且也应引用这些 ECUC 分区之一。

9.2.3. IcuOptionalApis

SWS 条目
容器名称 IcuOptionalApis
父容器 Icu
描述 此容器包含用于配置 ICU 驱动可选 API 服务的所有配置开关。
配置参数 见下方参数表
SWS 条目
参数名称 IcuDeInitApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_DeInit() 服务(true:可以使用 Icu_DeInit();false:不可使用 Icu_DeInit())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuDisableWakeupApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_DisableWakeup() 服务(true:可以使用 Icu_DisableWakeup();false:不可使用 Icu_DisableWakeup())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuEdgeCountApi
父容器 IcuOptionalApis
描述 在代码中添加/移除以下服务:Icu_ResetEdgeCount()、Icu_GetEdgeNumbers()、Icu_EnableEdgeCount()、Icu_DisableEdgeCount()(true:可以使用这些服务;false:不可使用这些服务)。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuEdgeDetectApi
父容器 IcuOptionalApis
描述 在代码中添加/移除与边沿检测功能相关的服务:Icu_EnableEdgeDetection() 和 Icu_DisableEdgeDetection()(true:可以使用这些服务;false:不可使用这些服务)。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuEnableWakeupApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_EnableWakeup() 服务(true:可以使用 Icu_EnableWakeup();false:不可使用 Icu_EnableWakeup())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuGetDutyCycleValuesApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_GetDutyCycleValues() 服务(true:可以使用 Icu_GetDutyCycleValues();false:不可使用 Icu_GetDutyCycleValues())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local dependency: 若 IcuSignalMeasurementApi 为 false,则此开关也应设为 false
SWS 条目
参数名称 IcuGetInputStateApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_GetInputState() 服务(true:可以使用 Icu_GetInputState();false:不可使用 Icu_GetInputState())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuGetTimeElapsedApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_GetTimeElapsed() 服务(true:可以使用 Icu_GetTimeElapsed();false:不可使用 Icu_GetTimeElapsed())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local dependency: 若 IcuSignalMeasurementApi 为 false,则此开关也应设为 false
SWS 条目
参数名称 IcuGetVersionInfoApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_GetVersionInfo() 服务(true:可以使用 Icu_GetVersionInfo();false:不可使用 Icu_GetVersionInfo())。
多重性 1
类型 EcucBooleanParamDef
默认值 false
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuSetModeApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_SetMode() 服务(true:可以使用 Icu_SetMode();false:不可使用 Icu_SetMode())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuSignalMeasurementApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_StartSignalMeasurement() 和 Icu_StopSignalMeasurement() 服务(true:可以使用这些服务;false:不可使用这些服务)。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuTimestampApi
父容器 IcuOptionalApis
描述 在代码中添加/移除下列所有与时间戳功能相关的服务:Icu_StartTimestamp()、Icu_StopTimestamp()、Icu_GetTimestampIndex() 等(true:可以使用这些服务;false:不可使用这些服务)。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local
SWS 条目
参数名称 IcuWakeupFunctionalityApi
父容器 IcuOptionalApis
描述 在代码中添加/移除 Icu_CheckWakeup() 服务(true:可以使用 Icu_CheckWakeup();false:不可使用 Icu_CheckWakeup())。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: local

无包含的容器。

9.2.4. IcuChannel

SWS 条目
容器名称 IcuChannel
父容器 IcuConfigSet
描述 单个 ICU 通道的配置。
配置参数 见下方参数表
SWS 条目
参数名称 IcuChannelId
父容器 IcuChannel
描述 ICU 通道的通道 ID。该值将赋给由 IcuChannel 容器短名派生的符号名。
多重性 1
类型 EcucIntegerParamDef(为此参数生成符号名)
范围 0 .. 65535
默认值 -
Post-Build 变体值 false
值配置类 Pre-compile time:x(All Variants);Link time:-;Post-build time:-
作用域/依赖 scope: ECU
SWS 条目
参数名称 IcuDefaultStartEdge
父容器 IcuChannel
描述 默认边沿(Condition())。当测量模式设置为 "IcuSignalMeasurement"、"DutyCycle" 或 "Period" 时,此处配置的边沿为周期起始边沿。实现类型:Icu_ActivationType
多重性 1
类型 EcucEnumerationParamDef
范围 ICU_BOTH_EDGES:默认使用两个边沿;ICU_FALLING_EDGE:默认使用下降沿;ICU_RISING_EDGE:默认使用上升沿
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目
参数名称 IcuMeasurementMode
父容器 IcuChannel
描述 配置此通道的测量模式。实现类型:Icu_MeasurementModeType
多重性 1
类型 EcucEnumerationParamDef
范围 ICU_MODE_EDGE_COUNTER:该通道用于对通过调用服务 Icu_SetActivationCondition() 所配置的边沿进行计数。支持此模式的 API 服务有:Icu_EnableEdgeCount()、Icu_DisableEdgeCount()、Icu_GetEdgeNumbers()、Icu_ResetEdgeCount();ICU_MODE_SIGNAL_EDGE_DETECT:该通道用于检测通过调用服务 Icu_SetActivationCondition() 所配置的边沿。支持此模式的 API 服务有:Icu_EnableNotification()、Icu_DisableNotification()、Icu_GetInputState();ICU_MODE_SIGNAL_MEASUREMENT:该通道用于测量各个可配置边沿之间的不同时间。周期起始边沿的配置由配置完成,且在运行期间不可更改。支持此模式的 API 服务有:Icu_GetTimeElapsed()、Icu_GetDutyCycleValues()、Icu_GetInputState()。仅当 IcuGetDutyCycleValuesApi 或 IcuGetTimeElapsedApi 至少有一个设置为 "true" 时,才能配置此模式;ICU_MODE_TIMESTAMP:该通道用于捕获通过调用服务 Icu_SetActivationCondition() 所配置的边沿上的定时器值。支持此模式的 API 服务有:Icu_StartTimestamp()、Icu_StopTimestamp()、Icu_GetTimestampIndex()
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local dependency: 可用的测量模式取决于启用/禁用可选 API 服务的预处理器开关
SWS 条目
参数名称 IcuWakeupCapability
父容器 IcuChannel
描述 关于此通道唤醒能力的信息(true:通道具有唤醒能力;false:通道不具有唤醒能力)。
多重性 1
类型 EcucBooleanParamDef
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
SWS 条目
参数名称 IcuChannelEcucPartitionRef
父容器 IcuChannel
描述 将一个 ICU 通道映射到零个或多个 ECUC 分区,以限制对该通道的访问。所引用的 ECUC 分区是 ICU 驱动所映射到的 ECUC 分区的子集。
多重性 0..*
类型 对 EcucPartition 的引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x;Link time:-;Post-build time:-
值配置类 Pre-compile time:x;Link time:-;Post-build time:-
作用域/依赖 scope: ECU
容器名称 多重性 作用域/依赖
IcuSignalEdgeDetection 0..1 当测量模式为 "IcuSignalEdgeDetection" 时,此容器包含相应的配置(参数)。
IcuSignalMeasurement 0..1 当测量模式为 "IcuSignalMeasurement" 时,此容器包含相应的配置(参数)。
IcuTimestampMeasurement 0..1 当测量模式为 "IcuTimestamp" 时,此容器包含相应的配置(参数)。
IcuWakeup 0..1 此容器包含配置唤醒能力通道所需的配置(参数)。

IcuChannelEcucPartitionRef 所引用的 ECUC 分区应是 IcuEcucPartitionRef 所引用的 ECUC 分区的子集。

若 IcuEcucPartitionRef 引用一个或多个 ECUC 分区,则 IcuChannelEcucPartitionRef 的多重性应大于一,并且也应引用这些 ECUC 分区中的一个或多个。

9.2.5. IcuSignalEdgeDetection

SWS 条目
容器名称 IcuSignalEdgeDetection
父容器 IcuChannel
描述 当测量模式为 "IcuSignalEdgeDetection" 时,此容器包含相应的配置(参数)。
配置参数 见下方参数表
SWS 条目
参数名称 IcuSignalNotification
父容器 IcuSignalEdgeDetection
描述 信号通知的通知函数。
多重性 0..1
类型 EcucFunctionNameDef
默认值 -
正则表达式 -
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local dependency: IcuMeasurementMode

无包含的容器。

9.2.6. IcuSignalMeasurement

SWS 条目
容器名称 IcuSignalMeasurement
父容器 IcuChannel
描述 当测量模式为 "IcuSignalMeasurement" 时,此容器包含相应的配置(参数)。
配置参数 见下方参数表
SWS 条目
参数名称 IcuSignalMeasurementProperty
父容器 IcuSignalMeasurement
描述 配置模式为 "IcuSignalMeasurement" 时可测量的属性。此属性在运行期间不可更改。实现类型:Icu_SignalMeasurementPropertyType
多重性 1
类型 EcucEnumerationParamDef
范围 ICU_DUTY_CYCLE:该通道配置为读取计算占空比所需的值(连贯的激活时间与周期时间);ICU_HIGH_TIME:该通道配置为读取信号高电平经过的时间;ICU_LOW_TIME:该通道配置为读取信号低电平经过的时间;ICU_PERIOD_TIME:该通道配置为读取信号周期经过的时间
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local dependency: IcuMeasurementMode, IcuGetDutyCycleValuesApi, IcuGetTimeElapsedApi

无包含的容器。

9.2.7. IcuTimestampMeasurement

SWS 条目
容器名称 IcuTimestampMeasurement
父容器 IcuChannel
描述 当测量模式为 "IcuTimestamp" 时,此容器包含相应的配置(参数)。
配置参数 见下方参数表
SWS 条目
参数名称 IcuTimestampMeasurementProperty
父容器 IcuTimestampMeasurement
描述 配置模式为 "Timestamp" 时缓冲区的处理方式。实现类型:Icu_TimestampBufferType
多重性 1
类型 EcucEnumerationParamDef
范围 ICU_CIRCULAR_BUFFER:到达缓冲区末尾后,从缓冲区开头重新开始;ICU_LINEAR_BUFFER:缓冲区仅填充一次
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local dependency: IcuMeasurementMode
SWS 条目
参数名称 IcuTimestampNotification
父容器 IcuTimestampMeasurement
描述 已获取所请求数量的时间戳(通知间隔 > 0)时的通知函数。
多重性 0..1
类型 EcucFunctionNameDef
默认值 -
正则表达式 -
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local dependency: IcuTimestampApi

无包含的容器。

9.2.8. IcuWakeup

SWS 条目
容器名称 IcuWakeup
父容器 IcuChannel
描述 此容器包含配置唤醒能力通道所需的配置(参数)。
配置参数 见下方参数表
SWS 条目
参数名称 IcuChannelWakeupInfo
父容器 IcuWakeup
描述 若唤醒能力为 true,则所引用的唤醒源将传输至 ECU 状态管理器(EcuM)。实现类型:对 EcuM_WakeupSourceType 的符号名引用
多重性 0..1
类型 对 EcuMWakeupSource 的符号名引用
Post-Build 变体多重性 true
Post-Build 变体值 true
多重性配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local dependency: IcuWakeupCapability 和 IcuReportWakeupSource

无包含的容器。

9.2.9. IcuConfigSet

SWS 条目
容器名称 IcuConfigSet
父容器 Icu
描述 此容器包含 AUTOSAR Icu 模块的配置参数与子容器。
配置参数 见下方参数表
SWS 条目
参数名称 IcuMaxChannel
父容器 IcuConfigSet
描述 此参数包含配置期间由工具配置的 Icu 通道。实现类型:Icu_ChannelType
多重性 1
类型 EcucIntegerParamDef
范围 0 .. 65535
默认值 -
Post-Build 变体值 true
值配置类 Pre-compile time:x(VARIANT-PRE-COMPILE);Link time:-;Post-build time:x(VARIANT-POST-BUILD)
作用域/依赖 scope: local
容器名称 多重性 作用域/依赖
IcuChannel 1..* 单个 ICU 通道的配置。

9.3. 发布信息

ICU 驱动应说明需要哪些其他模块(及其版本)。此说明应由实现者提供。

微信扫一扫,获取更多及时资讯

微信扫一扫