AUTOSAR学习笔记之外设
风语辰 发表于:2020-02-10 11:01:38
原标题:AUTOSAR学习笔记之外设
1. IO硬件抽象
IO硬件抽象是ECU抽象层的一部分。IO硬件抽象模块的目标是使数据通过RTE来传输,而完全不依赖于ECU硬件。这就是说软件组件设计者不需要更多的了解信号是如何影响物理层的。因此,该模块是特定于ECU的。
这主要通过把ECU信号映射到IO抽象端口上来实现。模块IO硬件抽象要提供用于初始化整个IO硬件抽象的模块。
下图显示了IO硬件抽象模块。它位于MCAL驱动之上。就是说IO硬件抽象模块要调用驱动API来管理片上设备。MCAL驱动的配置依赖于将由IO硬件抽象模块提供的ECU信号的质量。例如,当引脚层发生相关的改变时(上升沿、下降沿),需要进行通知。系统设计者不得不配置MCAL驱动,以允许对给定信号进行通知。通知来自于驱动,并在IO硬件抽象模块中进行处理。
2. ADC驱动
ADC驱动初始化并控制微控制器内部的模数转换单元。该驱动包含一系列的基本功能函数。为了能够在某些特殊的应用中进行信号的频率分析(例如,快速傅立叶变换),就需要加强流式存取的功能。
ADC驱动提供以下服务:
· 信号值结果的访问模式
· 流式访问。
通常,ADC通道的变换请求通过ADC通道组来进行控制。通道组可以运行于持续的变换模式或者单触发变换模式。
变换处理和交互作用:
在同一时刻,ADC驱动要管理一个以上的被配置成不同变换模式的组。
转换过程:
通常,ADC通道的转换请求通过ADC通道组来进行控制。一个组可以运行于持续的转换模式或者单触发转换模式。单触发转换模式的触发条件也要被配置和控制。
如果通道运行于不同的模式(例如,在普通操作时采用持续的转换模式,在特定时间点的特殊转换时使用单触发或者按照命令的转换方式),通道必须被分配给拥有不同操作模式的多个组。
为了改变组间共享的通道的操作模式,应用程序必须停止任何对包含指定通道的组的当前转换,然后启动包含指定通道的新组的转换。
为了让应用程序能够在任何时候执行立即转换,就要定义一个按照命令的转换方式。它必须挂起组转换,然后在按照命令的转换活动完成后重新激活它。
3. DIO驱动
DIO驱动提供基于端口和通道的、对内部通用I/O断点的读和写访问。这里的读和写并不被缓冲。这个驱动的基本行为是同步的。
DIO驱动提供了用于对下列设施进行读、写的服务:
· DIO通道(引脚)
· DIO端口
· DIO通道组
这些服务的行为是同步的。该模块工作于引脚和端口上,由PORT驱动来对它进行配置。因此,在DIO驱动里面就没有对该端口结构进行配置和初始化。
端口驱动模块:
很多端口和端口引脚是由端口驱动模块分配给各种功能的,比如
· 常规I/O
· ADC
· SPI
· PWM
DIO驱动抽象了对微控制器硬件引脚的访问。此外,它还能够对这些引脚进行分组。
DIO驱动提供以下服务:
· 一个一个地修改端口或通道组的输出通道的等级。
· 一个一个地读取端口或通道组的输入和输出通道的等级。
DIO驱动中的所有读写服务必须是可重入的。理由是:这些DIO驱动可以被不同的上层处理程序或驱动程序访问。这些上层模块可以并行的访问驱动。
4. GPT驱动
GPT驱动允许产生单触发或持续的计时器通知。这个模块使用通用计时器的硬件计时通道,因此就为操作系统中或者其它基本软件模块(在这类模块中,OS警告服务有过多的开销)中的使用提供了精确的、短期的计时。
GPT驱动提供了用于启动和停止硬件计时模块中的功能计时实例(通道)的服务。它能够产生单个超时周期以及重复超时周期。如果必须调用一个通知,那么当所请求的超时周期过期时,用户就能够对它进行配置。可以在运行时启用或禁用通知。
不管是从上一个通知发生以来的相对时间消耗,还是到下一个通知之间的剩余时间,都可以进行查询。
注意,GPT驱动仅产生时间基础,而不服务于时间计数器。这个功能是由另一个模块(ICU驱动)提供的。
GPT驱动可以用来唤醒ECU,不管预定义的超时周期是否过期。模式转换服务将GPT驱动在普通操作和睡眠模式之间进行转换。
该驱动不提供超时周期,这些超时周期超过了被时钟源、预定标器和计时寄存器所限制的最大值。用户必须对这个进行处理。
5. ICU驱动
ICU驱动控制微控制器的输入捕获单元。它提供了下列特性:
· 周期性的、低端的、高端的时间测量
· 边缘检测和通知
· 边缘计数
· 边缘时间戳
· 唤醒中断
对于信号边缘检测来说,需要使用捕获比较单元的边缘检测器或外部时间的中断控制器。
对于信号测量来说,需要一个捕获计时器以及至少一个捕获寄存器。
ICU调制PWM信号,计算脉冲,测量频率和责任(duty)周期,产生简单的中断以及唤醒中断。
ICU驱动提供以下服务:
· 信号边缘通知
· 控制唤醒中断
· 周期信号时间测量
· 边缘时间戳,可用于获取非周期的信号
· 边缘计数
为了保证数据一致性,应该提供可重入的代码。
时间单元节拍
为了从寄存器值中获得时间,需要知道振荡器频率、预定标器等等。因为这些设置是在MCU模块中或其它模块中产生的,不可能计算这些时间。因此,时间和节拍之间的转换是由上层负责的。
6. MCU驱动
MCU驱动提供用于基本微控制器的初始化,下电,复位和其它MCAL软件模块需要的微控制器特定功能的服务。初始化服务提供了灵活性,同时,除了启动代码之外,还提供了应用程序相关的MCU初始化。启动代码是完全特定于MCU的。MCU驱动直接访问微控制器硬件,它位于微控制器抽象层(MCAL)中。
MCU驱动的特征:
· 初始化MCU时钟,PLL,时钟预定标器和MCU时钟分布
· 初始化RAM部件
· 激活微控制器节电模式
· 激活微控制器复位
另外,还有提供一个服务来从硬件处获得复位的原因。
MCU驱动微时钟和RAM初始化提供MCU服务。在MCU配置集中,特定于MCU的时钟(例如,PLL设置)和RAM(例如,段基地址和大小)设置必须被配置。
7. 端口驱动
该模块初始化微控制器的整个端口结构。很多端口和端口引脚可以被分配给不同的功能,比如:
· 通用I/O
· ADC
· SPI
· SCI
· PWM
由于这个原因,必须对这个端口结构进行总的配置和初始化。这些端口引脚的配置和使用是依赖于微控制器和ECU的。
该模块应该提供用于初始化微控制器的整个端口结构的服务。很多端口和端口引脚可以被分配给各种不同的功能。由于这个原因,必须有该端口结构的全部配置和初始化。这些端口引脚的配置和模式是依赖于微控制器和ECU的。
该端口驱动模块应该完成端口结构的全部配置和初始化,该端口结构是用在DIO驱动模块中的。因此,DIO驱动工作再引脚和端口之上,由端口驱动对它进行配置。端口和端口引脚的配置顺序是由配置工具负责的。
端口驱动应该在使用DIO功能之前进行初始化。否则DIO驱动会产生未定义的行为。
端口访问的原子性:端口驱动应该通过使用原子指令或者利用OS的中断屏蔽功能来提供对端口的原子访问。
8. PWM驱动
每个PWM通道都连接到一个属于微控制器的硬件PWM上。该驱动提供了初始化和控制微处理器内部的PWM的服务。PWM模块产生有不同脉冲宽度的脉冲。
9. SPI处理程序/驱动
SPI总线是一种主从多节点总线系统,主节点设置片选(CS)来选择一个从节点来进行数据通信。SPI有一个4线的同步串行接口。使用片选线来激活数据通信。
SPI模块提供基于通道的对SPI总线上的不同设备的读、写和传输访问。SPI通道代表数据元素(8到16比特)。这些通道可能是顺序组合的,不能够被中断。通道有一个静态配置定义的波特率、片选等等。SPI设备通常由所使用的SPI硬件单元和相关的片选线来标识。这个模块能够作为SPI主节点来使用。
这个软件模块的功能范围应该是可静态配置的,以尽可能多的适应每个ECU的时间需要。那就是说,比如同步的、异步的、或者两者都有的SPI访问都可以存在于ECU。因此,两个SPI驱动可以存在,但仅有一个处理接口。
SPI处理程序/驱动提供了一些服务来对通过SPI总线连接的设备进行读写。它提供了所需的机制来配置片上SPI外设。
单片式的SPI处理程序/驱动包含处理和驱动功能。它的主要目标是充分利用每个微控制器的特性,使得依赖于静态配置的实现最优化,以尽可能多的适应ECU的需要。
10. 看门狗接口
内部看门狗驱动控制MCU的内部看门狗计时器。它提供触发器功能和模式选择服务。
外部看门狗驱动
外部看门狗驱动控制外部硬件看门狗。它提供触发器功能和模式选择服务。它有和内部看门狗驱动一样的功能作用域。
如果在一个ECU内使用了多于一个的看门狗设备和看门狗驱动(例如,内部软件看门狗和外部硬件看门狗),该模块就使得看门狗管理程序能够选择合适的看门狗驱动,以及看门狗设备。
看门狗驱动接口提供了对下层看门狗驱动的服务的统一访问,比如模式转换和触发。有设备索引选择适当的看门狗设备。看门狗驱动的服务的行为(同步/异步/计时)是受保护的。
看门狗驱动接口没有给看门狗驱动增加额外的功能。看门狗驱动接口也没有从看门狗属性中进行抽象,比如toggle或窗口模式,超时周期等,就是说,该驱动接口没有隐藏下层看门狗驱动和看门狗设备的任何特性。
责任编辑: