Dio
1. 简介和功能概述¶
本规范规定了AUTOSAR基础软件模块DIO驱动程序的功能、API和配置。
本规范仅适用于片上DIO引脚和端口的驱动程序。
DIO驱动程序提供从/向以下对象读取和写入数据的服务:
- DIO通道(引脚)
- DIO端口
- DIO通道组
这些服务的行为是同步的。
本模块作用于由PORT驱动程序为此目的配置的引脚和端口。因此,DIO驱动程序中不存在对此端口结构的配置和初始化。
下图标识了DIO驱动程序的功能,以及PORT驱动程序和DIO驱动程序在MCAL软件层中的结构。

2. 缩略语¶
下表包含了与DIO驱动程序模块相关、且未包含在[1] AUTOSAR术语表中的缩略语和缩写。
| 缩写/首字母缩写 | 描述 |
|---|---|
| DIO channel | 表示单个通用数字输入/输出引脚 |
| DIO port | 表示由硬件分组在一起的多个DIO通道(通常由一个硬件寄存器控制)。示例:Freescale HC08 的 Port A(8 位) |
| DIO channel group | 表示由逻辑组表示的多个相邻DIO通道。一个DIO通道组应属于一个DIO端口。示例:8 位端口中寻址复用器的端口引脚 2..6 |
| Physical Level (Input) | 两种可能的状态:LOW / HIGH。位值'0'表示LOW,位值'1'表示HIGH。 |
| Physical Level (Output) | 两种可能的状态:LOW / HIGH。位值'0'表示LOW,位值'1'表示HIGH。 |
| LSB | 最低有效位(Least Significant Bit) |
| MSB | 最高有效位(Most Significant Bit) |
| DIO | 数字输入输出(Digital Input Output) |
| ID | 标识符(Identifier) |
| ADC | 模数转换器(Analog to Digital Converter) |
| SPI | 串行外设接口(Serial Peripheral Interface) |
| PWM | 脉冲宽度调制(Pulse Width Modulation) |
| ICU | 输入捕获单元(Input Capture Unit) |
| DET | 默认错误跟踪器(Default Error Tracer) |
| DEM | 诊断事件管理器(Diagnostic Event Manager) |
3. 相关文档¶
3.1. 输入文件和相关标准与规范¶
[1] Glossary AUTOSAR_FO_TR_Glossary
[2] General Specification of Basic Software Modules AUTOSAR_CP_SWS_BSWGeneral
3.2. 相关规范¶
AUTOSAR提供了基础软件模块通用规范[2](SWS BSW General),该规范同样适用于DIO驱动程序。
因此,SWS BSW General规范应被视为DIO驱动程序的附加必需规范。
4. 约束和假设¶
4.1. 限制¶
无限制。
4.2. 对汽车域的适用性¶
无限制。
5. 对其他模块的依赖¶
5.1. Port Driver模块¶
许多端口和端口引脚被PORT驱动程序模块分配给各种功能,例如:
- 通用I/O
- ADC
- SPI
- PWM
[SWS_Dio_00061] Dio模块不应为Dio模块中使用的端口结构提供整体配置和初始化的API。这些操作由PORT驱动程序模块完成。
[SWS_Dio_00063] Dio模块应使其配置和使用适配于微控制器和ECU。
[SWS_Dio_00102] Dio模块的用户只允许在Port驱动程序初始化之后使用Dio函数。否则Dio模块将表现出未定义的行为。
5.2. Default Error Tracer¶
[SWS_Dio_00194] 如果启用了开发错误(DET)检测,则Dio.c应包含Det.h。
6. Requirements Tracing¶
本章引用了适用于本软件模块的SRS文档(软件需求规范)中规定的输入需求。
下表列出了DIO驱动程序SWS文档中满足输入需求的规范条目链接。仅引用功能性需求。
| 需求 | 描述 | 满足项 |
|---|---|---|
| [SRS_BSW_00323] | 所有AUTOSAR基础软件模块应检查传入的API参数的有效性 | [SWS_Dio_00074] [SWS_Dio_00075] [SWS_Dio_00114] [SWS_Dio_00189] |
| [SRS_BSW_00344] | BSW模块应支持链接时配置 | [SWS_Dio_00001] [SWS_Dio_00002] |
| [SRS_BSW_00350] | 所有AUTOSAR基础软件模块应允许启用/禁用开发错误的检测和报告 | [SWS_Dio_00194] |
| [SRS_BSW_00396] | 基础软件模块规范应为每个参数/容器规定支持的值和多重性变更的配置类 | [SWS_Dio_00129] |
| [SRS_BSW_00411] | 所有AUTOSAR基础软件模块应对启用/禁用API的存在性应用命名规则 | [SWS_Dio_00139] |
| [SRS_Dio_12003] | DIO驱动程序应提供向分配的DIO端口写入数据字的服务 | [SWS_Dio_00004] [SWS_Dio_00007] [SWS_Dio_00034] [SWS_Dio_00035] [SWS_Dio_00051] [SWS_Dio_00053] [SWS_Dio_00089] [SWS_Dio_00105] [SWS_Dio_00108] [SWS_Dio_00200] [SWS_Dio_00201] [SWS_Dio_00202] [SWS_Dio_00203] [SWS_Dio_00204] |
| [SRS_Dio_12004] | DIO驱动程序应提供向分配的DIO端口的一部分写入可选择数量的相邻位的服务 | [SWS_Dio_00008] [SWS_Dio_00021] [SWS_Dio_00039] [SWS_Dio_00040] [SWS_Dio_00051] [SWS_Dio_00056] [SWS_Dio_00089] [SWS_Dio_00090] [SWS_Dio_00091] |
| [SRS_Dio_12005] | DIO驱动程序应提供对单个DIO通道的写入访问服务 | [SWS_Dio_00006] [SWS_Dio_00028] [SWS_Dio_00029] [SWS_Dio_00051] [SWS_Dio_00079] [SWS_Dio_00089] [SWS_Dio_00127] [SWS_Dio_00128] |
| [SRS_Dio_12006] | DIO驱动程序应提供从分配的DIO端口读取数据字的服务 | [SWS_Dio_00013] [SWS_Dio_00031] [SWS_Dio_00051] [SWS_Dio_00053] [SWS_Dio_00089] [SWS_Dio_00104] |
| [SRS_Dio_12007] | DIO驱动程序应提供从分配的DIO端口的一部分读取可选择数量的相邻位的服务 | [SWS_Dio_00014] [SWS_Dio_00021] [SWS_Dio_00037] [SWS_Dio_00051] [SWS_Dio_00056] [SWS_Dio_00089] [SWS_Dio_00092] [SWS_Dio_00093] |
| [SRS_Dio_12008] | DIO驱动程序应提供读取分配的DIO通道的一个位的服务 | [SWS_Dio_00011] [SWS_Dio_00027] [SWS_Dio_00051] [SWS_Dio_00089] [SWS_Dio_00127] [SWS_Dio_00128] |
| [SRS_Dio_12352] | DIO驱动程序应允许对DIO端口、通道组和通道进行读写 | [SWS_Dio_00012] [SWS_Dio_00064] [SWS_Dio_00070] [SWS_Dio_00083] [SWS_Dio_00084] [SWS_Dio_00109] |
| [SRS_Dio_12355] | 应配置符号名称 | [SWS_Dio_00017] [SWS_Dio_00020] [SWS_Dio_00022] [SWS_Dio_00026] |
| [SRS_Dio_12424] | 提供DIO访问的原子性 | [SWS_Dio_00005] [SWS_Dio_00060] |
| [SRS_Dio_12900] | DIO驱动程序应提供翻转(flip)服务 | [SWS_Dio_00191] [SWS_Dio_00192] [SWS_Dio_00193] |
| [SRS_SPAL_12064] | 所有驱动模块应在运行模式更改导致运行操作降级时引发错误 | [SWS_Dio_00001] [SWS_Dio_00002] |
| [SRS_SPAL_12263] | 所有驱动模块的实现应允许在链接时配置特定模块参数类型 | [SWS_Dio_00017] [SWS_Dio_00020] [SWS_Dio_00022] |
| [SRS_SPAL_12448] | 所有驱动模块在检测到开发错误后应具有特定行为 | [SWS_Dio_00074] [SWS_Dio_00075] [SWS_Dio_00114] [SWS_Dio_00119] |
| [SRS_SPAL_12461] | 关于控制器寄存器初始化的特定规则应适用于所有驱动实现 | [SWS_Dio_00001] [SWS_Dio_00002] |
| [SRS_SPAL_12462] | 寄存器初始化设置应被发布 | [SWS_Dio_00001] [SWS_Dio_00002] |
| [SRS_SPAL_12463] | 寄存器初始化设置应被合并并转发 | [SWS_Dio_00001] [SWS_Dio_00002] |
7. 功能规格¶
7.1. 一般行为¶
7.1.1. 背景与原理¶
DIO驱动程序抽象对微控制器硬件引脚的访问。此外,它还允许对这些引脚进行分组。
7.1.2. 需求¶
DIO SWS应定义允许基于以下方式对内部通用I/O端口进行读写访问的函数:
- 基于端口(Port-)
- 基于通道(Channel-)
- 基于通道组(Channel-group-)
[SWS_Dio_00051] Dio模块在提供读写服务时不应缓冲数据。DIO SWS应定义同步的读/写服务。
[SWS_Dio_00005] Dio模块的读写服务应为所有服务确保数据一致(不允许可中断的读-修改-写序列)。
[SWS_Dio_00089] DIO驱动程序用于表示通道软件电平的值只能是STD_HIGH或STD_LOW。
[SWS_Dio_00128] 通用数字IO引脚表示一个DIO通道。
[SWS_Dio_00127] Port模块应将DIO通道配置为输入或输出(见[SWS_Dio_00001]和[SWS_Dio_00002])。
[SWS_Dio_00053] 在DIO驱动程序中,应可以将多个DIO通道按硬件分组(通常由一个硬件寄存器控制)以表示一个DIO端口。
注意:DIO端口内的单个DIO通道电平根据其在端口内的位置表示DIO端口值中的一个位。
[SWS_Dio_00056] 通道组是DIO端口内多个相邻DIO通道的形式上的逻辑组合。

