AUTOSAR_SWS_PortDriver

AUTOSAR_SWS_PortDriver


简介和功能概述

本规范规定了 AUTOSAR 基础软件模块 Port 驱动程序的:
  • 功能
  • API
  • 配置

本驱动程序规范适用于片上:
  • 端口
  • 端口引脚

该模块应提供初始化微控制器整个 Port 结构的服务。

许多端口和端口引脚可分配给各种功能,例如:
  • General purpose I/O
  • ADC
  • SPI
  • SCI
  • PWM
  • CAN
  • LIN
  • 其他

因此,应对端口结构进行整体配置和初始化。
  • 这些端口引脚配置模式取决于微控制器和 ECU
  • 应尽可能高效地将端口初始化数据写入每个端口
  • Port 驱动程序模块应完成在 Dio 驱动程序模块中使用的端口结构的整体配置和初始化。
因此,Dio 驱动程序在由 Port 驱动程序配置的引脚端口上工作。
  • 在使用 Dio 功能之前,应初始化 Port 驱动程序。
  • 否则,Dio 功能将表现出定义的行为。

下图标识了 Port 驱动程序功能以及 MCAL 软件层中的 Port 驱动程序和 Dio 驱动程序的结构 [1]。



首字母缩略词和缩写

下表总结了 Port 驱动程序中使用的表达式。


约束和假设

Port 驱动程序的限制如下:
  • 用户有责任确保同一系统中的同实体会并行访问同端口/端口引脚,例如:
    • 个任务配置同端口
    • 个任务配置同引脚。
    • 个任务配置同端口上的引脚

对其他模块的依赖

其他驱动程序模块可能依赖于 Port 驱动程序,具体取决于 MCU 上各个端口引脚的可用功能。例如,MCU 引脚可能可配置为 Dio 或 SPI 引脚。因此,Dio 和/或 SPI 驱动程序模块可能依赖于 Port 模块来配置引脚以实现所需的功能。

需求可追溯性

本章引用了适用于此软件模块的 SRS 文档(软件需求规范 [5]、[6]、[7])中指定的输入要求。下表列出了满足输入要求的 Port 驱动 SWS 文档的规格项目,仅作为功能要求的参考。


功能规格


背景与理由

[SWS_Port_00001] 

[SRS_BSW_00101]
  • Port 驱动模块应初始化微控制器的整个端口结构。

注意:定义端口和端口引脚的配置顺序是配置工具的任务。

端口引脚属性的配置

[SWS_Port_00004]

[SRS_BSW_00159]、[SRS_Port_12001]
  • Port 驱动模块应允许为每个端口和端口引脚配置不同的功能,例如 ADC、SPI、Dio 等。

端口的配置(即整个端口或单个端口引脚)取决于微控制器。

[SWS_Port_00079]

[SRS_Port_12001]
  • Port 驱动模块应为 MCU 端口/端口引脚提供额外配置:
    • 引脚方向(输入/输出)
    • 引脚电平初始值
    • 引脚方向可在运行时更改(是/否)
    • 端口模式可在运行时更改

[SWS_Port_00081]

