【搞一点AUTOSAR】基于TC397的MACL-ADC配置解读(使用EB)

文章目录

  • 【搞一点AUTOSAR】基于TC397的MACL-ADC配置解读(使用EB)
  • 前言
  • 一、ADC模块介绍
      • 1、ADC模块的功能
      • 2、模块相关概念首字母缩略介绍:
  • 二、基于TC397的EB_MCAL_ADC模块介绍
    • 1.Config Variant与AdcConfigSet
    • 2. AdcGeneral
    • 3.AdcPublishedInformation

前言

本文描述的配置基于英飞凌TC397芯片,ADC模块是MCAL相当重要的部分,本文先对模块,API函数等做基本介绍,下一篇描述如何完成基本的ADC配置


一、ADC模块介绍

1、ADC模块的功能

初始化并控制微控制器的内部模拟数字转换器单元(s)。它提供启动和停止转换的服务,以启用和禁用转换的触发源。此外,它还提供服务来启用和禁用通知机制和例程,以查询转换的状态和结果。

ADC模块在的ADC通道组上工作,这是由的ADC通道构建的。ADC通道组将模拟输入引脚(ADC Channel)、所需的ADC电路本身和转换结果寄存器组合成一个实体,它可以通过ADC模块进行单独控制和访问。

2、模块相关概念首字母缩略介绍:

