【教程】使用Davinci工具链配置基于TC397的MACL_ADC,快速上手AUTOSAR

系列文章目录

上一篇基于EB写的,比较一般;
https://blog.csdn.net/qq_44688936/article/details/127752952


文章目录

  • 系列文章目录
  • 前言
  • 一、ADCGeneral
  • 二、AdcHWUnits
  • 2.1 ADCChannnels
  • 2.2 ADCGroups
  • 2.3 AdcHwUnitInputClass
  • 总结

  • 前言

    本文为DaVinci 工具链,基于TC397芯片的MCAL-ADC模块配置解析,一点学习总结,抛砖引玉,让各位见笑了。


    配置内容主要包括以下部分

    一、ADCGeneral

    2是实现去初始化功能的API

    3、13都是实现错误检测功能,这里用到了所以都配为ON

    5、队列机制: 只有在AdcNonAutosarDmaResultHandling is false [STD_OFF]
    AdcPriorityImplementation(15) is ADC_PRIORITY_NONE. 这种情况下才能编辑。
    排队机制被禁用的话,则一次只处理一个转换。

    6、16是启用AdcGroup功能的API,必须勾选。

    7 是使能ADC的通知函数功能的API

    8实现硬件触发功能

    9是验证ADC驱动程序的初始化是否完成

    10 选择反初始化API的模式,默认的操作模式为SUPERVISOR

    11、添加/删除所有电源状态管理相关api (ADC_SetPowerState, ADC_GetCurrentPowerState, ADC_GetTargetPowerState, ADC_PreparePowerState),指示HW是否提供低电源状态管理;(黑点代表这个功能目前没有设置)

    12、对转换器状态轮询进行等待的最大等待时间,要确保下一次转换开始的时候,上一次的转换已经完成,转换器已经进入了空闲状态;为了确保转换器处于空闲状态,需要对转换器状态轮询进行等待,其最大等待时间由AdcMaxChConvTimeCount中输入的值定义

    12的取值与15-ADC转换优先级(AdcPriorityImplementation)和5、队列机制使能(AdcEnableQueuing)有关。
    当15选择的是软件硬件优先级机制都可用,或者选择优先级机制不可用并且ADC队列使能开关打开时,12的取值范围为16-16962;
    当15选择的是只有硬件优先级可以或者选择优先级机制不可用并且ADC队列使能未打开时,12的选择范围为0–16962;

    15 、有三种优先级机制可以选择分别是:
    AdcPriorityHw(硬件优先级机制):只有硬件优先级机制可用
    (AdcPriorityHwSw):硬件和软件优先级都可用;
     ADC_PRIORITY_NONE :优先级机制不可用;
    软件触发组的组优先级通常配置为低于硬件触发组的组优先级级别;

    18、ADC结果缓冲区中,ADC原始结果的对齐方式(左/右对齐)。举例如下

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

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

    21、AdcSafetyEnable 安全使能
    22、AdcSleepMode :
    该参数决定ADC驱动程序是否接受或拒绝来自SCU的休眠模式请求。
    ADC_SLEEP_MODE_ACCEPT: 接受SCU的睡眠模式请求 ;
    ADC_SLEEP_MODE_REJECT: 拒绝SCU的睡眠模式请求;
    SCU – 系统控制单元(system control Unit)负责处理系统控制任务;

    23、AdcStartupCalibApi(启动校准功能):从代码中添加/删除服务Adc_GetStartupCalStatus()和Adc_TriggerStartupCal()。启用这个API之后就能实现触发返回ADC硬件组的启动校准状态了;
    Adc_GetStartupCalStatus() :该API返回ADC硬件组的启动校准状态
    Adc_TriggerStartupCal() :该API触发启动校准。该API可以从任何核调用,在调用API之前,应该确保所有核的初始化序列都已经结束。

    24、AdcSupplyVoltage
    该参数将模拟电路调整到所选的电源电压:
    ADC_VOLTAGE_3P3V: 选择3.3V固定电源接通;
    ADC_VOLTAGE_5V: 选择固定5V电源接通;
    ADC_VOLTAGE_CONTROLLED_BY_SUPPLY: 电压范围由硬件支持的电源控制;(默认)

    25、AdcSyncConvEnable :启用或禁用ADC硬件组之间的同步转换。

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

    27、 AdcVersionInfoApi 获取版本信息;

    二、AdcHWUnits

    1、AdcAnalogClockSyncDelay :参数决定模拟时钟同步时延。延迟应小于或等于AdcPrescale-1(DIVA)。
    范围 : 0–7,默认为0;
    作用:让ADC延时进行同步采样

    2、AdcCalibrationSampleTime :参数决定校准采样时间
    ADC_CAL_TIME_2_TIMES_TADCI: 校准采样时间 = 2 x tADCI (默认)
    ADC_CAL_TIME_4_TIMES_TADCI: Calibration sample time = 4 x tADCI
    ADC_CAL_TIME_6_TIMES_TADCI: Calibration sample time = 6 x tADCI
    ADC_CAL_TIME_8_TIMES_TADCI: Calibration sample time = 8 x tADCI
    tADCI ==1/fADCI
    tADCI = Analog clock
    3、选择时钟资源,这里选择的是系统时钟
    4、硬件单元的ID,这里为ADC0;

    5、AdcIdlePrechargeEnable
    该参数决定采样电容是否开启预充电。
    电机控制器预充电路的主要作用是给大电容进行充电,以减少接触器接触时火花拉弧,降低冲击,增加安全性。电容并联在电源两端的时候,当电源接通瞬间,电容两端的电压不会突变,而电容两端的电流会突变。
    如果没有预充电路,那接触器会因为大电流发生粘连或损坏,影响电机控制器的安全性和可靠性。

    6、7没有使用到,作用比较小
    8、AdcPostCalibrationDisable
    参数决定是否启用或禁用 后校正。这里没怎么研究,之后专门介绍一下ADC采样的校准与后校正;

    9、AdcPrechargeReference
    参数决定是否使用VDDM/VSSM预充(ADC的主电源)
    VDDM——-电源引脚
    VSSM——–接地引脚

    10、AdcPrescale
    参数定义从fADC生成模拟内部时钟(fADCDI)的分压器。
    该参数的低倍数为1,因为用于生成模拟频率的分压器是执行转换时必须使用的。
    范围 :2—32
    默认值 :4;

    11、AdcReferencePrechargePhases
    该参数确定参考输入的预充电时钟相位,可以选择提前预充1个时钟相位或者两个相位,默认为PHASE_1;

    12、AdcRequestSource0ConvMode
    参数确定请求源的转换启动模式。请求源的转换启动模式配置是可编辑的,只有在启用优先级机制(AdcPriorityImplementation–Genaral部分的选项15)时才适用。
    adc_cancel_injt_repeat_mode:请求源可以取消其他源正在进行的转换
    ADC_WAIT_FOR_START_MODE:请求源等待从其他源完成当前转换

    15、AdcSampleSyncEnable
    参数用于确定ADC采样时间同步是否启用。
    同步采样一般应用于交流信号中,是指多个ADC的采集时刻完全同步。

    16、AdcSyncConvMode
    参数确定硬件组以独立模式还是同步模式运行。同步采样模式,例如三相电机需要采样UVW三个电流数据,所以必须使用同步采样,同步采样电机的三个数据一般要设置一个主模式,两个从模式;

    ADC_STAND_ALONE : 独立运行(默认)
    ADC_SYNC_MASTER : 主模式运行
    ADC_SYNC_SLAVE : 从模式运行

    参数AdcSyncConvMode决定了主HW组和从HW组。
    ADC驱动程序支持跨ADC硬件组的通道同步转换。该特性可以通过adcsyncconvable、AdcSyncConvMode和AdcSyncConvChannelEnable配置参数启用。参数AdcSyncConvMode决定了主HW组和从HW组。
    当Adc通道组在主HW组上被触发时,所有通过AdcSyncConvChannelEnable标记为同步转换的通道也将在从HW组上被触发。

    2.1 ADCChannnels

    1、An Channel Num
    TC397有些硬件单元有8个通道,有些有16个,需要查看原理图确定。

    3、启用了限制检查功能的ADC通道必须分配给ADC组,并且该Group只能有一个ADC通道

    4、AdcChannelRefVoltsrcHigh :每个通道的上升参考电压源,配置选项有两个;
    ADC_USES_CH0:使用通道CH0作为转换的参考电压。
    ADC_USES_VREF:使用模拟参考电压作为转换的参考电压。

    5、AdcChannelRefVoltsrcLow
    该参数默认值添加到ADC_USES_VAGND中,因为硬件只支持EVADC模拟接地引脚,使用模拟参考地作为转换的参考电压。
    参考电压:这个参考电压也叫做基准电压,如果没有基准电压,就无法确定被测信号的准确幅值。例如基准电压为2.5V,则当被测信号达到2.5V时ADC输出满量程读数,使用者就会知道ADC输出的满量程等于2.5V。不同的ADC,有的是外接基准,也有的是内置基准无需外接,还有的ADC外接基准和内置基准都可以用,但外接基准优先于内置基准。

    6、InputClassSelection:每个VADC HW单元有4个输入类(2个全局输入类和2内核输入类)用于配置通道分辨率和采样时间。选择的输入类参数值为信道分辨率和信道采样时间。

    7、启用此通道的同步转换。该通道的转换也将触发从HW组上相同模拟通道编号的转换;

    2.2 ADCGroups

    Group与Channel、HWUnit的关系:

  • 任何Channel都必须挂靠到Group下面,上层/API都是操作Group的,不能直接去操作Channel。
    每个Group下面可以挂一个或多个Channel,但至少有一个Channel.

    如果启用了全局限制检查功能并为ADC通道启用了通道特定限制检查,则通道组仅包含一个ADC通道

    如果挂了多个Channel,则这些Channel必须属于同一硬件单元。不能跨多个物理单元。

    一个Channel可以同时属于多个Group,如上CH0,CH1。但这种情况需要用户自己合理管控转换顺序。否则可能会出现冲突

  • ADC-Group与Channel、HWUnit详解参考这里

    1、2为通道别名

    3、组转换结果的访问模式类型,(模数转换之后需要设置如何访问转换后的结果)
    有两种模式
    ADC_ACCESS_MODE_SINGLE 单值访问模式—直接访问
    ADC_ACCESS_MODE_STREAMING 流访问模式—缓存访问
    streaming模式不允许在one-shot模式下软件触发时使用

    4、AdcGroupConversionMode: ADC模数转换的模式–如何进行转换
    ADC_CONV_MODE_CONTINUOUS :ADC通道组的转换在软件API调用(启动)后持续执行。转换本身是自动运行的(不需要额外的软件或硬件触发器)。
    ADC_CONV_MODE_ONESHOT : ADC通道组的转换在触发后执行一次。

    5、GroupID— 组的别名

    6、AdcGroup的优先级,范围是0到255,越大优先级越高;

    7、AdcGroupTriggSrc :选择Group的触发源,可以选硬件或者软件触发;
    依赖关系::AdcGroupConvMode:触发源HW对于连续转换模式不可用。

    8、AdcHwExtGateSelect:参数为组配置硬件门控源。值的范围取决于设备。
    当触发器通过GATE输入时,AdcHwExtGateSelect应该是CCU6(AdcHwExtTrigSelect = ADC_TRIG_15_GxREQTRP_GxREQGTySEL)

    9、AdcHwExtTrigSelect:为触发请求源配置请求引脚外部触发信号。

    10、AdcHwGateSignal :此参数为要启用的请求源的门控信号级别。
    如果选择ADC_GATE_SIGNAL_HIGH,高电平触发转换。
    如果选择ADC_GATE_SIGNAL_LOW,低电平触发转换。
    AdcHwExtTrigSelect ==ADC_USE_GATE_PIN_TO_TRIG.时,这个参数不可编辑;
    AdcHwTrigType == HW_TRIGG_TIMER时,这个参数不可编辑;

    11、AdcHwTrigSignal:
    ADC_HW_TRIG_BOTH_EDGES: 上升,下降沿都触发
    ADC_HW_TRIG_FALLING_EDGE:下降沿触发;
    ADC_HW_TRIG_RISING_EDGE: 上升沿触发;

    当AdcHwExtTrigSelect作为GTM(定时器)时,AdcHwTrigSignal应该是ADC_HW_TRIG_RISING_EDGE。
    当AdcHwExtTrigSelect是通过GATE_PIN ,并且AdcHwExtGateSelect是GTM或CCU6 (Timer)时,AdcHwTrigSignal应该选择 ADC_HW_TRIG_RISING_EDGE。

    12、AdcStreamingBufferMode
    将流缓冲区配置为“线性缓冲区”(即,一旦流缓冲区满,ADC驱动程序就会停止转换)或“环形缓冲区”(如果到达流缓冲区的末端,则环绕)
    ADC_STREAM_BUFFER_CIRCULAR :即使流缓冲区已满(达到的样本数量),ADC驱动程序也会通过绕流缓冲区本身继续转换。

    ADC_STREAM_BUFFER_LINEAR : 一旦流缓冲区满(达到采样数),ADC驱动程序就停止转换;
    依赖:AdcGroupAccessMode:仅对流访问模式有效

    13、AdcStreamingNumSamples(没截图到):
    在流访问模式下,每个通道要获取的ADC值的数量。
    在单访问模式下,该参数假设值为1,因为每个通道只处理一个样本。
    范围: 1-255;

    AdcGroupDefinition :分配AdcChannels给AdcGroups。

    Res Reg Definition :此参数定义用于存储此特定ADC转换结果的结果寄存器。对于AdcGroupDefinition的节点,该参数的值应按降序排列。

    2.3 AdcHwUnitInputClass

    AdcChConvMode
    参数定义标准转换的降噪级别。
    ADC_NOISE_REDUCTION_STEPS_0: 标准转换
    ADC_NOISE_REDUCTION_STEPS_1: 一个额外的降噪转换步骤
    ADC_NOISE_REDUCTION_STEPS_3: 3 个额外的降噪转换步骤
    ADC_NOISE_REDUCTION_STEPS_7: 7 个额外的降噪转换步骤

    AdcChPreChargeClkCycles
    参数定义用于标准转换的模拟输入预充电时钟周期数。四个选择项:
    ADC_INPUT_PRECHARGE_CYCLES_0: 没有预先充电
    ADC_INPUT_PRECHARGE_CYCLES_16: 预先16个时钟周期
    ADC_INPUT_PRECHARGE_CYCLES_32: 预先32个时钟周期
    ADC_INPUT_PRECHARGE_CYCLES_8: 预先8个时钟周期

    AdcChSampleTime
    参数定义要添加到2个采样时钟周期的最小采样阶段的额外时钟周期数。
    范围 0-31

    总结

    未完成问题:
    ADC硬件触发配置原理,AD采样时间、转换时间、校准时间、后校正时间计算,
    ADC Buffer Access Mode Example。后续更新

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【教程】使用Davinci工具链配置基于TC397的MACL_ADC,快速上手AUTOSAR

    发表评论