[ ]
  • Port 驱动模块应为 MCU 端口和端口引脚提供许多可选配置(​​如果硬件支持):
    • 斜率控制
    • 内部上拉电阻激活
    • 输入阈值
    • 引脚驱动模式(推挽/开漏
    • 回读支持的类型(引脚电平、输出寄存器值)

[SWS_Port_00082]

[ ]
  • Port 驱动程序模块应提供配置引脚电平反转的功能。应设置默认值(即反转)。

注意:IO 硬件抽象层需进行电平反转。

切换端口引脚方向

[SWS_Port_00137]

[ ]
  • 对于使用配置工具配置为可更改的端口引脚Port 驱动程序应允许用户在运行时更改端口引脚方向

[SWS_Port_00138]

[SRS_Port_12405]
  • 如果 MCU 端口控制硬件提供了用于设置端口引脚上的输出电平的输出锁存器,则切换端口引脚方向不会改变此输出锁存器中设置的电平

SWS_Port

刷新端口方向

[SWS_Port_00066]

[ ]
  • 对于微控制器端口的刷新,Port 驱动程序应允许用户刷新那些方向由配置设置且不能动态改变的端口引脚方向

未使用的端口和端口引脚的配置

[SWS_Port_00005]

[SRS_Port_12300]
  • Port 驱动程序模块应将所有未使用的端口和端口引脚(既不是 GPIO 也不是特殊用途 IO)配置为由 Port 驱动程序模块配置定义的状态

符号名称的配置

[SWS_Port_00006]

[SRS_Port_12302]
  • Port 驱动模块的用户应配置 MCU 端口引脚的符号名称

[SWS_Port_00207]

[ ]
  • 这些各个端口引脚的符号名称(例如 PORT_A_PIN_0)应在配置工具中定义。

[SWS_Port_00208]

[ ]
  • Port 驱动模块的实现者应通过文件 Port.h 发布符号名称。

端口访问的原子性

[SWS_Port_00075]

[ ]
  • Port 驱动模块应提供对所有端口和端口引脚的原子访问。

注意:原子访问是通过使用原子指令或使用基本软件调度程序模块提供的独占区域(例如,中断禁用)对微控制器寄存器进行可中断的访问。

版本检查


背景和理由

应避免兼容文件的集成。最低限度的实现是 .c 文件内的文件版本检查(.c 和 .h 文件的版本号应相同)。

要求

端口模块应通过以下预处理器检查来避免不兼容文件的集成:
  • 有关详细信息,请参阅[4,SWS BSW 概述]中的第 5.1.8 章“版本检查”。

错误分类


[SWS_Port_00051]

[SRS_BSW_00327]、[SRS_BSW_00337]、[SRS_BSW_00385]、[SRS_BSW_00406]

API 参数检查


[SWS_Port_00077]

[SRS_SPAL_12448]
  • 如果启用了开发错误检测,端口驱动模块将按照传递的顺序检查函数参数,如果出现个错误,则跳过之后的参数检查。
  • 例如:对于函数 Port_SetPinDirection,要传递的第一个参数是引脚 ID。此参数应标识 MCU 端口的相关端口引脚。传递的第二个参数对应于端口引脚上要更改的方向

[SWS_Port_00087]

[SRS_BSW_00323]、[SRS_BSW_00406]
  • 如果启用了开发错误检测并且端口驱动程序模块检测到错误,则所需的功能应被跳过并且请求的服务应返回且不执行任何操作。
  • 请参阅下表,查看每个函数报告的 Det 错误列表。

API 规范


导入的类型

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

[SWS_Port_00129]

[ ]

类型定义

Port_ConfigType

[SWS_Port_00228]

[ ]

Port_PinType

[SWS_Port_00229]

[ ]

[SWS_Port_00013]

[ ]
  • Port_PinType 类型应用于端口引脚的符号名称。

[SWS_Port_00219]

[ ]
  • Port_PinType 类型应为 uint8,uint16 或 uint32,根据具体的 MCU 平台而定。

注意:用户应使用配置工具提供的符号名称。

Port_PinDirectionType

[SWS_Port_00230]

[ ]

[SWS_Port_00046]

[ ]
  • Port_PinDirectionType 类型是用于定义端口引脚方向的类型。

[SWS_Port_00220]

[ ]
  • Port_PinDirectionType 类型应为枚举类型,范围为 
    • PORT_PIN_IN
    • PORT_PIN_OUT

Port_PinModeType

[SWS_Port_00231]

[ ]

[SWS_Port_00124]

[ ]
  • 端口引脚应可配置多种端口引脚模式(类型 Port_PinModeType)。

[SWS_Port_00212]

[ ]
  • Port_PinModeType 类型应与函数调用 Port_SetPinMode 一起使用。

[SWS_Port_00221]

[ ]
  • Port_PinModeType 类型应为 uint8、uint16 或 uint32

函数定义


这是为上层模块提供的函数列表。

Port_Init

[SWS_Port_00140]

[SRS_BSW_00358]

[SWS_Port_00041]

[SRS_BSW_00101]
[SRS_BSW_00404]
[SRS_SPAL_12263]
[SRS_SPAL_12057]
[SRS_SPAL_12125]
  • 函数 Port_Init 应使用参数 ConfigPtr 指向的配置初始化所有端口和端口引脚

[SWS_Port_00078]

[ ]
  • 端口驱动模块的环境首先要调用函数 Port_Init 来初始化端口以供使用。

[SWS_Port_00213]

[ ]
  • 如果不先调用 Port_Init 函数,则无法对 MCU 端口和端口引脚进行任何操作。

[SWS_Port_00042]

{SRS_BSW_00101]
[SRS_SPAL_12057]
[SRS_SPAL_12125]
  • 函数 Port_Init 将初始化所有配置的资源。

函数 Port_Init 应应用以下有关控制器寄存器初始化的规则。

[SWS_Port_00113]

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

[SWS_Port_00214]

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

[SWS_Port_00215]

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

[SWS_Port_00217]

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

[SWS_Port_00218]

[SRS_SPAL_12461]
  • 所有其他未提及的寄存器均应由启动代码初始化。

[SWS_Port_00043]

[SRS_SPAL_12057]
  • Port_Init 函数应避免在受影响的端口引脚上出现故障尖峰

[SWS_Port_00071]

[ ]
  • 端口驱动模块环境应在复位后调用函数 Port_Init 来重新配置 MCU端口和端口引脚

[SWS_Port_00002]

[SRS_BSW_00101]
  • 函数 Port_Init 将把 Port 驱动模块使用的所有变量初始化为初始状态。

[SWS_Port_00003]

[SRS_SPAL_12163]
  • 端口驱动模块的环境还可以使用函数 Port_Init 来初始化驱动软件,并根据传递给此函数的配集将端口和端口引脚重新初始化为一个配置状态。

注意:在某些情况下,MCU 端口控制硬件提供输出锁存器,用于设置可能被用作 Dio 的端口引脚的输出电平。

[SWS_Port_00055]

[ ]
  • 在将端口引脚方向设置为输出之前,函数 Port_Init 应将端口引脚输出锁存器设置为默认电平(配置期间定义)。

要求 [SWS_Port_00055] 确保当设置输出端口引脚时,端口引脚上立即输出默认电平。

示例:

在某些 MCU 上,上电复位后,一个 Dio 可配置端口引脚将被配置为输入引脚。如果端口引脚所需的配置是输出引脚,则 Port_Init 函数应确保在将端口引脚的功能从输入切换为输出之前设置为默认电平。

[SWS_Port_00121]

[SRS_BSW_00414]
  • 函数 Port_Init 在被调用时应始终有个指针类型的参数,即使对于配置变体 VARIANT-PRE-COMPILE会传递配置)。在这种情况下,端口驱动程序模块的环境应将 NULL 指针传递给函数 Port_Init