DIO驱动程序提供以下服务:
- DIO SWS应定义函数以单独地、针对端口或针对通道组修改输出通道的电平。
- DIO SWS应定义函数以单独地、针对端口或针对通道组读取输入和输出(见[SWS_Dio_00083])通道的电平。

[SWS_Dio_00060] Dio模块的所有读写函数应是可重入的。原因:DIO驱动程序可能被不同的上层处理程序或驱动程序访问。这些上层模块可能并发访问该驱动程序。
[SWS_Dio_00026] Dio模块的配置过程应为每个配置的DIO通道、端口和组提供符号名称。
7.2. 初始化¶
7.2.1. 背景与原理¶
硬件的初始化由PORT驱动程序完成。
7.2.2. 需求¶
[SWS_Dio_00001] Dio模块不应提供硬件初始化的接口。这由Port驱动程序执行。
7.3. 运行时重配置¶
7.3.1. 背景与原理¶
运行时重配置由PORT驱动程序提供。
7.3.2. 需求¶
[SWS_Dio_00002] PORT驱动程序应提供端口引脚方向在运行时的重配置。
7.4. DIO 写服务¶
7.4.1. 背景与原理¶
DIO驱动程序提供服务以向微控制器的引脚传输数据。
7.4.2. 需求¶
[SWS_Dio_00064] Dio模块的写函数应作用于输入和输出通道。
[SWS_Dio_00070] 如果在输入通道上使用Dio写函数,其不应对物理输出电平产生影响。
[SWS_Dio_00109] 如果硬件支持,Dio模块应设置/清除输入通道的输出数据锁存器,以便当端口驱动程序将该引脚配置为DIO输出引脚时,引脚输出所需的电平。
[SWS_Dio_00119] 如果启用了开发错误检测且发生了错误,Dio模块的写函数不应处理写命令。
7.4.2.1. DIO 通道写服务¶
[SWS_Dio_00006] Dio_WriteChannel函数应将单个DIO通道的电平设置为STD_HIGH或STD_LOW。
7.4.2.2. DIO 端口写服务¶
[SWS_Dio_00007] Dio_WritePort函数应同时设置所有输出通道的电平。位值'0'将相应通道设置为物理STD_LOW,位值'1'将相应通道设置为物理STD_HIGH。
[SWS_Dio_00004] Dio_WritePort函数应确保该端口输入通道的功能不受影响。
7.4.2.3. DIO 通道组写服务¶
[SWS_Dio_00008] Dio_WriteChannelGroup函数应同时设置相邻的DIO通道子集(通道组)的电平。位值'0'将相应通道设置为物理STD_LOW,位值'1'将相应通道设置为物理STD_HIGH。
7.4.2.4. DIO 掩码端口写服务¶
[SWS_Dio_00200] Dio_MaskedWritePort函数应同时设置所选输出通道的电平。
Mask参数指定选择哪些位:位值'0'表示未选择相应通道,位值'1'表示选择了相应通道。
Level参数指定物理电平:位值'0'将相应通道设置为物理STD_LOW,位值'1'将相应通道设置为物理STD_HIGH。
[SWS_Dio_00201] Dio_MaskedWritePort函数应确保该端口输入通道的功能不受影响。
7.5. DIO 读服务¶
7.5.1. 背景与原理¶
DIO驱动程序提供服务以从微控制器的引脚传输数据。
7.5.2. 需求¶
[SWS_Dio_00012] Dio模块的读函数应作用于输入和输出通道。
7.5.2.1. DIO 通道读服务¶
[SWS_Dio_00011] Dio_ReadChannel函数应读取单个DIO通道的电平。
7.5.2.2. DIO 端口读服务¶
[SWS_Dio_00013] Dio_ReadPort函数应读取一个端口的所有通道的电平。位值'0'表示相应通道为物理STD_LOW,位值'1'表示相应通道为物理STD_HIGH。
7.5.2.3. DIO 通道组读服务¶
[SWS_Dio_00014] Dio_ReadChannelGroup函数应读取一个DIO通道组的电平。位值'0'表示相应通道为物理STD_LOW,位值'1'表示相应通道为物理STD_HIGH。
7.5.2.4. 输出引脚的回读¶
[SWS_Dio_00083] 如果微控制器支持引脚值的直接回读,当读函数作用于配置为输出通道的通道时,Dio模块的读函数应提供真实引脚电平。
[SWS_Dio_00084] 如果微控制器不支持引脚值的直接回读,当读函数作用于配置为输出通道的通道时,Dio模块的读函数应提供输出寄存器的值。
7.6. 错误分类¶
文档[2]《基础软件模块通用规范》的"错误处理"一章详细描述了基础软件的错误处理。最重要的是,它构成了一个由可能在BSW模块中发生的五种错误类型组成的分类方案。
在此基础上,以下章节规定了在下文相应小节中安排的特定错误。
7.6.1. 开发错误¶
[SWS_Dio_91001] Dio模块中开发错误的定义
| 错误类型 | 相关错误代码 | 错误值 |
|---|---|---|
| 请求的通道无效 | DIO_E_PARAM_INVALID_CHANNEL_ID | 0x0A |
| 请求的端口无效 | DIO_E_PARAM_INVALID_PORT_ID | 0x14 |
| 请求的通道组无效 | DIO_E_PARAM_INVALID_GROUP | 0x1F |
| API服务以NULL指针调用 | DIO_E_PARAM_POINTER | 0x20 |
7.6.2. 运行时错误¶
没有运行时错误。
7.6.3. 瞬态故障¶
没有瞬态故障。
7.6.4. 生产错误¶
没有生产错误。
7.6.5. 扩展生产错误¶
没有扩展生产错误。
7.7. 安全事件¶
无。
8. API规范¶
8.1. 导入的类型¶
本章列出了从以下模块包含的所有类型:
[SWS_Dio_00131] Dio模块的导入数据类型定义
| 模块 | 头文件 | 导入的类型 |
|---|---|---|
| Std_Types.h | Std_ReturnType | Std |
| Std_Types.h | Std_VersionInfoType |
8.2. 类型定义¶
[SWS_Dio_00103] 为DIO驱动程序定义的类型中的端口宽度应是DIO驱动程序可访问的MCU上最大端口的尺寸。
8.2.1. Dio_ChannelType¶
[SWS_Dio_00182] 数据类型Dio_ChannelType的定义
| 名称 | Dio_ChannelType |
|---|---|
| 类型 | Type |
| 派生自 | uint |
| 范围 | 这是实现特定的,但并非所有值在该类型内都有效。应覆盖所有可用的DIO通道 |
| 描述 | DIO通道的数字ID。可通过Dio.h获得 |
[SWS_Dio_00015] Dio_ChannelType类型的参数包含DIO通道的数字ID。
[SWS_Dio_00180] ID的映射是实现特定的,但不可配置。
[SWS_Dio_00017] 对于Dio_ChannelType类型的参数值,Dio的用户应使用配置描述提供的符号名称。此外,[SWS_Dio_00103]适用于Dio_ChannelType类型。
8.2.2. Dio_PortType¶
[SWS_Dio_00183] 数据类型Dio_PortType的定义
| 名称 | Dio_PortType |
|---|---|
| 类型 | Type |
| 派生自 | uint |
| 范围 | 0..<端口数量> —— 应覆盖所有可用的DIO端口 |
| 描述 | DIO端口的数字ID。可通过Dio.h获得 |
[SWS_Dio_00018] Dio_PortType类型的参数包含DIO端口的数字ID。
[SWS_Dio_00181] ID的映射是实现特定的,但不可配置。
[SWS_Dio_00020] 对于Dio_PortType类型的参数值,用户应使用配置描述提供的符号名称。此外,[SWS_Dio_00103]适用于Dio_PortType类型。
8.2.3. Dio_ChannelGroupType¶
[SWS_Dio_00184] 数据类型Dio_ChannelGroupType的定义
| 名称 | Dio_ChannelGroupType |
|---|---|
| 类型 | Structure |
| mask | 类型 uint8/16/32。注释:定义通道组位置的掩码元素 |
| offset | 类型 uint8。注释:此元素应为通道组在端口上的位置,从LSB开始计数 |
| port | 类型 Dio_PortType。元素注释:应为定义通道组的端口 |
| 描述 | 用于定义通道组的类型,通道组由端口内多个相邻通道组成。可通过Dio.h获得 |
[SWS_Dio_00021] Dio_ChannelGroupType是用于定义通道组的类型,通道组由端口内多个相邻通道组成。
[SWS_Dio_00022] 对于Dio_ChannelGroupType类型的参数值,用户应使用配置描述提供的符号名称。此外,[SWS_Dio_00056]适用于Dio_ChannelGroupType类型。
8.2.4. Dio_LevelType¶
[SWS_Dio_00185] 数据类型Dio_LevelType的定义
| 名称 | Dio_LevelType |
|---|---|
| 类型 | Type |
| 派生自 | uint8 |
| STD_LOW | 0x00,物理状态 0V,范围 |
| STD_HIGH | 0x01,物理状态 5V 或 3.3V |
| 描述 | 这些是DIO通道可能具有的电平(输入或输出)。可通过Dio.h获得 |
[SWS_Dio_00023] Dio_LevelType是DIO通道可能具有的电平(输入或输出)的类型。
8.2.5. Dio_PortLevelType¶
[SWS_Dio_00186] 数据类型Dio_PortLevelType的定义
| 名称 | Dio_PortLevelType |
|---|---|
| 类型 | Type |
| 派生自 | uint |
| 范围 | 0...xxx —— 如果µC拥有不同端口宽度的端口(例如 4、8、16...位),Dio_PortLevelType继承最大端口的尺寸 |
| 描述 | 如果µC拥有不同端口宽度的端口(例如 4、8、16...位),Dio_PortLevelType继承最大端口的尺寸。可通过Dio.h获得 |
[SWS_Dio_00024] Dio_PortLevelType是DIO端口值的类型。此外,[SWS_Dio_00103]适用于Dio_PortLevelType类型。
8.3. 函数定义¶
以下是提供给上层模块的函数列表。
8.3.1. Dio_ReadChannel¶
[SWS_Dio_00133] API函数Dio_ReadChannel的定义
| 服务名称 | Dio_ReadChannel |
|---|---|
| 语法 | Dio_LevelType Dio_ReadChannel (Dio_ChannelType ChannelId) |
| 服务 ID [十六进制] | 0x00 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | ChannelId:DIO通道的ID |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Dio_LevelType:STD_HIGH 表示相应引脚的物理电平为STD_HIGH;STD_LOW 表示相应引脚的物理电平为STD_LOW |
| 描述 | 返回指定DIO通道的值。可通过Dio.h获得 |
[SWS_Dio_00027] Dio_ReadChannel函数应返回指定DIO通道的值。关于Dio_ReadChannel函数的返回值,需求[SWS_Dio_00083]和[SWS_Dio_00084]适用。此外,需求[SWS_Dio_00005]和[SWS_Dio_00026]适用于Dio_ReadChannel函数。
[SWS_Dio_00074] 如果启用了开发错误检测,服务Dio_ReadChannel、Dio_WriteChannel和Dio_FlipChannel应检查"ChannelId"参数在当前配置内是否有效。如果"ChannelId"参数无效,函数应向DET报告错误代码DIO_E_PARAM_INVALID_CHANNEL_ID。
8.3.2. Dio_WriteChannel¶
[SWS_Dio_00134] API函数Dio_WriteChannel的定义
| 服务名称 | Dio_WriteChannel |
|---|---|
| 语法 | void Dio_WriteChannel (Dio_ChannelType ChannelId, Dio_LevelType Level) |
| 服务 ID [十六进制] | 0x01 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | ChannelId:DIO通道的ID;Level:要写入的值 |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 描述 | 设置通道电平的服务。可通过Dio.h获得 |
[SWS_Dio_00028] 如果指定通道配置为输出通道,Dio_WriteChannel函数应为指定通道设置指定的Level。
[SWS_Dio_00029] 如果指定通道配置为输入通道,Dio_WriteChannel函数不应对物理输出产生影响。
[SWS_Dio_00079] 如果指定通道配置为输入通道,Dio_WriteChannel函数不应对下一次读服务的结果产生影响。此外,需求[SWS_Dio_00005]、[SWS_Dio_00119]和[SWS_Dio_00026]适用于Dio_WriteChannel函数。
8.3.3. Dio_ReadPort¶
[SWS_Dio_00135] API函数Dio_ReadPort的定义
| 服务名称 | Dio_ReadPort |
|---|---|
| 语法 | Dio_PortLevelType Dio_ReadPort (Dio_PortType PortId) |
| 服务 ID [十六进制] | 0x02 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | PortId:DIO端口的ID |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Dio_PortLevelType:该端口所有通道的电平 |
| 描述 | 返回该端口所有通道的电平。可通过Dio.h获得 |
[SWS_Dio_00031] Dio_ReadPort函数应返回该端口所有通道的电平。
[SWS_Dio_00104] 当使用Dio_ReadPort函数读取小于Dio_PortLevelType的端口时(见[SWS_Dio_00103]),函数应将对应于未定义端口引脚的位设置为 0。此外,需求[SWS_Dio_00005]和[SWS_Dio_00026]适用于Dio_ReadPort函数。
[SWS_Dio_00075] 如果启用了开发错误检测,函数Dio_ReadPort、Dio_WritePort和Dio_MaskedWritePort应检查"PortId"参数在当前配置内是否有效。如果"PortId"参数无效,函数应向DET报告错误代码DIO_E_PARAM_INVALID_PORT_ID。
8.3.4. Dio_WritePort¶
[SWS_Dio_00136] API函数Dio_WritePort的定义
| 服务名称 | Dio_WritePort |
|---|---|
| 语法 | void Dio_WritePort (Dio_PortType PortId, Dio_PortLevelType Level) |
| 服务 ID [十六进制] | 0x03 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | PortId:DIO端口的ID;Level:要写入的值 |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 描述 | 设置端口值的服务。可通过Dio.h获得 |
[SWS_Dio_00034] Dio_WritePort函数应为指定端口设置指定的值。
[SWS_Dio_00035] 当调用Dio_WritePort函数时,配置为输入的DIO通道应保持不变。
[SWS_Dio_00105] 当使用Dio_WritePort函数写入小于Dio_PortLevelType的端口时(见[SWS_Dio_00103]),函数应忽略MSB。
[SWS_Dio_00108] Dio_WritePort函数不应对该端口内配置为输入通道的通道产生影响。此外,需求[SWS_Dio_00005]、[SWS_Dio_00119]和[SWS_Dio_00026]适用于Dio_WritePort函数。
8.3.5. Dio_ReadChannelGroup¶
[SWS_Dio_00137] API函数Dio_ReadChannelGroup的定义
| 服务名称 | Dio_ReadChannelGroup |
|---|---|
| 语法 | Dio_PortLevelType Dio_ReadChannelGroup (const Dio_ChannelGroupType * ChannelGroupIdPtr) |
| 服务 ID [十六进制] | 0x04 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | ChannelGroupIdPtr:指向ChannelGroup的指针 |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Dio_PortLevelType:端口相邻位子集的电平 |
| 描述 | 此服务读取端口相邻位的子集。可通过Dio.h获得 |
[SWS_Dio_00037] Dio_ReadChannelGroup函数应读取端口相邻位的子集(通道组)。
[SWS_Dio_00092] Dio_ReadChannelGroup函数应对通道组进行掩码操作。
[SWS_Dio_00093] Dio_ReadChannelGroup函数应进行移位,使函数读取的值与LSB对齐。此外,需求[SWS_Dio_00005]、[SWS_Dio_00056]、[SWS_Dio_00083]、[SWS_Dio_00084]和[SWS_Dio_00026]适用于Dio_ReadChannelGroup函数。
[SWS_Dio_00114] 如果启用了开发错误检测,函数Dio_ReadChannelGroup和Dio_WriteChannelGroup应检查"ChannelGroupIdPtr"参数在当前配置内是否有效。如果"ChannelGroupIdPtr"参数无效,函数应向DET报告错误代码DIO_E_PARAM_INVALID_GROUP。
8.3.6. Dio_WriteChannelGroup¶
[SWS_Dio_00138] API函数Dio_WriteChannelGroup的定义
| 服务名称 | Dio_WriteChannelGroup |
|---|---|
| 语法 | void Dio_WriteChannelGroup (const Dio_ChannelGroupType * ChannelGroupIdPtr, Dio_PortLevelType Level) |
| 服务 ID [十六进制] | 0x05 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | ChannelGroupIdPtr:指向ChannelGroup的指针;Level:要写入的值 |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 描述 | 将端口相邻位的子集设置为指定电平的服务。可通过Dio.h获得 |
void Dio_WriteChannelGroup ( const Dio_ChannelGroupType * ChannelGroupIdPtr, Dio_PortLevelType Level )
[SWS_Dio_00039] Dio_WriteChannelGroup函数应将端口相邻位的子集(通道组)设置为指定的电平。
[SWS_Dio_00040] Dio_WriteChannelGroup不应改变端口的剩余通道以及配置为输入的通道。
[SWS_Dio_00090] Dio_WriteChannelGroup函数应对通道组进行掩码操作。
[SWS_Dio_00091] Dio_WriteChannelGroup函数应进行移位,使函数写入的值与LSB对齐。此外,需求[SWS_Dio_00005]、[SWS_Dio_00056]、[SWS_Dio_00119]和[SWS_Dio_00026]适用于Dio_WriteChannelGroup函数。
8.3.7. Dio_GetVersionInfo¶
[SWS_Dio_00139] API函数Dio_GetVersionInfo的定义
| 服务名称 | Dio_GetVersionInfo |
|---|---|
| 语法 | void Dio_GetVersionInfo (Std_VersionInfoType* VersionInfo) |
| 服务 ID [十六进制] | 0x12 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | 无 |
| 参数(inout) | 无 |
| 参数(out) | VersionInfo:指向存储本模块版本信息位置的指针 |
| 返回值 | 无 |
| 描述 | 获取本模块版本信息的服务。可通过Dio.h获得 |
[SWS_Dio_00189] 如果为DIO驱动程序模块启用了DET,当参数为NULL指针时,函数Dio_GetVersionInfo应引发DIO_E_PARAM_POINTER并直接返回,不执行任何动作。
8.3.8. Dio_FlipChannel¶
[SWS_Dio_00190] API函数Dio_FlipChannel的定义
| 服务名称 | Dio_FlipChannel |
|---|---|
| 语法 | Dio_LevelType Dio_FlipChannel (Dio_ChannelType ChannelId) |
| 服务 ID [十六进制] | 0x11 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | ChannelId:DIO通道的ID |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | Dio_LevelType:STD_HIGH 表示相应引脚的物理电平为STD_HIGH;STD_LOW 表示相应引脚的物理电平为STD_LOW |
| 描述 | 翻转(从 1 到 0 或从 0 到 1)通道电平并返回翻转后通道电平的服务。可通过Dio.h获得 |
[SWS_Dio_00191] 如果指定通道配置为输出通道,Dio_FlipChannel函数应读取通道的电平(需求[SWS_Dio_00083]和[SWS_Dio_00084]适用)并将其取反,然后将取反后的电平写入该通道。返回值应为指定通道取反后的电平。
[SWS_Dio_00192] 如果指定通道配置为输入通道,Dio_FlipChannel函数不应对物理输出产生影响。返回值应为指定通道的电平。
[SWS_Dio_00193] 如果指定通道配置为输入通道,Dio_FlipChannel函数不应对下一次读服务的结果产生影响。此外,需求[SWS_Dio_00005]、[SWS_Dio_00119]和[SWS_Dio_00026]适用于Dio_FlipChannel函数。
8.3.9. Dio_MaskedWritePort¶
[SWS_Dio_00300] API函数Dio_MaskedWritePort的定义
| 服务名称 | Dio_MaskedWritePort |
|---|---|
| 语法 | void Dio_MaskedWritePort (Dio_PortType PortId, Dio_PortLevelType Level, Dio_PortLevelType Mask) |
| 服务 ID [十六进制] | 0x13 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数(in) | PortId:DIO端口的ID;Level:要写入的值;Mask:端口中要掩码的通道 |
| 参数(inout) | 无 |
| 参数(out) | 无 |
| 返回值 | 无 |
| 描述 | 以所需掩码设置给定端口值的服务。可通过Dio.h获得 |
[SWS_Dio_00202] 如果Mask中相应位为'1',Dio_MaskedWritePort函数应为指定端口中相应通道设置指定的值。
[SWS_Dio_00203] 当调用Dio_MaskedWritePort函数时,配置为输入的DIO通道应保持不变。
[SWS_Dio_00204] 当使用Dio_MaskedWritePort函数写入小于Dio_PortLevelType的端口时(见[SWS_Dio_00103]),函数应忽略MSB。
8.4. 回调通知¶
本章列出了Dio模块提供给下层层的所有函数。
Dio模块不提供任何回调通知。与Dio模块功能相关的回调在其他模块(ICU驱动程序和/或复杂驱动程序)中实现。
8.5. 调度函数¶
本章列出了由基础软件模块调度程序直接调用的所有函数。
Dio模块没有调度函数。
8.6. 期望接口¶
本章列出了Dio模块需要从其他模块获得的所有函数。
8.6.1. 强制接口¶
无
8.6.2. 可选接口¶
本章定义了为实现模块的可选功能而需要的所有接口。
[SWS_Dio_00140] Dio模块中可选接口的定义
| API 函数 | 头文件 | 描述 |
|---|---|---|
| Det_ReportError | Det.h | 报告开发错误的服务 |
9. 时序图¶
下图展示了调用Dio_ReadChannel和Dio_WriteChannel服务时的时序,展示了正常运行模式。由于第 8.3 章定义的所有其他服务都具有完全相同的同步行为,因此本文档有意不再提供更多时序图。
9.1. 从数字 I/O 读取值¶