DEM :Diagnostic Event Manager 诊断事件管理
DET :Default Error Tracer 默认错误跟踪器
ADC :Analogue Digital Converter 模数转换器
MCU :Microcontroller Unit 微控制器管理单元
API :Application Programming Interface 应用程序接口
HW :Hardware 硬件
SW :Software 软件
ADC HW Unit : ADC硬件模块,表示一种微控制器输入电子设备,它包括执行“模拟到数字转换”所需的所有部件。
ADC Module :ADC基本软件模块ADC驱动程序,也缩写为ADC驱动程序
ADC Channel :表示绑定到一个端口引脚的逻辑ADC实体。多个ADC实体可以映射到同一个端口引脚。
ADC Channel Group :连接到同一ADC硬件单元的一组ADC通道(例如,一个采样和保持转换器和一个A/D转换器)。整个组的转换是由一个触发源触发。
ADC Result Buffer (ADC Streaming Buffer, ADC Stream Buffer) :ADC驱动程序的用户必须为每个组提供一个缓冲区。如果选择了流媒体访问模式(streaming access mode)该缓冲区可以保存同一组通道的多个样本。如果选择了单一访问模式,缓冲组中保留每个通道的一个样本。
Software Trigger :启动一个ADC通道组或连续一系列ADC通道组转换的软件API调用
Hardware Trigger :启动ADC通道组的一次转换的ADC内部触发信号。ADC硬件触发器在ADC硬件内部生成,例如基于ADC计时器或触发器边缘信号。触发器硬件是紧密耦合的或集成在ADC硬件中的。在检测到硬件触发器后,无需使用任何软件即可启动ADC通道组转换。注意:如果ADC硬件不支持硬件触发器,则将软件触发器与GPT/ICU驱动程序结合使用,可以实现类似的行为。例如,在GPT计时器通知功能中,可以启动软件触发的ADC通道组转换。
Conversion Mode
One-Shot: ADC通道组的转换在触发后执行一次,并将结果写入分配的结果缓冲区。触发器可以是软件API调用或硬件事件。
Continuous: ADC通道组的转换在软件API调用(开始)后连续执行,并将结果写入分配的结果缓冲区。转换本身正在自动运行(受硬件/中断控制)。连续转换可以通过软件API调用(停止)来停止。
Sampling Time, Sample Time :模拟值采样的时间(例如加载电容器,
Conversion Time :将采样的模拟值转换为数字表示的时间。
Acquisition Time : Sample Time + Conversion Time(样本时间+转换时间)

二、基于TC397的EB_MCAL_ADC模块介绍

1.Config Variant与AdcConfigSet

Config Variant :变体配置,默认选择VariantPostBuild就好了;
Note:
VariantLinkTime: 链接时生效的参数。
VariantPreCompile:编译前生效的参数。
VariantPostBuild: 混合编译前以及编译后生效的参数。

AdcSyncClockDisable :此参数确定模拟时钟是否在同步/非同步模式下生成。转换器控制(CONVCTRL)时钟的配置由MCU驱动器完成;
AdcSystemClock :这个参数是指MCU驱动程序配置的系统时钟。使用这个系统时钟,给ADC组的计时器触发器重新加载值(触发器也是一个计时器,相当于ADC模块的计时器需要一个标准时间,就像现实里会用伦敦时间,北京时间作为标准,系统时钟就是起到这个作用);

2. AdcGeneral

AdcDeInitApi :从代码中添加/删除服务Adc_DeInit(),若勾选,则可使用去初始化功能;

AdcDevErrorDetect :打开或关闭默认错误跟踪器(Det)的检测和通知。

AdcSafetyEnable:启用/禁用安全检查和所有相关通知;启用ADC驱动程序安全特性的预处理器开关。通过打开此开关,隐式地启用了这些安全功能:对API参数进行了范围检查;ADC配置结构有一个唯一的标记手段,该手段将由驱动程序验证;发布ADC驱动程序的安全使用情况,供用户设置相应的ADC设置;(AUTOSAR标准文档中未规定,而是TC_397芯片自带的功能)

AdcMultiCoreErrorDetect :从代码中添加/删除多核错误检测功能

AdcInitCheckApi :从代码中添加/删除服务Adc_InitCheck(),该服务用于验证ADC驱动程序完成的初始化(AUTOSAR标准文档中未规定,而是TC_397芯片自带的功能);

AdcEnableLimitCheck:启用或禁用ADC驱动程序中的限制检查功能;确定在优先级机制禁用的情况下,队列机制是否处于活动状态;(全局启用限制检查,若未启用,则AdcChannelHighLimit和AdcChannelLowLimit、AdcChannelRangeSelect不可用)(AUTOSAR标准文档中未规定,而是TC_397芯片自带的功能)

AdcEnableQueuing:确定在优先级机制禁用的情况下,队列机制是否处于活动状态;如果启用了优先级机制,则队列机制始终处于活动状态,而参数ADC_ENABLE_QUEUING不会被求值;

AdcEnableStartStopGroupApi :从代码中添加/删除服务Adc_StartGroupConversion()和Adc_StopGroupConversion();

AdcGrpNotifCapability :确定组通知机制(启用和禁用通知的功能)在运行时是否可用。AdcNotification函数必须在该API启用时才可用;

AdcHwTriggerApi:从代码中添加/删除服务Adc_EnableHardwareTrigger()和Adc_DisableHardwareTrigger()

AdcReadGroupApi :从代码中添加/删除服务Adc_ReadGroup()。

AdcVersionInfoApi :从代码中添加/删除服务Adc_GetVersionInfo()。

AdcStartupCalibApi:从代码中添加/删除服务Adc_GetStartupCalStatus()和Adc_TriggerStartupCal()

AdcTriggerOneConversionEnable :该参数允许在API—Adc_TriggerStartupCal()中触发启动校准之前,为每个配置的HW单元执行一个虚拟转换。

AdcSyncConvEnable :支持ADC HW组之间的同步转换。

AdcPriorityImplementation
确定转换请求的优先级机制是否可用,如果可用,则确定优先级机制的类型。此选择适用于具有软件触发源和硬件触发源的组;
有三种优先级机制可以选择分别是:
AdcPriorityHw(硬件优先级机制):只有硬件优先级机制可用
(AdcPriorityHwSw):硬件和软件优先级都可用;
 ADC_PRIORITY_NONE :优先级机制不可用;
软件触发组的组优先级通常配置为低于硬件触发组的组优先级级别;

AdcResultHandlingImplementation:确定ADC驱动程序的结果处理模式;
ADC_INTERRUPT_MODE_RESULT_HANDLING:转换结果在请求源ISR (AUTOSAR模式)中传输。
ADC_DMA_MODE_RESULT_HANDLING:使用DMA通道传输转换结果。ADC_POLLING_MODE_RESULT_HANDLING:使用同步api传输转换结果。

AdcResultAlignment :ADC结果缓冲区中的ADC原始结果对齐方式(左/右对齐)。

AdcMaxChConvTimeCount (0 -> 16962)
在转换请求停止时,A/D转换器中正在进行的信道转换不能立即停止。相反,软件需要等待信道转换完成。为了确保转换器处于空闲状态,需要对转换器状态轮询进行等待,其最大等待时间由AdcMaxChConvTimeCount中输入的值定义

AdcSleepMode
该参数决定ADC驱动程序是否接受或拒绝来自SCU的休眠模式请求。
ADC_SLEEP_MODE_ACCEPT: 接受SCU的睡眠模式请求 ;
ADC_SLEEP_MODE_REJECT: 拒绝SCU的睡眠模式请求;

AdcSupplyVoltage
该参数将模拟电路调整到所选的电源电压,该参数的默认值为对应SFR的重置值
ADC_VOLTAGE_3P3V: 3.3V固定电源接通;
ADC_VOLTAGE_5V: 固定5V电源接通;
ADC_VOLTAGE_CONTROLLED_BY_SUPPLY: 电压范围由电源控制;

AdcRuntimeApiMode
参数定义运行时api将在其中操作的特权模式。
由于ADC驱动程序访问SFRs,在监控器模式下操作ADC驱动程序更加高效。因此,默认的操作模式是supervisor。
当AdcInitDeInitApiMode配置为User-1模式时,AdcRuntimeApiMode必须配置为User-1模式

AdcInitDeInitApiMode
配置参数定义初始化和反初始化api将在其中操作的特权模式。
由于ADC驱动程序访问SFRs,在监控器模式下操作ADC驱动程序更加高效。因此,默认的操作模式是supervisor。

3.AdcPublishedInformation

AdcPublishedInformation
关于PublishedInformation(发布信息)
这个模块包含了由BSW模块的实现者定义的数据,当模块适应(即配置)到实际的硬件和软件环境时,这些数据不会改变。它包含版本和制造商信息。这对于为每个BSW提供明确的版本标识是必要的模块。这个模块一般不用配置,保持默认即可,因为主要与硬件相关的部分有关。