端口驱动程序模块的环境应在运行操作期间调用函数 Port_Init。这仅适用于 Port 模块有个调用者的情况。

Port_Init 的配置:所有端口引脚及其功能以及复用功能须通过配置工具进行配置。

Port_SetPinDirection

[SWS_Port_00141]
[ ]

[SWS_Port_00063]

[SRS_Port_12405]
  • 函数 Port_SetPinDirection 应在运行时设置端口引脚方向

[SWS_Port_00054]

[ ]
  • 如果访问独立于端口的不同引脚,则 Port_SetPinDirection 函数应可重入。

[SWS_Port_00086]

[SRS_Port_12405]
  • 仅当预编译参数 PortSetPinDirectionApi 设置为 TRUE 时,Port_SetPinDirection 函数可供用户使用。如果设置为 FALSE,则 Port_SetPinDirection 函数可用。

Port_SetPinDirection 的配置:所有端口和端口引脚均需通过配置工具进行配置。参见 PORT117。

Port_RefreshPortDirection

[SWS_Port_00142]

[ ]

[SWS_Port_00060]

[SRS_Port_12406]
  • 函数 Port_RefreshPortDirection 应将所有配置端口方向刷新为配置的方向 (PortPinDirection)。

[SWS_Port_00061]

[SRS_Port_12406]
  • Port_RefreshPortDirection 函数应将那些配置为“运行时引脚方向改变”的端口引脚排除在刷新之外。

配置工具应为每个配置的端口引脚提供名称。

Port_GetVersionInfo

[SWS_Port_00143]

[ ]

[SWS_Port_00225]

[ ]
  • 如果启用了 Det,则需要检查参数 versioninfo 是否为 NULL,如果值为 NULL 指针,则报 PORT_E_PARAM_POINTER 错误。

Port_SetPinMode

[SWS_Port_00145]

[ ]

[SWS_Port_00125]

[ ]
  • 函数 Port_SetPinMode 应在运行时设置引用引脚的端口引脚模式

[SWS_Port_00128]

[ ]
  • 如果访问不同的引脚,则 Port_SetPinMode 函数应重入,且与端口无关。

[SWS_Port_00223]

[ ]
  • 如果 Det 已启用,且参数 PortPinModeChangeable 设置为 FALSE,则函数 Port_SetPinMode 应报告 PORT_E_MODE_UNCHANGEABLE 错误并返回,不执行任何其他操作

Port_SetPinMode 的配置:所有端口和端口引脚均需通过配置工具进行配置。参见 PORT117。

预期接口


可选接口

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

[SWS_Port_00146]

[ ]

序列图


端口总体配置



设置端口引脚的方向



刷新所有端口引脚的方向



更改端口引脚的模式



配置规范


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

容器和配置参数

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

Port




PortContainer




PortGeneral








顶层端口驱动程序容器保存适用于 Port 配置的参数。


PortPin












约束

[SWS_Port_CONSTR_00233]

[ ]
  • PortPinEcucPartitionRef 引用的 ECUC 分区应是 PortEcucPartitionRef 引用的 ECUC 分区的子集。

[SWS_Port_CONSTR_00234]

[ ]
  • 如果 PortEcucPartitionRef 引用个或ECUC 分区,则 PortPinEcucPartitionRef 的多重性应大于零,并且也引用其中个或个 ECUC 分区。

评论

此博客中的热门博文

ISO 14229-1-2020

AUTOSAR_SWS_CANDriver

Linux Driver Char Device 笔记

AUTOSAR_SWS_PWMDriver

AUTOSAR_SWS_ECUStateManager

EB - MCAL - MCU

AUTOSAR_SWS_ICUDriver

EB - MCAL - PWM