9.2. 向数字 I/O 写入值¶

10. 配置规范¶
本章定义配置参数以及它们到容器的聚集。
10.1. 容器和配置参数¶
以下章节总结了所有配置参数。
[SWS_Dio_00205] DIO模块应拒绝实现不支持的包含分区映射的配置。
10.1.1. 变体¶
[SWS_Dio_00129] 实现必须至少支持以下变体之一:VARIANT-PRE-COMPILE、VARIANT-LINK-TIME。

10.1.2. Dio¶
SWS 条目 [ECUC_Dio_00154]
| 模块名称 | Dio |
|---|---|
| 描述 | Dio(数字IO)模块的配置。 |
| Post-Build 变体支持 | false |
| 支持的配置变体 | VARIANT-LINK-TIME, VARIANT-PRE-COMPILE |
包含的容器
| 容器名称 | 多重性 | 范围/依赖 |
|---|---|---|
| DioConfig | 1 | 此容器包含AUTOSAR DIO模块的配置参数和子容器。 |
| DioGeneral | 1 | 通用DIO模块配置参数。 |
10.1.3. DioGeneral¶
SWS 条目 [ECUC_Dio_00141]
| 容器名称 | DioGeneral |
|---|---|
| 父容器 | Dio |
| 描述 | 通用DIO模块配置参数。 |
配置参数
SWS 条目 [ECUC_Dio_00142]
| 参数名称 | DioDevErrorDetect |
|---|---|
| 父容器 | DioGeneral |
| 描述 | 打开或关闭开发错误检测和通知。• true:启用检测和通知。• false:禁用检测和通知。 |
| 多重性 | 1 |
| 类型 | EcucBooleanParamDef |
| 默认值 | false |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: local |
SWS 条目 [ECUC_Dio_00153]
| 参数名称 | DioFlipChannelApi |
|---|---|
| 父容器 | DioGeneral |
| 描述 | 从代码中添加/移除服务Dio_FlipChannel()。 |
| 多重性 | 1 |
| 类型 | EcucBooleanParamDef |
| 默认值 | – |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: local |
SWS 条目 [ECUC_Dio_00155]
| 参数名称 | DioMaskedWritePortApi |
|---|---|
| 父容器 | DioGeneral |
| 描述 | 从代码中添加/移除服务Dio_MaskedWritePort()。 |
| 多重性 | 1 |
| 类型 | EcucBooleanParamDef |
| 默认值 | false |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: local |
SWS 条目 [ECUC_Dio_00143]
| 参数名称 | DioVersionInfoApi |
|---|---|
| 父容器 | DioGeneral |
| 描述 | 从代码中添加/移除服务Dio_GetVersionInfo()。 |
| 多重性 | 1 |
| 类型 | EcucBooleanParamDef |
| 默认值 | false |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: local |
SWS 条目 [ECUC_Dio_00156]
| 参数名称 | DioEcucPartitionRef |
|---|---|
| 父容器 | DioGeneral |
| 描述 | 将DIO驱动程序映射到零个或多个ECUC分区,以使模块的API在此分区中可用。 |
| 多重性 | 0..* |
| 类型 | 对 EcucPartition 的引用 |
| Post-Build 变体多重性 | false |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 多重性配置类 | Post-build 时间 – |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: ECU |
无包含的容器。
10.1.4. DioPort¶
SWS 条目 [ECUC_Dio_00144]
| 容器名称 | DioPort |
|---|---|
| 父容器 | DioConfig |
| 描述 | 单个DIO端口的配置,由通道和可能的通道组组成。注意,此容器定义没有显式定义符号名称参数。相反,容器的短名称将在Ecu配置描述中用于指定端口的符号名称。 |
配置参数
SWS 条目 [ECUC_Dio_00145]
| 参数名称 | DioPortId |
|---|---|
| 父容器 | DioPort |
| 描述 | DIO端口的数字标识符。并非所有MCU端口都可用于DIO,因此在所有ID列表中可能存在"间隙"。此值将分配给DIO端口符号名称(即DioPort容器的SHORT-NAME)。 |
| 多重性 | 1 |
| 类型 | EcucIntegerParamDef(为此参数生成符号名称) |
| 范围 | 0 .. 4294967295 |
| 默认值 | – |
| Post-Build 变体值 | false |
| 值配置类 | 预编译时间 X(所有变体) |
| 链接时间 | – |
| Post-build 时间 | – |
| 范围/依赖 | scope: ECU |
SWS 条目 [ECUC_Dio_00157]
| 参数名称 | DioPortEcucPartitionRef |
|---|---|
| 父容器 | DioPort |
| 描述 | 将DIO端口映射到零个或多个ECUC分区。引用的ECUC分区是DIO驱动程序所映射到的ECUC分区的子集。 |
| 多重性 | 0..* |
| 类型 | 对 EcucPartition 的引用 |
| Post-Build 变体多重性 | false |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 多重性配置类 | Post-build 时间 – |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: ECU |
包含的容器
| 容器名称 | 多重性 | 范围/依赖 |
|---|---|---|
| DioChannel | 0..* | 单个DIO通道的配置。 |
| DioChannelGroup | 0..* | DIO通道组的定义和配置。通道组表示由逻辑组表示的多个相邻DIO通道。注意,此容器定义没有显式定义符号名称参数。相反,容器的短名称将在Ecu配置描述中用于指定通道组的符号名称。 |

[SWS_Dio_00206] DioPortEcucPartitionRef引用的ECUC分区应是DioEcucPartitionRef引用的ECUC分区的子集。
[SWS_Dio_00209] 如果DioEcucPartitionRef引用一个或多个ECUC分区,DioPortEcucPartitionRef应具有大于零的多重性,并同样引用这些ECUC分区中的一个或多个。
10.1.5. DioChannel¶
SWS 条目 [ECUC_Dio_00146]
| 容器名称 | DioChannel |
|---|---|
| 父容器 | DioPort |
| 描述 | 单个DIO通道的配置。 |
配置参数
SWS 条目 [ECUC_Dio_00147]
| 参数名称 | DioChannelId |
|---|---|
| 父容器 | DioChannel |
| 描述 | DIO通道的通道ID。此值将分配给符号名称。 |
| 多重性 | 1 |
| 类型 | EcucIntegerParamDef(为此参数生成符号名称) |
| 范围 | 0 .. 4294967295 |
| 默认值 | – |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: ECU |
SWS 条目 [ECUC_Dio_00158]
| 参数名称 | DioChannelEcucPartitionRef |
|---|---|
| 父容器 | DioChannel |
| 描述 | 将DIO通道映射到零个或多个ECUC分区。引用的ECUC分区是相关DIO端口所映射到的ECUC分区的子集。 |
| 多重性 | 0..* |
| 类型 | 对 EcucPartition 的引用 |
| Post-Build 变体多重性 | false |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 多重性配置类 | Post-build 时间 – |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: ECU |
无包含的容器。
[SWS_Dio_00207] DioChannelEcucPartitionRef引用的ECUC分区应是DioPortEcucPartitionRef引用的ECUC分区的子集。
[SWS_Dio_00210] 如果DioEcucPartitionRef引用一个或多个ECUC分区,DioChannelEcucPartitionRef应具有大于零的多重性,并同样引用这些ECUC分区中的一个或多个。
10.1.6. DioChannelGroup¶
SWS 条目 [ECUC_Dio_00148]
| 容器名称 | DioChannelGroup |
|---|---|
| 父容器 | DioPort |
| 描述 | DIO通道组的定义和配置。通道组表示由逻辑组表示的多个相邻DIO通道。注意,此容器定义没有显式定义符号名称参数。相反,容器的短名称将在Ecu配置描述中用于指定通道组的符号名称。 |
配置参数
SWS 条目 [ECUC_Dio_00149]
| 参数名称 | DioChannelGroupIdentification |
|---|---|
| 父容器 | DioChannelGroup |
| 描述 | DIO通道组在DIO API中通过指向数据结构(Dio_ChannelGroupType类型)的指针来标识。该数据结构包含通道组信息。此参数包含必须插入调用模块的API调用中的代码片段,以获取内存中保存通道组信息的变量的地址。示例值为"&MyDioGroup1"或"&MyDioGroupArray[0]"。 |
| 多重性 | 1 |
| 类型 | EcucStringParamDef(为此参数生成符号名称) |
| 默认值 | – |
| 正则表达式 | – |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: ECU |
SWS 条目 [ECUC_Dio_00150]
| 参数名称 | DioPortMask |
|---|---|
| 父容器 | DioChannelGroup |
| 描述 | 定义通道组位置的掩码。通道应由同一端口中的相邻位组成。数据类型取决于端口宽度。 |
| 多重性 | 1 |
| 类型 | EcucIntegerParamDef |
| 范围 | 0 .. 4294967295 |
| 默认值 | – |
| Post-Build 变体值 | false |
| 预编译时间 | X(VARIANT-PRE-COMPILE) |
| 链接时间 | X(VARIANT-LINK-TIME) |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: local |
SWS 条目 [ECUC_Dio_00151]
| 参数名称 | DioPortOffset |
|---|---|
| 父容器 | DioChannelGroup |
| 描述 | 通道组在端口上的位置,从LSB开始计数。此值可以从DioPortMask导出。计算公式 = DioPortMask中从LSB开始计数的第一个置'1'位的位置。 |
| 多重性 | 1 |
| 类型 | EcucIntegerParamDef |
| 范围 | 0 .. 31 |
| 默认值 | – |
| Post-Build 变体值 | false |
| 预编译时间 | X(VARIANT-PRE-COMPILE) |
| 链接时间 | X(VARIANT-LINK-TIME) |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: local |
SWS 条目 [ECUC_Dio_00159]
| 参数名称 | DioChannelGroupEcucPartitionRef |
|---|---|
| 父容器 | DioChannelGroup |
| 描述 | 将DIO通道组映射到零个或多个ECUC分区。引用的ECUC分区是相关DIO端口所映射到的ECUC分区的子集。 |
| 多重性 | 0..* |
| 类型 | 对 EcucPartition 的引用 |
| Post-Build 变体多重性 | false |
| Post-Build 变体值 | false |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 多重性配置类 | Post-build 时间 – |
| 预编译时间 | X(所有变体) |
| 链接时间 | – |
| 值配置类 | Post-build 时间 – |
| 范围/依赖 | scope: ECU |
无包含的容器。
[SWS_Dio_00208] DioChannelGroupEcucPartitionRef引用的ECUC分区应是DioPortEcucPartitionRef引用的ECUC分区的子集。
[SWS_Dio_00211] 如果DioPortEcucPartitionRef引用一个或多个ECUC分区,DioChannelGroupEcucPartitionRef应具有大于零的多重性,并同样引用这些ECUC分区中的一个或多个。
10.1.7. DioConfig¶
SWS 条目 [ECUC_Dio_00152]
| 容器名称 | DioConfig |
|---|---|
| 父容器 | Dio |
| 描述 | 此容器包含AUTOSAR DIO模块的配置参数和子容器。 |
配置参数
包含的容器
| 容器名称 | 多重性 | 范围/依赖 |
|---|---|---|
| DioPort | 1..* | 单个DIO端口的配置,由通道和可能的通道组组成。注意,此容器定义没有显式定义符号名称参数。相反,容器的短名称将在Ecu配置描述中用于指定端口的符号名称。 |
10.2. 发布信息¶
详情请参阅SWS_BSWGeneral中第 10.3 章"Published Information"。
A. 不适用的需求¶
无。